DHCP Client有限状态机

问题:项目需要实现dhcp server功能,在测试时候,发现client端有线口每次重新接入时,均能正确分配到地址;而wife重新接入时,虽然dhcp server也回复了,但是client端wife无法识别,重复发了5此dhcp request报文,server回复了5次ack报文,也不能确认,直到下一次重新发起discover后,才成功。

定位:wife重新接入时,由于wife重新发起的是request报文(wife重连无法像有线口一样感知到down,所以重连后不会发起discover报文),而回复的是ack报文,所以是否因为如果dhcp client发送dhcp request报文,服务器回复的是dhcp offer报文(自身程序bug导致),此时dhcp client不认可?

 查看offer报文、ack报文的差异:

 

发现二者option项完全一样,唯一不同的就是报文类型 。

但是此处相同操作在linux环境上测试是可以的,而windows不认可,查看dhcp client有限状态机发现,的确存在疑问:

最终原因是由于存在两个server场景下,wifi在两个server之间切换时,server上的dhcp处理存在有问题:从一个server切换到另外一个server时,request报文中的server id已经改变了,所以server需要先回复NACK让wifi client释放之前所有租约信息,重新发起discover信息即可。