![ifup 失败后首次 ping](https://linux22.com/image/74105/ifup%20%E5%A4%B1%E8%B4%A5%E5%90%8E%E9%A6%96%E6%AC%A1%20ping.png)
我在 Debian 8 上的配置工作流程上遇到了一个奇怪的问题,
步骤是:
- debian 已配置 DHCP(来自 PXEBoot)
- ESX 上的 VLAN 更改
- ifdown 在 eth0 上
- 使用静态地址重新配置 /etc/network/interfaces
- eth0 上的 ifup
- ping -c 1 网关
网关 ping 失败,但如果重试 ping 总是会成功。你知道为什么第一次 ping 失败吗?
在 Debian 7 或 RHEL 6 上没有遇到问题(可能与 systemd 有关?)
(我尝试在 ping 之前添加 5 秒或 10 秒睡眠)
谢谢
答案1
ping
在向目标主机发送ICMP数据包之前,它首先判断它是本地主机还是远程主机。无论哪种方式,都需要检索下一跳的 MAC 地址,该地址可能是本地子网上的主机本身,也可能是远程主机的路由器。
它使用地址解析协议 (ARP) 获取此信息,该协议本质上是广播“谁有 IP 地址 abcd?告诉 efgh”并等待回复“IP 地址 abcd 位于 MAC 地址 ab-cd-ef-gh-ij-kl”。一旦获得了 MAC 地址,它就可以发送 ICMP 数据包。
您遇到的延迟是由于此 ARP 过程造成的。您可以ping
通过该选项告诉您等待更长时间-W
。
ping -W 10 gatway
将导致其等待 10 秒以获得响应。
ARP 数据被缓存,因此后续 ping 不必遵循此过程,并且响应几乎是瞬时的。