笔者的dhcp client 一次在不同的dhcp sever之间切换时 (从10.0.2.× 网段到10.0.9.x网段), 抓包如下:
其中的第四个包NAK的数据内容如下:
0110 00 00 00 00 00 00 63 82 53 63 35 01 06 36 04 0a ......c. Sc5..6..
0120 00 09 01 38 1f 72 65 71 75 65 73 74 65 64 20 61 ...8.req uested a
0130 64 64 72 65 73 73 20 6e 6f 74 20 61 76 61 69 6c ddress n ot avail
0140 61 62 6c 65 ff 00 00 00 00 00 00 00 00 00 00 00 able.... ........
0150 00 00 00 00 00 00 ......
其代表的意思是 新的DHCP server 10.0.9.1 发现 Client发过来的 DHCP Request 他本身处理不了,所以他马上发了一个NAK让他不要再发了。
然后Client端发了一个广播(discover),希望得到新的IP。Server端用Offer包返回。
然后Client端发了一个广播(Request),Server端用ACK包返回。分配IP成功。
Client端用获取的IP向组内广播(Inform), 意思是别人就不要用这个IP了。
(http://tools.ietf.org/html/rfc2131)
Comments:DHCP NACK Shoudl be sent to any PC
requesting DHCP connectivity from the firewall interface, if a DHCPREQUEST for a
non-configured network is received. THis terminates the DHCPREQUEST sequence,
and starts the DHCPDISCOVER process by the computer.
----------
另外,DHCP server能不能发NAK , 取决于 server 的配置文件dhcp.conf中是否有authoritative。如果没有, server端就不会发NAK, client端会反复发3个(Linux)或者7个(Windows)的Request, 之后才能发DIiscover重新获取IP,非常慢。如果Client部署在Windows上的,常需要等一分钟左右。