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


16

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

然后,新客户端被插入。他们对应该进入哪个子网一无所知,并将DHCPDISCOVER发送到以太网广播255.255.255.255,因此它同时到达两个DHCP服务器。两台服务器均提供报价。现在这是我的问题:客户端如何知道他应该接受哪个DHCPOFFER?

DHCP情况


比较该问题和答案。
卡米尔Maciorowski


1
“以太网广播255.255.255.255”-这是本地网络的IP广播地址,而不是以太网地址。最初的DHCP DISCOVER消息也很可能使用以太网广播地址ff:ff:ff:ff:ff:ff:ff:ff,但实际上并非相同。
ilkkachu

Answers:


26

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

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

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

在您的场景中,您在同一个VLAN内有2个单独的网络(或缺少VLAN)为不同的子网服务-这是一个竞赛。

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数据包,然后在被询问时一遍又一遍不发送DHCPACKACK。还有另一种DoS攻击,其中“伪” DHCP服务器提供无法路由的地址或与它嗅探到与网络混乱的其他IP冲突的地址。


16
因此是“但是如何在一个第2层网段上运行多个子网?”的简短答案。是“ 您不要。 ”(是的,有很多方法,但是通常不应该这样做。一个2层域=一个子网。)
user1686

谢谢大家,这真的使我感动。我一直想知道这怎么可能,但事实并非如此。因此,收获是:在具有VLAN的子网或网段之间切换路由器/第3层,对吗?
Michael Niemand '18 -10-26

4
通常,是的,您需要VLAN或物理分段。当两个DHCP服务器都限于处理“已知”客户端时(例如,通过带有允许MAC地址的“静态租约”列表),才能共享L2域。
user1686 '18 -10-26

3
我认为您可以为每个DHCP服务器提供一个MAC地址白名单,并控制哪个客户端以这种方式从哪个服务器获取地址。
达伦(Darren)

@grawity,如果子网相等,则您可以轻松地在同一第2层网段上运行多个IP子网,而不必关心哪个客户端从哪个子网获取地址。您只有一台DHCP服务器提供两个块的地址,还有一台路由器充当两个块的网关(每个块都有一个地址)。做完了 说“不”是完全错误的。
ilkkachu

9

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


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

DHCP客户端可以“先到先得”的方式接受它们。但是,不需要采取这种方法。

RFC2131指定:

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

因此,如果第二台DHCP服务器提供了更长的IP地址保留,或者提供了另一台服务器不提供的时间服务器,或者提供了客户端已编程为偏爱的自定义字段,则它可以接受第二台DHCP服务器。

通常,“先到先得”方法将为您提供跨设备数跳(BOOTP重播)的报价,因此,如果您没有理由不在意,则遵循此协议是一个很好的协议。

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


...或者如果一台服务器提供了客户端以前已经使用过并想要保留的地址
ilkkachu

@ilkkachu:是的,从理论上讲,但是有更好的机制(既可以在旧的DHCP服务器过期之前更新保留,也可以发送DHCPDiscovery请求旧的IP地址),因此在实践中不太可能有用。
奇怪的想'18 -10-27
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.