天天看點

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封包的差異:

DHCP Client有限狀态機
DHCP Client有限狀态機

發現二者option項完全一樣,唯一不同的就是封包類型 。

但是此處相同操作在linux環境上測試是可以的,而windows不認可,檢視dhcp client有限狀态機發現,的确存在疑問:

DHCP Client有限狀态機

最終原因是由于存在兩個server場景下,wifi在兩個server之間切換時,server上的dhcp處理存在有問題:從一個server切換到另外一個server時,request封包中的server id已經改變了,是以server需要先回複NACK讓wifi client釋放之前所有租約資訊,重新發起discover資訊即可。