DHCP原理介绍

来源:互联网 发布:python getopt 详解 编辑:程序博客网 时间:2024/06/08 19:11
DHCP分配的IP地址资源则具有时效性、是动态的,有利于提高IP资源的利用率
DHCP使用UDP协议报头,服务器端口67,客户端端口68
DHCP使用Request和Reply消息格式,DHCP的功能是依赖于报文的OPTION字段来进行实现的;


DHCP报文介绍(续)
DHCP报文直接借用了BOOTP的报文格式,其中的核心内容是OPTION
DHCP OPTION格式
每个Option都由Tag、Len、Data三大部分组成:1、Tag表示本Option的作用
2、Len表明后续Data的长度(Tag=0、255的option比较特殊,没有对应Data,当然也不需要Len长度)
3、Data内容作为Tag的补充详细说明


DHCP的协议流程
下面以DHCP客户端的角度来描述DHCP整个协议流程转换机制


INIT
客户机第一次启动之后,进入Init初始化状态,此时通过发送DHCP Discover,用于探测和发现服务器,同时状态切换到Selecting状态
该报文承载于UDP:67中,通过IP广播发送

        由于该请求为广播形式,通常在发送时会设置一个随机的实验延迟(≤10秒),以避免各个DHCP Client同时发送广播报文,对局域网造成不必要的影响

SELECTING
服务器收到Discover报文后,查看自己的IP Pool,如果IP Pool有地址可用,则选取一个地址,分配到Yiaddr中;如果没有可用IP,则丢弃;
该报文被封装到UDP:68中,通过IP广播给Clients

DHCP Serv判断Discover报文接收端口的IP网段,然后从与之相同的DHCP IP Pool中按顺序选取一个
服务器同时还必须分配Lease Time给用户:
  如果Discover请求的Lease Time未指定,且Client还没有IP地址,则按照Server的默认设置分配
 如果请求的Lease Time未指定,但Client已经获取了地址,则把该IP Binding的Lease time值返回
  如果Discover指定了Lease Time值,则无论Client是否已经有IP地址,Server可以选择在请求值和自己的默认Lease Time中选取一个进行分配

REQUESTING
在一个广播域中,客户端可能同时收到多个DHCP Serv的Offer,如何选择呢?
  Client设置一个较短的收集时间段,在此期间可能收到的多个Offers,一般最先到达的Offer为优先,或者可以选择上次确定使用的Server,Client可以根据需要来进行选择,并向该Serv发起后续请求报文,同时状态切换为Requesting

Client选定一个最优的Offer以后,就会根据该Offer提供的OPTION来发起Request,正式请求这些资源
以上内容被封装到UDP:6867报文, 通过IP广播发送到指定的Serv

BOUND
服务器收到Request报文之后,会通过ACK报文给用户正式指派一个IP地址,并进行Binding操作;如果用户请求的IP地址非法,则回应NAK
以上内容被封装到UDP:6768报文, 通过IP广播发送到指定的Client

最后客户端收到ACK报文之后,从中提取相关的IP Addr、Lease Time、Router、DNS等信息,并自动设置到自己的网卡中
DHCP基本流程就此结束,用户可以进行后续的网络访问和操作
当然,Client如果发现ACK报文异常,可以使用Decline报文进行拒绝,此时状态将回到初始INIT

注意:DHCP Serv在正式ACK之前,通常需要通过Ping或者ARP报文来探测一下所分配的IP地址是否被其他主机占用!


DHCP定时器
BOOTP协议中,服务器为客户主机分配完IP地址等之后,该地址将被“永久”使用,但这显然不利于有限IP资源的高效利用,所以DHCP在设计中引入了Lease Time这个租约的概念,并围绕它设置了多个定时器,以确保IP地址资源都分配给了活动的主机,不活动主机的IP地址资源将被回收再利用
Lease Time初始值通常由DHCP Serv统一指定

T1定时器
DHCP客户主机首先需要维护一个T1定时器,它通常是Lease Time的一半
当客户端收到服务器分配地址的T1时间之后,将自动进入Renewing状态,重新向DHCP Serv发送Request报文,用以请求/续订原IP地址的租约时间
注意该IP报文是单播给原DHCP服务器的

与正常Request报文的差异
相对于正常DHCP流程,Renewing状态中发起的Request报文,主要有如下几个差异:
Ciaddr=Client IP addr
Server Identifier=Must Not
服务器收到Renewing的Request报文之后,如果判定该IP地址还有效,会回应ACK报文,其中包含了一个新的Lease Time值

客户端收到DHCP ACK之后,提取其中的Lease Time,更新自己的定时器,同时其状态返回BOUND。
如果客户端没有收到ACK报文,则继续等待:
在后续的时间段中,每到剩余时间的一半时,就会重新发送Renewing Request报文,即分别在1/2、3/4、7/8等时发送,但两个发送的最小时间间隔不会小于一分钟
如果客户端在7/8租约期时的请求还没有回应,则状态自动切换到Rebinding

客户端在T2时刻进入Rebinding状态后,如果发送的Request广播没有任何回应,会跟Renewing状态相似,每当剩余租约时间减半的时候,将重新发送续约请求,当然最 小时间间隔≥60秒
如果有服务器返回ACK,即续约成功,客户端将复位自己的租约时间并重新进入到BOUND状态
如果在Lease Time完全到期之前,服务器都没有回应,Client将重新返回INIT初始状态,开始新一轮的DHCP请求。

REBOOT
用户通过DHCP获取的IP地址虽然是“动态”的,但一般情况下为了方便日常使用,同一台主机在不同时刻请求到的IP地址尽量保持不变,
用户通常缓冲上次获取的IP地址等信息,这种情况下,它在请求时,就直接通过广播发送Request报文;当然其中包含了原有的IP地址等信息

服务器收到这种指定IP地址(Requested IP Addr)的Request报文,会查看自己的Binding数据库,如果有匹配的条目且没有超过Lease Time,就直接通过ACK报文 来分配地址;否则发送NAK;
客户端收到NAK,或者在有限时间内没有收到服务器ACK报文之后,状态将切换会初始的INIT状态

DHCP的Release
如果用户离开,不再需要原有分配的IP信息时,可以通过发送Release报文给DHCP Server,这样可以让Serv端尽快的释放IP资源,而不必等到Lease Time的结束
Release报文的发送,是不期待服务器有回应的。

参考:DHCP原理.ppt





原创粉丝点击