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

Mic*_*and 16 networking dhcp

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

然后新的客户端被插入。他们不知道他们应该在哪个子网中,并将他们的 DHCPDISCOVER 发送到以太网广播 255.255.255.255,所以它转到两个 DHCP 服务器。两台服务器都提供报价。现在我的问题是:客户怎么知道他应该接受哪个 DHCPOFFER?

DHCP 情况

Faz*_*r87 26

最简单的答案 - 先到先得。

如果您有多个 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 Offer (DHCPOFFER) - 服务器到客户端 - “是的,我在这里,有空!”
  3. DHCP 请求 (DHCPREQUEST) - 客户端到服务器“太棒了,我可以提供一个地址吗?”
  4. DHCP 确认 (DHCPACK) - 服务器到客户端

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

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

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

  • 因此,对“但是我如何在单个第 2 层网段上运行多个子网?”的简短回答。是“**你没有。**”(是的,有办法,但这不是你_应该_通常做的事情。一个第 2 层域 = 一个子网。) (16认同)
  • 一般来说,是的,您需要 VLAN 或物理分段。共享 L2 域是可行的*仅*如果您的两个 DHCP 服务器都被限制为处理“已知”客户端(例如,通过允许 MAC 地址的“静态租约”列表)。 (4认同)
  • 我认为您可以为每个 DHCP 服务器提供一个 MAC 地址白名单,并控制哪个客户端以这种方式从哪个服务器获取地址。 (3认同)

Odd*_*ing 9

@Fazer87的现有答案在实践中大致正确,我建议投票并接受它。这个答案更精确地探讨了一个小细节。


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

DHCP 客户端可以在“先到先服务”的基础上接受它们。但是,不需要采取这种方法。

RFC2131规定:

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

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

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

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


归档时间:

查看次数:

6398 次

最近记录:

7 年,3 月 前