答案1
最简单的答案是——先到先得。
如果您有多个 VLAN,并且 10.10.10.0/24 与 10.10.20.0/24 位于不同的 VLAN 上 - 则广播不会跨越 VLAN。
如果 DHCP 服务器位于与客户端不同的 VLAN 上,则 VLAN 之间的路由接口上的 iphelper 会将广播引导到正确的位置。
在您的场景中,如果您在同一个 VLAN 内有 2 个独立的网络(或没有)提供不同的子网 - 这是一场竞争。
DHCP 使用以下事务提供服务:
- DHCP 发现(DHCPDISCOVER)-客户端广播-“那里有 DHCP 服务器吗?”
- DHCP 提供(DHCPOFFER)-服务器到客户端-“是的,我在这里并且可以使用!”
- DHCP 请求(DHCPREQUEST)-客户端到服务器“太棒了,我可以得到一个地址吗?”
- 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,可以在其中找到更新的固件。