1. [ ] DHCP工作流程:
  2. 客户端发送DHCP Discover广播报文即目的地址为255.255.255.255,在网络上寻找DHCP Server。网络的的DHCP服务器响应客户端的请求,可能有多个DHCP Sever响应,以广播的方式进行。
  3. 在网络中接收到DHCP discover发现信息的DHCP服务器都会做出响应,它从尚未出租的IP地址中挑选一个分配给DHCP客户机,向DHCP客户机发送一个包含出租的IP地址和其他设置的DHCPoffer信息。
  4. 客户端收到了DHCP Server的DHCP Offer报文之后,则向DHCP Server发送所需要的IP地址请求,该信息中包含向它所选定的DHCP服务器请求IP地址的内容。因为有多个DHCP服务器,所以客户端是以广播方式发送DHCP Request报文,还因为要通知所有的DHCP服务器,他将选择某台DHCP服务器所提供的IP地址 。
  5. 服务器收到请求之后,给客户端发送ACK响应报文。
  6. 以后DHCP客户端每次重新登录网络时,就不需要再发送DHCP discover发现信息了,而是直接发送包含前一次所分配的IP地址的DHCP request请求信息。当DHCP服务器收到这一信息后,它会尝试让DHCP客户机继续使用原来的IP地址,并回答一个DHCP ack确认信息。
  7. 如果此IP地址已无法再分配给原来的DHCP客户机使用(比如此IP地址已分配给其它DHCP客户机使用),则DHCP服务器给DHCP客户机回答一个DHCP nack否认信息。当原来的DHCP客户机收到此DHCP nack否认信息后,它就必须重新发送DHCP discover发现信息来请求新的IP地址。

相对于DHCP CLIENT,DHCP SERVER的行为比较简单,DHCP SERVER的行为完全由DHCP CLIENT来驱动,只需根据收到的DHCP CLIENT的各种请求报文,相应的响应不同的DHCP响应报文即可。

DHCP SERVER给DHCP CLIENT分配IP地址原则:DHCP SERVER收到DHCP请求报文后,将会首先查看“giaddr(gateway IP address )”字段是否为0,如果不为0,则就会根据此IP地址所在网段从相应地址池中为CLIENT分配IP地址,如果为0,则DHCP SERVER认为CLIENT与自己在同一子网中,将会根据自己的IP地址所在网段从相应地址池中为CLIENT分配IP地址。

DHCP SERVER还能实现地址池管理功能。


客户端获得的IP地址都带有一个租期,在租期满了之后,如果没有续约行为,则用户的IP地址会被服务器收回。

流程如下:

当租期到50%的时候,客户端发送DHCP Request 报文,进行续约,因为前期已经有DHCP Server的信息,故此时是单播。

服务器收到DHCP Request之后,给客户端发送响应信息,此次重置租期。

如果服务器在租期50%的时候没有收到客户的续约报文(DHCP Request),则客户的IP地址租约不会重置。到租约时间的87.5%的时候,客户端还没有收到服务器的响应(针对客户端50% 发出的请求),客户端会假定原来的DHCP服务器不可用,并开始发送广播的DHCPREQUEST报文。网络上的任何DHCP服务器均可以响应此客户端的请求,并向此客户端发送DHCPACK报文或者DHCPNAK报文。

如果客户端收到一个DHCPACK报文,那么就返回到绑定状态,且重新设置“租期更新和重绑定定时器”。

如果客户端收到的都是DHCPNAK报文,那么就返回到初始化状态。此时客户端必须立即停止使用此IP地址,并且返回到初始化状态,重新申请新的IP地址。

若客户端在“到达租期定时器”到期前都没有收到响应,客户端必须立即停止使用此IP地址,并且返回到初始化状态,重新申请新的IP地址。

DHCP 服务器收到续约请求后,发送DHCP ACK响应用户的续约,此时重置用户的租期。


DHCP Relay:

DHCP中继的应用环境:

早期的DHCP协议只适用于DHCP客户端和服务器处于同一个网段内的情况,不能跨网段,早期的DHCP报文格式中少很多字段,如giaddr、hop等,后期进行了扩充。因此,为进行动态主机配置,每个网段需要一个DHCP服务器,这显然是很不经济的。

DHCP中继(DHCP Relay)功能的引入解决了这一难题:客户端可以通过DHCP中继与其他网段的DHCP服务器通信,最终取得合法的IP地址。这样,多个网段的DHCP客户端可以使用同一个DHCP服务器,既节省了成本,又便于进行集中管理

DHCP报文多采用广播方式是无法穿越多个子网的,当DHCP报文要穿越多个子网时,就要有DHCP RELAY的存在。

DHCP RELAY可以是路由器,也可以是一台主机,总之,DHCP RELAY要监听UDP目的端口号为67的所有报文。

当DHCP RELAY收到一个这样的报文时,会首先判断是否是用户的请求报文,如果是而且“giaddr”(gateway IP address )字段为0,则把自己的IP地址填入此字段,并把此报文单播给真正的DHCP SERVER,以实现DHCP报文穿越多个子网的目的。

当DHCP RELAY发现这是DHCP SERVER的响应报文时,会根据“flag”字段中的广播标志位来广播或单播封装好的报文后,传送给DHCP CLIENT。

DHCP Relay场景下的流程如下:

  1. [ ] 客户端发送DHCP Discover广播报文在网络上寻找DHCP Server。
  2. DHCP Relay收到DHCP Discover报文后,把自己的IP地址填入giaddr 字段,发送给DHCP Server。并把DHCP Server 字段填充相应的Server IP 地址,发送单播报文给DHCP Server。
  3. DHCP Server 收到 DHCP Relay发来的Discover报文,给DHCP Relay相应,给客户端响应DHCP Offer报文,其中带有DHCP服务器的IP地址。
  4. DHCP Relay 把收到的Offer报文传送给客户端。
  5. 客户此时已经找到DHCP Server,开始发送DHCP Request请求IP地址。
  6. DHCP Relay 收到此请求后,把giaddr字段填充自己的IP地址,并把DHCP Request报文单播发给DHCP Server。
  7. Server收到请求后,给客户端分配IP地址,发送DHCP ACK 报文,如果客户的请求地址无效则发送NAK报文给DHCP Relay。Server发送给DHCP Relay的报文中,Your IP address填充分配给客户的IP地址。
  8. DHCP Relay收到服务器的响应报文,把相应的报文发送给客户端。
  9. 如果用户想释放IP地址,则发送DHCP Release报文,报文中Client IP Address填充已获得的IP地址。
  10. DHCP Relay收到Release报文后,把giaddr字段填充自己的IP地址发送给Server。Server收到请求后,释放先前分配的IP地址。

results matching ""

    No results matching ""