![为什么 PXE 启动的 VM 会积极寻求反向 ARP?](https://linux22.com/image/574588/%E4%B8%BA%E4%BB%80%E4%B9%88%20PXE%20%E5%90%AF%E5%8A%A8%E7%9A%84%20VM%20%E4%BC%9A%E7%A7%AF%E6%9E%81%E5%AF%BB%E6%B1%82%E5%8F%8D%E5%90%91%20ARP%EF%BC%9F.png)
反向 ARP就我所知,它已经基本消亡了吗?互联网上成功淘汰协议的伟大案例之一?近三十年来,它一直被弃用,取而代之的是 BOOTP(以及后来的 DHCP)。
因此,当我发现 VM 在 PXE 启动期间毫不留情地通过 RARP 请求 IP 地址时,我感到有点惊讶 - 即使通过 DHCP 获得了一个完好的 IP 地址。
在启动开始时,发送的第一个广播数据包是反向 ARP 数据包,紧接着是 DHCP 广播。
20:31:19.408086 ARP, Reverse Request who-is 00:0c:29:20:fd:ce tell 00:0c:29:20:fd:ce, length 46
20:31:19.441857 IP 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:0c:29:20:fd:ce, length 548
20:31:19.443536 IP 192.168.100.1.67 > 255.255.255.255.68: BOOTP/DHCP, Reply, length 300
显然它不喜欢第一个 DHCP 响应,因为它在等待另一个 DHCP 响应(请注意,我只捕获广播数据包,因此tcpdump
看不到其余的 DHCP 对话),但在发送另外几个 RARP 请求之前不会这样做:
20:31:19.935341 ARP, Reverse Request who-is 00:0c:29:20:fd:ce tell 00:0c:29:20:fd:ce, length 46
20:31:20.935426 ARP, Reverse Request who-is 00:0c:29:20:fd:ce tell 00:0c:29:20:fd:ce, length 46
20:31:21.500371 IP 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:0c:29:20:fd:ce, length 548
20:31:21.501288 IP 192.168.100.1.67 > 255.255.255.255.68: BOOTP/DHCP, Reply, length 300
20:31:21.504278 ARP, Request who-has 192.168.100.40 tell 192.168.100.6, length 46
20:31:22.935467 ARP, Reverse Request who-is 00:0c:29:20:fd:ce tell 00:0c:29:20:fd:ce, length 46
好的,太棒了;它获得了一个 IP,然后为 PXE 服务器执行 ARP,以便启动 TFTP。最后它偷偷地将另一个 RARP 放进去,很好。现在它完全进入了 pxelinux 环境:
然后呢? 又一个 RARP 请求,恰好在上一个请求之后 1 秒。
20:31:23.935340 ARP, Reverse Request who-is 00:0c:29:20:fd:ce tell 00:0c:29:20:fd:ce, length 46
两秒后,又有一次。
20:31:25.935384 ARP, Reverse Request who-is 00:0c:29:20:fd:ce tell 00:0c:29:20:fd:ce, length 46
然后又过了一会儿。3 秒、5 秒、8 秒、13 秒、21 秒... 最后它终于平息了。
20:31:28.935548 ARP, Reverse Request who-is 00:0c:29:20:fd:ce tell 00:0c:29:20:fd:ce, length 46
20:31:33.935518 ARP, Reverse Request who-is 00:0c:29:20:fd:ce tell 00:0c:29:20:fd:ce, length 46
20:31:41.935633 ARP, Reverse Request who-is 00:0c:29:20:fd:ce tell 00:0c:29:20:fd:ce, length 46
20:31:54.935970 ARP, Reverse Request who-is 00:0c:29:20:fd:ce tell 00:0c:29:20:fd:ce, length 46
20:32:15.936232 ARP, Reverse Request who-is 00:0c:29:20:fd:ce tell 00:0c:29:20:fd:ce, length 46
所有这些都在 pxelinux 环境中进行,并且工作 IP 地址已经绑定到该 NIC。
那么,有人知道这个 VM(或者更确切地说,每个 ESX(i) VM,至少在 4.1 和 5.0 上)在想什么吗?
我已经验证它同时发生在模拟的 E1000 和 vmxnet3 设备上;这是 VMware PXE 代码的一点“特殊”行为,还是任何 ol PXE 代码的典型行为?
因为作为一种协议它无法提供任何 PXE 服务器信息(据我所知),所以它寻找 RARP 是否有意义?
我是否需要咬紧牙关并进行设置,rarpd
看看 PXE 设备会如何反应?
答案1
我可能错了,但是如果 vswitch 启用了“通知交换机”配置(默认情况下启用),这看起来像是 vkernel 发送的 RARP 数据包。