DHCP 是否每个主机都知道正在进行的请求?

网络工程 dhcp 网络核心
2021-07-25 06:26:52

当新主机加入网络并广播以查找 DHCP 服务器时,网络上的每个主机都知道新主机及其请求。每个主机是否也知道最终的 ACK 数据包,即确认 IP 地址的分配?

2个回答

DHCP RFC, RFC2131 说:

通常,DHCP 服务器和 BOOTP 中继代理尝试
使用
单播传送DHCPOFFER、DHCPACK 和 DHCPNAK 消息直接传送到客户端
[...]
在客户端发送的任何 DHCPDISCOVER 或 DHCPREQUEST 消息中,在其协议软件配置了 IP 地址之前无法接收单播 IP 数据报的客户端应该将“标志”字段中的 BROADCAST 位设置为 1。BROADCAST 位将向 DHCP 服务器和 BOOTP 中继代理提供一个提示,以向客户端子网上的客户端广播任何消息。

因此在正常操作中,DHCPACK 消息将是单播的(IE Layer2 单播),定向到客户端 MAC 地址。
在现代的交换环境中,其他主机将看不到最终的 ACK。

在仍然使用集线器的旧网络中,第 2 层网络中的所有网络接口卡仍然会看到相关的帧,但不应处理它们,因此除非设置为混杂模式,否则它们不会将它们传输到操作系统。

每个主机都会看到 DHCPACK,但他们实际上与它没有任何关系,因为他们知道他们不是请求的人。

另请注意,并非所有 DHCPOFFER 都是广播的,它取决于“标志”字段中的 BROADCAST 位,请参阅此处的RFC2131

在客户端发送的任何 DHCPDISCOVER 或 DHCPREQUEST 消息中,在其协议软件配置了 IP 地址之前无法接收单播 IP 数据报的客户端应该将“标志”字段中的 BROADCAST 位设置为 1。BROADCAST 位将向 DHCP 服务器和 BOOTP 中继代理提供一个提示,以向客户端子网上的客户端广播任何消息。可以在其协议软件配置之前接收单播 IP 数据报的客户端应该将 BROADCAST 位清除为 0。BOOTP 澄清文档讨论了使用 BROADCAST 位 [21] 的后果。

服务器或中继代理直接向 DHCP 客户端发送或中继 DHCP 消息(即,不发送或中继到“giaddr”字段中指定的中继代理)应该检查“标志”字段中的 BROADCAST 位。如果该位设置为 1,则 DHCP 消息应该作为 IP 广播发送,使用 IP 广播地址(最好是 0xffffffff)作为 IP 目的地址,使用链路层广播地址作为链路层目的地址。如果 BROADCAST 位被清除为 0,则消息应该作为 IP 单播发送到“yiaddr”字段中指定的 IP 地址和“chaddr”字段中指定的链路层地址。如果无法进行单播,

编辑:JFL 在我给小费时回答了这个问题