为什么服务器尝试回复 BOOTP 请求后,服务器的主机会自动广播 ARP 请求?

网络工程 dhcp MAC地址 播送 硬件 网络发现
2022-02-03 20:53:24

我意识到 BOOTP 是一个遗留系统,但这是为了我的学习阅读。

考虑一个客户端 C,它正在引导自己。它向服务器发送一个 BOOTP 请求——显然是因为它还不知道它的服务器位置。C 发送带有所有常用信息的 BOOTP 请求:其硬件地址、(空白)IP、事务 ID、服务器 IP 地址、网关 IP 地址等。

它的服务器 S 在侦听端口 67 时收到 BOOTP 请求。在数据报中,S 找到 C 的硬件地址。S 已经知道 C 的网络位置,即 135.135.10.3。

既然 S 知道 C 的硬件地址,为什么服务器不能使用硬件地址向 C 发送 BOOTP 回复?

我的教科书说这是不可能的,因为如果 S 确实尝试这样做,服务器的主机(不管是什么——如果有人能解释我将不胜感激)将向 C 广播一个 ARP 请求,C 不知道它的 IP并会以 ICMP 错误响应(我假设)。

为什么这个神秘的宿主会决定这样做?为什么 S 不能用它给定的硬件地址把东西发送给 C?如果不能,发送硬件地址有什么意义?

感谢所有花时间阅读本文的人!

1个回答

(BOOTP 现在存在于 DHCP 中)

该过程从客户端发送广播请求开始,因为它通常不知道任何服务器地址——src ip 将为零,因为它还没有地址。服务器将在请求中查找 MAC 以形成答案。这个答案如何得到需要更多的思考。如果服务器发送一个简单的单播回复,它将需要一个 arp 缓存条目来知道将它发送到哪里。正常的 ARP 发现机制不会起作用,因为客户端还没有它的地址。因此,服务器必须在发送答案之前更新其 ARP 缓存,或者将答案作为广播消息发送。(或通过形成自己的第2层数据包并直接发送来绕过主机第3/4层处理)

此外,服务器不能假设客户端在同一条线路上。因此,必须将答案发送到请求的来源——即任何可能的中继代理,而不是请求中的硬件地址。