为什么 DHCP 消息会被广播?

为什么 DHCP 消息会被广播?

我在网络课上学习 DHCP,作为研究的一部分,我正在观看以下视频:

https://www.youtube.com/watch?v=0UvLRVlPx6A

在上面视频的 Wireshark 捕获中(3:48 处),所有 DHCP OFFER、REQUEST 和 ACK 消息都将广播地址作为目标 IP。

另一方面,以下文章提到,除DISCOVER消息之外的所有消息都是单播的:

https://www.grandmetric.com/what-is-dhcp-and-how-does-it-work/

我的问题是:

  1. 哪一个是正确的?这真的取决于具体情况吗?

  2. 如果 YouTube 视频中提到的所有 DHCP 消息都是广播的,那么在初始 DISCOVER 消息之后,当客户端知道 DHCP 服务器 IP 时,为什么客户端不直接使用服务器 IP 作为目标 IP,换句话说,为什么它不使用单播消息进行通信?

答案1

DHCP 的权威来源更有可能RFC 2131。以下摘录自第 3.1 节

  1. 客户端在其本地物理子网上广播 DHCPDISCOVER 消息。

[...]

  1. 每个服务器可能会回复 DHCPOFFER 消息

[...]

  1. 客户端收到一个或多个 DHCPOFFER客户端可以选择等待多个响应。客户端根据 DHCPOFFER 消息中提供的配置参数选择一个服务器来请求配置参数。DHCPOFFER 消息中的客户端广播 DHCPREQUEST 消息 必须包含“服务器标识符”选项,以指示其选择了哪个服务器

[...] 4. 服务器接收来自客户端的 DHCPREQUEST 广播。 那些未被 DHCPREQUEST 消息选中的服务器将使用该消息作为客户端已拒绝该服务器的提议的通知。

解释还在继续。每当发送广播时,都会明确说明。

因此,这主要与以下事实有关:为了实现高可用性,网络广播域上可能会有多个 DHCP 服务器。如果通信在初始 DHCPREQUEST 时就切换到单播,则其他冗余服务器将不知道客户端是否选择了其他服务器(允许它们更快地回收自己提供的 IP 地址)或者它是否消失了。

更多使用规则请参见第4.1节一旦客户端开始使用其分配的 IP 地址(而不是源 0.0.0.0),大多数情况下通信就会切换到单播。

如果 'giaddr' 字段为零且 'ciaddr' 字段非零,则服务器将 DHCPOFFER 和 DHCPACK 消息单播到 'ciaddr' 中的地址。如果 'giaddr' 为零且 'ciaddr' 为零,并且设置了广播位,则服务器将 DHCPOFFER 和 DHCPACK 消息广播到 0xffffffff。如果未设置广播位,且“giaddr”为零,且“ciaddr”为零,则服务器将 DHCPOFFER 和 DHCPACK 消息单播到客户端的硬件地址和“yiaddr”地址在所有情况下,当“giaddr”为零时,服务器会将任何 DHCPNAK 消息广播到 0xffffffff。

注意:单播到 IP 地址首先需要 ARP 解析(因此客户端必须配置 IP 地址),单播到硬件地址则不需要(当客户端没有 IP 时,将用于初始 DHCPOFFER)。

另外,例如,第 4.3.2 节解释了 DHCPREQUEST 的各种用例:SELECTION 状态(首次使用)、INIT-REBOOT(缓存信息,但之后不再使用)或 RENEWING(延长租约)。第 3 种情况表明应使用单播发送消息。

相关内容