服务器突然连不上,很多人第一反应是敲个 linux ping 试试。命令确实简单,但输出里藏着不少信息,看懂了才能判断问题卡在哪一环。

先分清 ping IP 和 ping 域名

ping 域名通了,说明网络和 DNS 都正常;ping IP 通、ping 域名不通,问题在 DNS 解析,跟网络连接无关。这个区分能省掉一半排查时间。另外 Linux 的 ping 会一直跑,Ctrl+C 才停,Windows 默认发四个自动停,两边习惯不一样。

常用参数就三个

  • -c 4:只发 4 个包,写脚本必加,不然脚本会一直卡着。
  • -W 2:每次最多等 2 秒,网络真断时不用干等很久。
  • -i 2:每 2 秒发一个,默认间隔一般是 1 秒,遇到限速设备放慢点。
  • -s 1400:指定包大小,默认 56 字节,测大包能不能通过时用。

写进脚本里的固定套路

监控脚本常见写法是 ping -c 3 -W 2 目标地址,成功退出码是 0,失败非 0,拿退出码做判断就行,不用去解析输出文本。忘了 -W,链路一断脚本能挂到天荒地老。

输出怎么读

重点看三样:time 是往返延迟,一般几十毫秒算正常,跨网会高一些;ttl 大致反映经过了多少跳;末尾统计里的丢包率最关键,丢包多说明链路不稳。出现 Destination Host Unreachable,多是中途路由不通,不是对方不回。

由内往外一层层 ping

外网不通时按顺序试:先 ping 127.0.0.1 确认协议栈正常,再 ping 网关看局域网,最后 ping 公网地址。断在哪一层,问题范围就锁在哪一层,比一上来就重启网卡靠谱。

ping 不通别急着下结论

很多服务器防火墙直接禁了 ICMP 回应,ping 不通但服务一切正常,这种情况用 curl 或 telnet 测目标端口更靠谱。反过来,ping 得通也不代表端口通。把它当第一层粗筛工具就行,最终结论要靠端口和应用层的测试。