DHCP request报文主要分成两大类型:
类型一、收到offer报文后,发送request广播报文进一步确认,同时通知其他dhcp服务器已经收到租约,如下所示:
类型二、在租约的0.5倍时间上,发送request单播报文续约,如下所示:
如果此报文没有回复,则在0.875倍时间上,发生request广播续约。
类型一、二有啥区别?dhcp server在接收到此两种类型的报文后,处理是否相同呢?
类型一存在option 50、54,而不存在client ip(bootp flag);
类型二不存在option 50、54,而存在client ip(bootp flag);
原因:在offer的确认,client其实还不能确定该ip能否真正能为自己所用,还需要等待server 回复ack;
而0.5倍单播request续约时,不需要携带option 50、54,默认该ip已经为自己所用,即在client ip(bootp flag)填写即可
在0.85倍广播request续约时,不同于0.5倍单播续约,存在client ip(bootp flag)和option 50,而不存在option 54(因为client默认server已经丢失)
dhcp server在收到此类报文时,均对两种情况进行了检查,也即如果
1、option 50、54与server中租约信息相符合,则回复ack报文
2、client ip(bootp flag)与server ip相符合 ,则回复ack报文
3、option 54不存在,option 50与本地租约符合,也可回复ack报文(即有可能单播续约包没有及时收到)
另外在网口down up过程中,dhcp client会进入init-reboot态,发送广播request报文(且源ip也为0),与0.85倍续约发送的广播request报文有不同(此时的源ip为已经分配的ip)
总结:
dhcp client状态机会在四种状态下发送request报文
报类型 client-ip option50 option54
1、init-reboot状态: 广播(且源ip为0) N Y N
2、selecting态: 广播(且源ip为0) N Y Y
3、renewing态: 单播 Y N N
4、rebinging态: 广播(源ip有效) ? ? ?
init-reboot态:是指网卡重启后进入的状态,与init态区别在于:init态是完全没有任何租约信息,init-reboot态是存在之前租约信息的
selecting态:offer报文后的确认报
renewing态:0.5倍续约报文
rebinging态:0.85倍续约报文