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