ifup 失败后首次 ping

ifup 失败后首次 ping

我在 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 不必遵循此过程,并且响应几乎是瞬时的。

相关内容