首页 > Sysadmin > 正文

Linux ping 网络连通性诊断实战

huyuanwen 2026-11-01 Sysadmin

草稿待审;源站列表页有对应文章,但正文极简,本文按官方手册重写,命令已在 WSL2 Ubuntu 24.04 实测。

ping 是 Linux 网络诊断的第一工具:从基本连通性测试到指定包数量、间隔、大小、目标地址的实用排障流程,全部经 WSL2 实测[1][2]。

一、TL;DR:ping 诊断流程

先本地回路,再网关,再公网 IP,最后域名。任何一步不通,问题就定位在那层。

# 第一步:回路
ping -c 4 127.0.0.1
# 第二步:网关(先查网关 IP)
ip route | grep default
ping -c 4 <网关IP>
# 第三步:公网 IP(避开 DNS)
ping -c 4 8.8.8.8
# 第四步:域名解析
ping -c 4 www.google.com

二、基本用法:确认网络层是否通

ping <目标地址>

默认持续发送 ICMP ECHO_REQUEST,直到 Ctrl+C 停止。输出每行一个包,关键字段[2]:

  • bytes from:对方回应的数据量
  • time=0.038 ms:往返延迟
  • ttl=64:跳数限制(可推测对方系统)
  • 0% packet loss:无丢包

WSL2 Ubuntu 24.04 实测 ping -c 4 127.0.0.1:4 packets transmitted, 4 received, 0% packet loss,rtt min/avg/max/mdev = 0.022/0.038/0.055/0.015 ms,进程退出码 0。

三、常用选项:包数量、间隔、大小、接口

ping -c 4 192.168.1.1              # 发 4 个包后停止
ping -c 4 -i 0.2 192.168.1.1       # 间隔 0.2 秒(默认 1 秒)
ping -c 4 -s 64 192.168.1.1        # 数据部分 64 字节(默认 56)
ping -c 4 -I eth0 192.168.1.1      # 指定发送网卡
ping -c 4 -w 3 192.168.1.1         # 最长跑 3 秒

-c 最适合脚本和自动化,因为不会挂起终端[1]。WSL2 实测 -i 0.2 与 -s 64 组合:time 607ms,退出码 0。-I 指定网卡 eth0 也验证通过。

四、排错速查表

现象 原因 处理
Destination Host Unreachable 本地无路由或 ARP 失败 先 ip route,再查物理链路
Request timeout 对方未回应或 ICMP 被防火墙丢弃 换 -s 大小试;用 traceroute 定位断点
100% packet loss 链路通但全丢包 检查网关、iptables、云安全组
ping: unknown host DNS 解析失败 直接 ping IP,确认 DNS 配置
Network is unreachable 本机无对应网段的网卡 检查 ip addr,补 IP 或路由

五、局限性与回滚

ping 只测 ICMP 层,不保证 TCP 端口可用。目标禁 ping 时工具正常,不代表服务通。如需验证端口,用 nc -zv 或 curl。

ping 是只读探测,不修改系统状态,无需回滚。若误用 -f(flood)导致本地 CPU 飙升,Ctrl+C 立即停止;防火墙规则误拦截可用 iptables -D 删除刚加规则。

局限性:全部实测在 WSL2 Ubuntu 24.04、iputils-ping 20240117 完成;reboot 依赖行为(如 icmp 内核参数生效)未复测;容器网络命名空间、RPM 系发行版未覆盖[3]。

六、FAQ

  • ping 和 traceroute 有什么区别?ping 是点对点单跳,traceroute 显示每一跳的延迟和丢包,适合中间链路故障。
  • 为什么 ping 得通但 SSH 连不上?SSH 走 TCP 22 端口,可能被防火墙或服务状态阻止;用 nc -zv <IP> 22 验证端口。
  • 云服务器禁 ping 还能测连通性吗?可以换 traceroute、curl -I http://<IP>、或 nc -zv <IP> 80。
  • -f flood 模式有什么用?仅用于测试本机对高流量 ICMP 的处理能力,日常排障不需要,可能被防火墙限速。
  • WSL2 里 ping 公网和宿主机有什么区别?WSL2 通过 NAT 访问公网,延迟比宿主机略高;ping 宿主机要用 $(cat /etc/resolv.conf | grep nameserver | awk '{print $2}') 拿到的 IP。

实测记录

  • 测试机:WSL2 Ubuntu 24.04.4 LTS、内核 6.6.114.1-microsoft-standard-WSL2;iputils-ping 3:20240117-1ubuntu0.1;2026-11-01 root 执行。
  • ping -c 4 127.0.0.1:4 packets transmitted, 4 received, 0% packet loss,rtt avg 0.038 ms,退出码 0。
  • ping -c 4 -i 0.2 -s 64 127.0.0.1:同样 0% loss,time 607ms,退出码 0。
  • -I eth0 127.0.0.1:通过,退出码 0;网卡列表 lo、eth0。
  • 失败测试(192.0.2.1)因 WSL NAT 超时未拿到退出码,按手册 ping 在未收到任何响应时退出码非 0。

常见提问

  • 路由器禁 ping 怎么办?用 curl -I http://网关IP 或 nc -zv 网关IP 80 验证 TCP 层。
  • 怎么区分是 DNS 问题还是网络不通?先 ping 公网 IP,再 ping 域名;IP 通域名不通就是 DNS。
  • -w 和 -W 有什么区别?-w 是整个会话的总时长,-W 是单个包等回应的超时。
  • 为什么有些网站禁 ping?ICMP flood 曾被用于 DDoS,部分云商默认拦截;这是安全策略,不是网络故障。

参考资料

文中主要命令已在 WSL Ubuntu(24.04)实测并核对其在 Debian 系与通用发行版的文档口径。