当前位置:首页 > DHCP协议讲解
DHCP协议讲解
第3章 DHCP协议的实现过程
第3章 DHCP协议的实现过程
3.1 DHCP CLIENT的行为
所有支持DHCP 协议并能够发起DHCP过程的终端都称之为DHCP CLIENT,包括普通PC机,各种特殊设备如CABLEMODEM,IDT等。
DHCP CLIENT自己必须能够发出DHCPDISCOVER.、DHCPREQUEST、DHCPDECLINE等报文 (DHCPINFORM报文也是DHCP CLIENT发出,但实际中很少见),并且必须能够处理从服务器收到的以下几种报文:DHCPOFFER、DHCPACK和DHCPNAK。
当DHCP CLIENT处于初始化状态,即还没有获取IP地址的状态时,DHCP CLIENT将会发出一个广播的DHCPDISCOVER报文从而开始DHCP过程,其间与DHCP SERVER的交互过程下面详述。DHCP CLIENT自己应该具备超时机制,当此次DHCP不成功时,再自动开始新的DHCP过程。而且DHCP CLIENT还要根据“xid”字段来检查收到的DHCP 响应报文是否与自己发出的请求报文相匹配。
一旦DHCP CLIENT获得一个具有有限使用期限的IP地址后,它将自动维护一个定时器,在IP地址使用期限的50%的时刻,自动启动单播续延IP地址租期的过程,如若续延成功,则使用租期相应向前延长,否则,在IP地址使用期限的87.5%的时刻,自动启动广播续延IP地址租期的过程,如若续延成功,则使用租期相应向前延长,否则在IP地址使用期限到期时,DHCP CLIENT将不再使用此IP地址,而是开始新的DHCP过程再次申请IP地址。
10
DHCP协议讲解
第3章 DHCP协议的实现过程
?÷?ú???ˉ????3?ê??ˉDHCPREQUESTDHCPDISCOVER3?ê??ˉDHCPNAKμè′y?ìó|DHCPNAKDHCPNAK?ò×aó?μ??ú????1?2¥D??óDHCPOFFERDHCPACKDHCPREQUEST×aó?μ??ú87.5%DHCPREQUESTμ¥2¥D??óDHCPACK×aó?μ??ú50%DHCPREQUEST???óDHCPACK??μ?IPμ??·è???×aó?/DHCPRELEASEDHCPACK
图5 DHCP CLIENT 行为图
当DHCP CLIENT曾经获得过IP地址,然后重启初始化时,DHCP CLIENT仍优先想使用以前的IP地址,此时,DHCP CLIENT会直接启动广播续延IP地址租期的过程,如若续延成功,则使用租期相应向前延长,否则开始新的DHCP过程再次申请IP地址。 DHCP CLIENT的DHCP过程状态图如图5所示。
3.2 DHCP SERVER的行为
DHCP CLIENT,DHCP SERVER的行为比较简单,这只是仅从DHCP协议实现的角度来说的。因为在DHCP SERVER上必须提供给DHCP CLIENT分配IP地址和配置相关初始配置信息的功能,也就是通常所说的地址池管理功能,这又是个比较繁杂的工作,但是,这却不是DHCP 协议本身的工作。 除了上述的地址池管理功能外,DHCP Server的行为完全由DHCP客户端来驱动,因此其行为相对简单,只需根据收到的DHCP CLIENT的各种请求报文,相应的响应不同的DHCP 响应报文即可。
当DHCP SERVER收到DHCPDISCOVER报文后,会从地址池中分配一个空闲IP,并获得DHCP CLIENT请求的参数,构造DHCPOFFER报文响应DHCP CLIENT;当DHCP SERVER收到DHCPREQUEST报文时,就会根
11
DHCP协议讲解
第3章 DHCP协议的实现过程
据报文中记录的DHCP CLIENT的硬件地址查找其地址分配表,如若找到,则响应DHCPACK报文,DHCP CLIENT成功获得IP地址和配置信息,否则,响应DHCPNAK报文,DHCP CLIENT会自动重新开始DHCP过程;当DHCP SERVER收到DHCPRELEASE报文后,会解除这个IP地址与某个DHCP CLIENT的绑定,回收这个IP地址重新分配;当DHCP SERVER收到DHCPDECLINE报文后,会禁用报文中“客户机IP地址”字段的IP地址,不再分配这个IP地址。
注意: DHCP SERVER应该把收到的请求报文中的“xid”字段原封不动地拷贝到响应报文的“xid”字段,否则DHCP CLIENT不会接受这个响应报文。 DHCP SERVER是如何知道给DHCP CLIENT分配哪个网段的IP地址呢?DHCP SERVER收到DHCP请求报文后,将会首先查看“中继代理IP地址”字段是否为0 ,如果不为0,则就会根据此IP地址所在网段从相应地址池中为CLIENT分配IP地址,并且把响应报文直接单播给这个“中继代理IP地址”指定的IP地址,就是DHCP RELAY AGENT,而且UDP的目的端口号填为67,而不是68,如果为0,则DHCP SERVER认为CLIENT与自己在同一子网中,将会根据自己的IP地址所在网段从相应地址池中为CLIENT分配IP地址。
3.3 DHCP RELAY的行为
由于DHCP报文都采用广播方式,是无法穿越多个子网的,当要想DHCP报文穿越多个子网时,就要有DHCP RELAY的存在。DHCP RELAY可以是路由器,也可以是一台主机,总之,在具有DHCP RELAY功能的设备中,所有具有UDP目的端口号是67的局部传递的UDP信息,都被认为是要经过特殊处理的,所以,DHCP RELAY要监听UDP目的端口号为67的所有报文。 当DHCP RELAY收到一个这样的报文时,会首先判断是否是用户的请求报文,如果是用户的请求报文,它会先查看“跳数”字段的值,如果该值超过了16,这个报文会被丢弃,目前一般“跳数”字段的缺省值被设置为4,即如果“跳数”的值大于4,就将用户的请求报文丢弃。
如果“跳数”字段的值在规定范围之内,并且DHCP RELAY决定传播该报文,它必须检查“中继代理IP地址”字段的值,如果这个字段的值为0,则DHCP RELAY就会将接受到请求报文的端口的IP地址填入此字段,如果该端口有多个IP地址,DHCP RELAY会挑选其中的一个并持续用它传播全部的DHCP报文;如果这个字段的值不是0,则这个字段的值不能被修改,也不能被填充为广播地址。在这两种情况下,报文都将被单播到新的目的地(或DHCP
12
DHCP协议讲解
第3章 DHCP协议的实现过程
SERVER),当然这个目的地(或DHCP SERVER)是可以配置的,以实现DHCP报文穿越多个子网的目的。
当DHCP RELAY发现这是DHCP SERVER的响应报文时,它也应当检查“中继代理IP地址”字段、“你的IP地址”字段和“客户机硬件地址”字段等,这些字段给DHCP RELAY提供了足够的信息将响应报文传送给客户机。
“中继代理IP地址”字段的值(非0)常常被用来标示一个用来传播响应报文的逻辑端口,如果这个值不能匹配任何一个与DHCP RELAY直连的逻辑端口,则这个响应报文将被丢弃。
同样DHCP RELAY也会检查“标志”字段中的广播标志位的值,如果为1,将广播封装好的报文,否则单播封装好报文后,传送给DHCP CLIENT,标准的DHCP RELAY的功能相对来说也比较简单,只是重新封装、续传DHCP报文。 下面的图6很好的标示出了对于不同的请求报文,其相应的响应报文的方式。
图6 不同的请求报文多对应的响应报文方式 其中: B表示广播的标志位
X表示并不关心相应的字段取什么值
normal表示从给定的IP地址进行正常的IP路由转发或用ARP转发
3.4 DHCP交互过程
标准的DHCP server 和client的交互过程如图7所示:
13
共分享92篇相关文档