ping网站时如何判断丢包

How to determine packet loss when pinging a website

在对网站进行 ping 和/或跟踪路由时,我如何确定该网站是否确实存在丢包或是否存在防火墙?

如果没有数据包到达目的地,有几种可能的情况:

  • 一个没有分配给任何东西的 IP 地址。根据最后一个可达路由器的配置,您可能会得到 "destination/host/net unreachable" error message.
  • 分配给机器的 IP 地址,但 ping 被防火墙阻止。根据配置,某些防火墙可能会静默丢弃数据包,其他防火墙会 return "administratively prohibited" 错误消息。
  • 分配给一台机器的IP地址,ping不通但是机器宕机了。根据最后一个可达路由器的配置,您可能会得到 "destination/host/net unreachable" error message.

如果某些数据包通过:防火墙通常要么允许您的所有流量,要么阻止它;它不应该只让一些数据包通过,除非它限制了探测的数量。因此,如果您看到间歇性丢失,它可能不是防火墙,尽管您不能 100% 肯定地排除它。

如果某些数据包通过而其他数据包收到 "unreachable" 消息,则可能是防火墙限制了每秒一定数量的 ping 数据包,或者是路由问题(负载平衡和一条路径失败; 或路由摆动)。

如果一些数据包通过了而另一些数据包没有得到回复,则可能是数据包丢失。可能是 link 问题,例如无线 link 或拥塞 link;或者它可能是路由问题。不太可能,是防火墙限制了ICMP包的数量。

还要记住,ping 使用 ICMP,而 traceroute 默认使用 UDP(尽管它也可以通过命令行选项使用 ICMP)。这两种协议的防火墙规则可能不同。