第 7 章 · 03 测链路:`ping`


文档摘要

第 7 章 · 03 测链路: 本节摘要:确认了本机有 IP、服务在监听,下一步要测「目标可达吗」。 是最基础的链路连通性测试工具。但很多人对它有两个误解:一是以为「ping 不通就是网络断了」,二是以为「ping 通服务就能用」。本节要讲清 的真实工作机制——它走的是 ICMP 协议(不是 TCP/UDP),发送「echo request」等对方回「echo reply」。理解了这点,你才能解释为什么有些主机禁 ping 但 HTTP 能访问(防火墙过滤 ICMP),以及「ping 通不代表 HTTP 通」(它们走不同协议)。 内容来源:原项目「Linux 命令大全」 ,精选并套用体系化模板。 学习目标 阅读完本节,你应当能够: 用 测试链路连通性与往返延迟。

第 7 章 · 03 测链路:ping

本节摘要:确认了本机有 IP、服务在监听,下一步要测「目标可达吗」。ping 是最基础的链路连通性测试工具。但很多人对它有两个误解:一是以为「ping 不通就是网络断了」,二是以为「ping 通服务就能用」。本节要讲清 ping 的真实工作机制——它走的是 ICMP 协议(不是 TCP/UDP),发送「echo request」等对方回「echo reply」。理解了这点,你才能解释为什么有些主机禁 ping 但 HTTP 能访问(防火墙过滤 ICMP),以及「ping 通不代表 HTTP 通」(它们走不同协议)。

内容来源:原项目「Linux 命令大全」command/ping.md,精选并套用体系化模板。

学习目标

阅读完本节,你应当能够:

  1. ping 域名或IP 测试链路连通性与往返延迟。
  2. 说清 ping 走 ICMP 协议(而非 TCP/UDP),发 echo request 收 echo reply。
  3. 解释为什么有些主机「ping 不通但服务可访问」(防火墙过滤 ICMP,但 TCP 端口没挡)。
  4. 理解「ping 通不代表 HTTP 通」(不同协议,ICMP 通不代表 TCP 端口通)。
  5. -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 # 延迟统计

看什么

  • 是否通:0% packet loss = 通;100% loss = 完全不通;中间值 = 丢包(网络不稳定)。
  • 延迟(time):本地几 ms,跨洲 100-300 ms。延迟突然高或抖动大,说明链路质量差。
  • ttl:每经过一个路由器减 1,反映「跳数」。从 ttl 值能粗估经过多少跳(起始通常 64 或 128)。

三、踩坑与排错

坑 1:Linux 的 ping 默认无限,忘了 Ctrl+C 就一直跑

ping google.com # 一直 ping 直到 Ctrl+C ping -c 4 google.com # 加 -c 限定次数, 脚本/快速测试必加

Windows 的 ping 默认发 4 个就停,Linux 默认无限。新手常被这个差异坑。

坑 2:ping 不通 ≠ 网络断

ping example.com # 不通 curl http://example.com # 但 HTTP 能访问!

原因:很多服务器/防火墙禁 ICMP(防探测、防放大攻击),但 TCP 端口照常开放。ping 不通只能说明「ICMP 被挡或不通」,不能说明「服务不可用」。测服务可用性要用 curl/telnet(下一节)。

坑 3:ping 通 ≠ 服务可用

ping example.com # 通 curl http://example.com # 但 HTTP 80 端口没开, 连不上

ping 通只证明网络层可达,不证明应用层端口开。ICMP 与 TCP 是两个独立的东西。排查顺序:先 ping 看链路,再用 curl/telnet 测端口,最后测应用

坑 4:DNS 问题表现为 ping 域名失败

ping google.com # "unknown host" ping 8.8.8.8 # 通!

ping 域名失败但 ping IP 通,说明 DNS 解析有问题(系统配的 DNS 服务器不可达)。排查 DNS:cat /etc/resolv.confnslookup 域名

本节要点回顾

  1. ping 走 ICMP 协议(不是 TCP/UDP),发 Echo Request 收 Echo Reply,测的是网络层可达性与延迟。
  2. Linux 的 ping 默认无限,务必 -c N 限定次数(Windows 默认 4 个,行为不同)。
  3. ping 不通 ≠ 服务不可用:ICMP 可能被防火墙挡,但 TCP 端口正常;测服务用 curl。
  4. ping 通 ≠ 服务可用:ICMP 通不证明 TCP 端口开。
  5. ping 域名失败但 IP 通 = DNS 问题,查 /etc/resolv.conf
  6. 排查顺序:ping(链路)→ telnet/curl(端口)→ curl(应用),逐层定位。

下一节讲测服务——curl,它是接口调试的瑞士军刀,能精确暴露 HTTP 的每个细节。


发布者: 作者: 灏天文库 转发
评论区 (0)
U