众所周知,DHCP的报文交互一共4个交互过程:
1.客户机发送广播discover报文请求分配ip地址
2.收到discover报文的dhcp服务器都会回应offer报文,里面携带了给客户机分配的IP地址
3.客户机收到offer报文之后会再次广播(只对收到的第一个offer报文进行回复动作)发送request报文,携带接收的dhcp服务器的ip地址,向外部宣告接受的是哪台dhcp服务器
4.服务器收到request报文,会对报文里dhcp的ip进行校验,若ip与自己一致,则回复ack报文(携带分配给客户机的ip地址),若不一致,则将报文丢弃
5.客户机收到ack报文,核对自身ip与ack报文携带的分配ip是否一致,一致则分配成功,不一致则通知服务器禁用这个ip,避免地址冲突
可能在部分人印象里dhcp服务器回复的offer和ack报文应该是单播,实际运用的也大多是单播,但这不代表不可以是广播,dhcp在设计之初为了照顾到某些只接受广播的协议栈(配置ip之前),在设计服务器回复报文的时候加入了广播回复的选择,如果DHCP Discovery / Request报文的字段BROADCAST flag = 1,则dhcp服务器回复报文使用广播进行回复,如果字段BROADCAST flag = 0,则使用单播进行回复,所以dhcp服务器的回复是单播还是广播取决于客户机发送的discover/request报文携带的BROADCAST flag 字段。
在现在的实际运用中,大部分情况采用的还是单播回复(可以减轻设备压力,避免广播风暴)