DHCP 客户端如何知道应该接受多个 DHCPOFFERS 中的哪一个?

DHCP 客户端如何知道应该接受多个 DHCPOFFERS 中的哪一个?

假设我们有一个如图所示的网络。一个第 2 层网络上有六台主机,没有 VLAN。该网络应该被划分为两个子网,每个子网有一个 DHCP 服务器。DHCP 服务器有固定的 IP 地址,因此它们显然知道自己属于哪个子网。

然后新的客户端接入。它们不知道自己应该在哪个子网,并将它们的 DHCPDISCOVER 发送到以太网广播 255.255.255.255,因此它会发送到两个 DHCP 服务器。两个服务器都会回复一个提议。现在我的问题来了:客户端如何知道他应该接受哪个 DHCPOFFER?

DHCP 情况

答案1

最简单的答案是——先到先得。

如果您有多个 VLAN,并且 10.10.10.0/24 与 10.10.20.0/24 位于不同的 VLAN 上 - 则广播不会跨越 VLAN。

如果 DHCP 服务器位于与客户端不同的 VLAN 上,则 VLAN 之间的路由接口上的 iphelper 会将广播引导到正确的位置。

在您的场景中,如果您在同一个 VLAN 内有 2 个独立的网络(或没有)提供不同的子网 - 这是一场竞争。

DHCP 使用以下事务提供服务:

  1. DHCP 发现(DHCPDISCOVER)-客户端广播-“那里有 DHCP 服务器吗?”
  2. DHCP 提供(DHCPOFFER)-服务器到客户端-“是的,我在这里并且可以使用!”
  3. DHCP 请求(DHCPREQUEST)-客户端到服务器“太棒了,我可以得到一个地址吗?”
  4. DHCP 确认 (DHCPACK) - 服务器到客户端“当然,这是一个 IP、一个掩码、一个网关、一些 DNS/WINS 服务器、一个时间服务器,以及为您的范围配置的所有其他内容”

所有这些都发生在服务器的 UDP 端口 67 和客户端的 UDP 端口 68 上。

一旦到达步骤 2,客户端将停止“监听”其他 DHCP 服务器的响应,它很乐意与第一个服务器打交道,以给予它一些关注。

附注:实际上有一系列众所周知的 DoS(拒绝服务)攻击滥用了这一权利。攻击者插入一个设备,该设备会响应并发出 DHCPOFFER 数据包,然后在被要求时不发送 DHCPACK……一遍又一遍。还有另一种 DoS 攻击,其中“假”DHCP 服务器提供无法路由的地址或与它嗅探到的其他 IP 冲突的地址来干扰网络。

答案2

现有答案@Fazer87 的回答在实践中大体上是正确的,我建议点赞并接受它。这个答案更精确地探讨了一个小细节。


两个 DHCP 服务器都可能以 DHCPOffer 消息进行响应。

DHCP 客户端可以按照“先到先得”的原则接受它们。但是,不要求必须采用这种方法。

RFC2131指定:

客户端从一个或多个服务器接收一个或多个 DHCPOFFER 消息。客户端可以选择等待多个响应。客户端根据 DHCPOFFER 消息中提供的配置参数选择一台服务器来请求配置参数。

因此,如果第二个 DHCP 服务器提供了更长的 IP 地址预留,或者提供了另一个服务器没有的时间服务器,或者可能具有客户端已被编程为首选的自定义字段,则它可能会接受第二个提议。

通常情况下,“先到先得”的方法将为您提供未经过跨设备多次跳跃(BOOTP 重新广播)的报价,因此如果您没有理由关心的话,这是一个很好的协议。

我参与了一个项目,其中一个自定义设备更喜欢使用包含 TFTP 服务器的 DHCPOffer,可以在其中找到更新的固件。

相关内容