使用 Linux ping 命令诊断连接问题

网络连接最重要的诊断工具之一是 ping 命令。
46 位读者喜欢这篇文章。
Navigating the challenges of international teamwork

Opensource.com

如今,联网计算机非常普及,以至于我们大多数人都理所当然地认为,房间一侧的计算机可以联系到房间另一侧的计算机,更不用说世界另一侧的计算机了。当网络按设计工作时,它使互联网、云、文件共享、媒体流、远程管理、打印等等成为可能。当出现问题时,有时可能很难诊断。网络连接最重要的诊断工具之一是 ping 命令。

基本 ping 命令

当您无法访问本地网络上的计算机或互联网上的服务器时,可以使用 ping 命令。ping 命令会向目标 IP 地址发送互联网控制消息协议 (ICMP) 数据包。按照设计,ICMP 是一种主要用于诊断的简易格式:它本质上是一种呼叫和响应信号。

但是故障排除是有顺序的,它从尽可能靠近本地开始。如有疑问,首先 ping 您自己的计算机以确保您正在运行网络堆栈。您正在操作的计算机也称为您的localhost,它有一个特殊的 IP 地址分配给自身通信:127.0.0.1。

ping 命令理解 localhost 主机名、其 IP 地址以及仅为 0 的快捷方式。

您可以使用 -c (表示计数 选项控制发送的信号数量。

$ ping 0 -c1
PING 0 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.069 ms

--- 0 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.069/0.069/0.069/0.000 ms

在您确定本地网络堆栈已启动并运行后,您可以 ping 您的路由器。路由器的地址通常以 192、168 或 10 开头。确切的 IP 地址取决于路由器的配置。

当您未指定要发送多少个 ping 时,可以使用 Ctrl+C 停止 ping 命令运行。

$ ping 192.168.0.1 
PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data.
From 192.168.0.100: icmp_seq=2 Redirect Host(New nexthop: 192.168.0.1)
From 192.168.0.100: icmp_seq=3 Redirect Host(New nexthop: 192.168.0.1)
From 192.168.0.100: icmp_seq=4 Redirect Host(New nexthop: 192.168.0.1)
From 192.168.0.100: icmp_seq=5 Redirect Host(New nexthop: 192.168.0.1)
^C

如果您可以访问您的路由器,则表示您的有线或无线连接正在工作。 

我的网络上的其他主机呢?您可以 ping 各种设备。并非所有设备都保证响应(某些设备会丢弃 ICMP 数据包),但许多设备会响应。例如,我可以 ping 我的打印机

$ ping 192.168.0.4 

在您的网络之外进行 ping

除了确定您自己的网络按预期工作之外,您还可以 ping 到路由器之外的更广阔的世界。同样,并非所有服务器都允许接收,更不用说响应 ICMP。但是,有些服务器会响应,而对于互联网的正常运行至关重要的服务器是名称服务器。

Google 的 DNS 服务器相对容易记住,并且它会响应 ping

$ ping -c 2 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=116 time=53.3 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=116 time=53.5 ms

--- 8.8.8.8 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 53.304/53.424/53.544/0.120 ms

当一个网站似乎消失时,您或许可以探测全球 DNS 网络,以找出其主机服务器的地址,然后 ping 该服务器。这至少可以告诉您是主机宕机还是仅仅是 Web 服务器问题。

例如,假设您尝试访问 example.com 但未成功。首先,使用 host 命令查找 IP 地址

$ host example.com
example.com has address 93.184.216.34
example.com has IPv6 address 2606:2800:220:1:248:1893:25c8:1946
example.com mail is handled by 0 

然后通过 IP ping 网站的主机

$ ping 93.184.216.34 -c 1

Ping 和 IPv6

Ping 适用于 IPv4 和 IPv6。可以通过指定 -4 或 -6 显式地强制仅使用其中一个。 

数据包大小

您可以使用 -s 选项更改您发送的 ICMP 数据包的大小。默认数据包大小为 56,当与 8 字节的标头结合使用时,它会转换为 64 个 ICMP 数据字节。此命令发送 43 个字节

$ ping -s 35 -c 5 8.8.8.8

您可以使用 -D 选项在终端中每个 ping 报告之前打印时间戳。这提供了 UNIX 纪元时间,加上微秒

$ ping -D 8.8.8.8 
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
[1634013430.297468] 64 bytes from 8.8.8.8: icmp_seq=1 ttl=116 time=53.3 ms
[1634013431.298738] 64 bytes from 8.8.8.8: icmp_seq=2 ttl=116 time=53.1 ms

Ping 时间

您可以使用 -i 选项更改 ping 之间的时间间隔。这会将 ping 间隔更改为两秒

$ ping -i 2 

您还可以使用 -w 选项在一段时间(以秒为单位)后停止 ping

$ ping -w 6

变体

ping 有许多实现。iputils 软件包提供了一个 ping 命令,Busybox 有一个 ping 命令,BSD 和其他软件包中也有 ping 命令。甚至还有一个 ping 的 GUI:Gping 可用于 Linux、macOS 和 Windows。您可以在 Github 上找到有关 gping 的更多信息。 

学习使用 ping 命令

ping 命令很简单,但它可以成为您网络广阔空间中的耳目。下次您遇到连接问题时,让 ping 成为您首先使用的工具。

接下来阅读
User profile image.
教育家、企业家、开源倡导者、终身学习者、Python 教师。教育心理学硕士,教育领导学硕士,Linux 系统管理员。
Seth Kenlon
Seth Kenlon 是一位 UNIX 极客、自由文化倡导者、独立多媒体艺术家和 D&D 爱好者。他曾在电影和计算机行业工作,经常同时进行。

1 条评论

您可能想阅读 ping 的作者 Mike Muuss [2] 撰写的“PING 程序的故事”[1]。目前无法访问,但可以在 Internet Archive [3] 上找到。

[1] https://ftp.arl.army.mil/~mike/ping.html
[2] https://en.wikipedia.org/wiki/Mike_Muuss
[3] https://web.archive.org/web/20210114225856/https://ftp.arl.army.mil/~mike/ping.html

Creative Commons 许可协议本作品根据 Creative Commons 署名-相同方式共享 4.0 国际许可协议获得许可。
© . All rights reserved.