想象一下,我们有一个如图所示的网络。一层2网络上有六台主机,没有VLAN。该网络应该被分成两个子网,每个子网有一个DHCP服务器。DHCP服务器具有固定的IP地址,因此很明显它们知道它们属于哪个子网。
然后,新客户端被插入。他们对应该进入哪个子网一无所知,并将DHCPDISCOVER发送到以太网广播255.255.255.255,因此它同时到达两个DHCP服务器。两台服务器均提供报价。现在这是我的问题:客户端如何知道他应该接受哪个DHCPOFFER?
想象一下,我们有一个如图所示的网络。一层2网络上有六台主机,没有VLAN。该网络应该被分成两个子网,每个子网有一个DHCP服务器。DHCP服务器具有固定的IP地址,因此很明显它们知道它们属于哪个子网。
然后,新客户端被插入。他们对应该进入哪个子网一无所知,并将DHCPDISCOVER发送到以太网广播255.255.255.255,因此它同时到达两个DHCP服务器。两台服务器均提供报价。现在这是我的问题:客户端如何知道他应该接受哪个DHCPOFFER?
Answers:
最简单的答案-先到先得。
如果您有多个VLAN,并且10.10.10.0/24与10.10.20.0/24在不同的VLAN上,则广播不会跨VLAN。
如果DHCP服务器位于与客户端不同的VLAN上,则VLAN之间的路由接口上的iphelper会将广播定向到正确的位置。
在您的场景中,您在同一个VLAN内有2个单独的网络(或缺少VLAN)为不同的子网服务-这是一个竞赛。
DHCP使用以下事务处理服务:
所有这些都发生在服务器的UDP端口67和客户端的UDP端口68上。
一旦到达第2步-客户端将停止“监听”其他DHCP服务器响应-它很高兴与第一个服务器打交道,以给予它一定的关注。
附带说明-实际上有一系列众所周知的拒绝服务(DoS)攻击。攻击者插入一台设备,该设备响应并发送DHCPOFFER数据包,然后在被询问时一遍又一遍不发送DHCPACKACK。还有另一种DoS攻击,其中“伪” DHCP服务器提供无法路由的地址或与它嗅探到与网络混乱的其他IP冲突的地址。
@ Fazer87 的现有答案在实践中大体上是正确的,我建议您接受并接受。这个答案稍微更精确地探索了一个小细节。
两个DHCP服务器都可以使用DHCPOffer消息进行响应。
DHCP客户端可以“先到先得”的方式接受它们。但是,不需要采取这种方法。
RFC2131指定:
客户端从一个或多个服务器接收一个或多个DHCPOFFER消息。客户端可以选择等待多个响应。客户端根据DHCPOFFER消息中提供的配置参数选择一个服务器来请求配置参数。
因此,如果第二台DHCP服务器提供了更长的IP地址保留,或者提供了另一台服务器不提供的时间服务器,或者提供了客户端已编程为偏爱的自定义字段,则它可以接受第二台DHCP服务器。
通常,“先到先得”方法将为您提供跨设备数跳(BOOTP重播)的报价,因此,如果您没有理由不在意,则遵循此协议是一个很好的协议。
我在一个项目中,自定义设备希望使用DHCPOffer,该项目包含一个TFTP服务器,可以在其中找到更新的固件。