1. 简介

Ping 是大多数操作系统中都内置的一个网络工具,最常用于检测某个网络设备是否可达。

它的名字来源于其工作方式:发送“回声请求”(echo request)并接收“回声响应”(echo reply),类似于声呐的工作原理。有些资料中也将其视为 "Packet InterNet Groper" 的缩写。

在本教程中,我们会看到,Ping 还可以用于估算网络连接的带宽

不同操作系统下 ping 的实现略有差异,本文中的示例基于 Linux 系统中的 ping 命令进行演示。

2. Ping 命令的原理:ICMP 协议

2.1 基本工作机制

Ping 工具的核心是使用了 ICMP(Internet Control Message Protocol) 中的 Echo RequestEcho Reply 报文。当你执行 ping 命令时,系统会向目标地址发送一个 Echo Request 包,目标主机收到后会返回一个 Echo Reply 包。

✅ Ping 命令会发送多个 Echo Request 请求,每条结果都会显示:

  • 请求是否成功
  • 收到的字节数
  • TTL(Time To Live)
  • 响应延迟时间(RTT)

最后还会汇总一些统计数据,如丢包率、平均延迟等。

Ping 可以帮助我们:

  • 测试本地网络连接是否正常
  • 判断远程主机是否在线
  • 分析网络问题,如丢包、高延迟等

2.2 ICMP 协议简介

ICMP 是 IP 协议族的一部分,位于 OSI 模型的 网络层(Network Layer),如下图所示:

ICMP in OSI model

一个典型的 ICMP 报文结构如下图所示,MTU 为 1500 字节时:

ICMP packet

⚠️ 当 MTU 不同时,ICMP 负载的大小也会随之变化,因此其结构是具有一定灵活性的。

3. 检查目标主机是否可达

执行如下命令可以测试是否能访问某个目标主机:

ping example.com

输出示例如下:

PING example.com (93.184.216.34): 56 data bytes
64 bytes from 93.184.216.34: icmp_seq=0 ttl=53 time=17.8 ms
64 bytes from 93.184.216.34: icmp_seq=1 ttl=53 time=18.1 ms
64 bytes from 93.184.216.34: icmp_seq=2 ttl=53 time=18.0 ms
64 bytes from 93.184.216.34: icmp_seq=3 ttl=53 time=17.9 ms

--- example.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3005ms
rtt min/avg/max/mdev = 17.8/17.9/18.1/0.123 ms

这个输出说明:

  • 每次响应的延迟时间
  • 收到的数据包大小为 64 字节
  • TTL 为 53,表示数据包最多还能经过 53 个跳点
  • 最后显示了统计信息,包括丢包率和平均延迟等

如果看到如下输出:

Request timeout for icmp_seq 0

说明当前网络连接不稳定或目标主机不可达。这种情况下建议排查本地网络或目标服务是否正常。


以上是本教程第一部分,下一部分我们将讲解如何利用 ping 的响应时间估算网络带宽。


原始标题:Calculate Upload/Download Speed Using Ping

» 下一篇: 内存管理