第 7 章 · 03 测链路: 本节摘要:确认了本机有 IP、服务在监听,下一步要测「目标可达吗」。 是最基础的链路连通性测试工具。但很多人对它有两个误解:一是以为「ping 不通就是网络断了」,二是以为「ping 通服务就能用」。本节要讲清 的真实工作机制——它走的是 ICMP 协议(不是 TCP/UDP),发送「echo request」等对方回「echo reply」。理解了这点,你才能解释为什么有些主机禁 ping 但 HTTP 能访问(防火墙过滤 ICMP),以及「ping 通不代表 HTTP 通」(它们走不同协议)。 内容来源:原项目「Linux 命令大全」 ,精选并套用体系化模板。 学习目标 阅读完本节,你应当能够: 用 测试链路连通性与往返延迟。
ping本节摘要:确认了本机有 IP、服务在监听,下一步要测「目标可达吗」。
ping是最基础的链路连通性测试工具。但很多人对它有两个误解:一是以为「ping 不通就是网络断了」,二是以为「ping 通服务就能用」。本节要讲清ping的真实工作机制——它走的是 ICMP 协议(不是 TCP/UDP),发送「echo request」等对方回「echo reply」。理解了这点,你才能解释为什么有些主机禁 ping 但 HTTP 能访问(防火墙过滤 ICMP),以及「ping 通不代表 HTTP 通」(它们走不同协议)。
内容来源:原项目「Linux 命令大全」
command/ping.md,精选并套用体系化模板。
阅读完本节,你应当能够:
ping 域名或IP 测试链路连通性与往返延迟。ping 走 ICMP 协议(而非 TCP/UDP),发 echo request 收 echo reply。-c 限制次数(否则 Linux 的 ping 默认一直跑)、-i 调间隔。ping 测的是「链路层到网络层」的可达ping 的工作原理:它给目标发一个 ICMP「Echo Request」包,目标收到后回一个 ICMP「Echo Reply」,ping 计算往返时间(RTT)。ICMP 是 IP 层的协议,与 TCP/UDP 平级——它不走端口,不建连接,就是单纯的「网络层探针」。
你 ──Echo Request(ICMP)──> 目标 你 <──Echo Reply(ICMP)─── 目标 往返时间 = RTT
这个机制决定了 ping 能回答的问题:「IP 包能不能从我这里到目标那里」——也就是网络层的可达性。
但也决定了它的局限:它不测 TCP/UDP 端口。一个主机可能 ICMP 通(ping 通),但 80 端口的 HTTP 服务根本没开;反过来,也可能 ICMP 被防火墙挡了(ping 不通),但 80 端口完全正常。所以 ping 只是网络排查的「第一道探针」,不能作为「服务可用」的判据。
ping 8.8.8.8 # ping 一个 IP ping google.com # ping 域名(会先 DNS 解析) ping -c 4 google.com # 发 4 个包就停(Linux 默认无限, 必加 -c!) ping -c 4 -i 2 google.com # 每 2 秒发一个(默认 1 秒)
典型输出:
PING google.com (142.250.80.46) 56(84) bytes of data. 64 bytes from 142.250.80.46: icmp_seq=1 ttl=117 time=12.3 ms 64 bytes from 142.250.80.46: icmp_seq=2 ttl=117 time=12.5 ms ^C --- google.com ping statistics --- 4 packets transmitted, 4 received, 0% packet loss # 丢包率 round-trip min/avg/max/mdev = 12.3/12.4/12.5/0.1 ms # 延迟统计
ping google.com # 一直 ping 直到 Ctrl+C ping -c 4 google.com # 加 -c 限定次数, 脚本/快速测试必加
Windows 的 ping 默认发 4 个就停,Linux 默认无限。新手常被这个差异坑。
ping example.com # 不通 curl http://example.com # 但 HTTP 能访问!
原因:很多服务器/防火墙禁 ICMP(防探测、防放大攻击),但 TCP 端口照常开放。ping 不通只能说明「ICMP 被挡或不通」,不能说明「服务不可用」。测服务可用性要用 curl/telnet(下一节)。
ping example.com # 通 curl http://example.com # 但 HTTP 80 端口没开, 连不上
ping 通只证明网络层可达,不证明应用层端口开。ICMP 与 TCP 是两个独立的东西。排查顺序:先 ping 看链路,再用 curl/telnet 测端口,最后测应用。
ping google.com # "unknown host" ping 8.8.8.8 # 通!
ping 域名失败但 ping IP 通,说明 DNS 解析有问题(系统配的 DNS 服务器不可达)。排查 DNS:cat /etc/resolv.conf、nslookup 域名。
ping 走 ICMP 协议(不是 TCP/UDP),发 Echo Request 收 Echo Reply,测的是网络层可达性与延迟。-c N 限定次数(Windows 默认 4 个,行为不同)。/etc/resolv.conf。下一节讲测服务——curl,它是接口调试的瑞士军刀,能精确暴露 HTTP 的每个细节。