在DORA过程的"请求"部分中,DHCP服务器的IP和MAC地址对于客户端是已知的(因为在Offer中发送的IP数据报具有此信息).因此,如果目的地已知,为什么请求仍然广播到网络上的每台机器?
类似地,在DORA过程的"Ack"部分中,客户端的IP地址现在已成功设置在其中并且为DHCP服务器所知.为什么它仍然播放消息?
REQUEST是针对网络上有多个DHCP服务器且客户端收到多个OFFER响应的情况广播的,来自RFC 2131第3.1节:
服务器从客户端接收DHCPREQUEST广播.DHCPREQUEST消息未选择的那些服务器使用该消息作为客户端拒绝该服务器提供的通知.在DHCPREQUEST消息中选择的服务器将客户端的绑定提交到持久存储,并使用包含请求客户端的配置参数的DHCPACK消息进行响应.
来自服务器的ACK可能并不总是广播数据包,但可能是您检查过的情况.DHCP协议的一部分允许为DHCPOFFER,DHCPACK和DHCPNAK消息启用广播目的地.这是必要的,因为在IP地址完全声明并分配给网络接口之前,某些TCP/IP堆栈无法接收单播数据报.来自RFC 2131第4.1节:
通常,DHCP服务器和BOOTP中继代理尝试使用uicast传递将DHCPOFFER,DHCPACK和DHCPNAK消息直接传递到客户端.IP目标地址(在IP标头中)设置为DHCP"yiaddr"地址,链路层目标地址设置为DHCP"chaddr"地址.遗憾的是,在使用有效的IP地址配置实现之前,某些客户端实现无法接收此类单播IP数据报(导致在客户端配置了IP地址之前无法传递客户端IP地址的死锁).
在协议软件配置了IP地址之前无法接收单播IP数据报的客户端应该在客户端发送的任何DHCPDISCOVER或DHCPREQUEST消息中将'flags'字段中的BROADCAST位设置为1.BROADCAST位将提示DHCP服务器和BOOTP中继代理向客户端子网上的客户端广播任何消息.