如今,联网的计算机是如此普遍,以至于我们大多数人都认为房间一侧的计算机能够与房间另一侧的计算机联系是理所当然的,更不用说世界的另一端。当它按照设计工作时,网络是使互联网、云、文件共享、媒体流、远程管理、打印和更多东西成为可能的原因。当出现问题时,有时诊断起来会很困难。网络连接的最基本的诊断工具之一是ping 命令。
基本的PING
当你无法联系到本地网络中的一台计算机,或互联网上的一台服务器时,你可以ping它。ping发送一个互联网控制信息协议(ICMP)数据包到一个目标IP地址。根据设计,ICMP是一种主要用于诊断的初级格式。它本质上是一个呼叫和响应信号。
但是,故障排除是有顺序的,而且是尽可能地从家里开始。当有疑问时,首先ping你自己的计算机,以确保你正在运行一个网络堆栈。你所操作的计算机也被称为你的localhost,它有一个特殊的IP地址,用于与自己对话。12.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,更不用说响应了。然而,有一些是可以的,对于互联网的工作来说,一个重要的服务器就是名称服务器。
谷歌的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该服务器。这至少可以告诉你该主机是否停机,或者是否只是一个网络服务器问题。
例如,假设你试图访问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间隔为2秒。
$ ping -s 2
你也可以用-w 选项在某个时间值(以秒为单位)后停止Ping。
$ ping -w 6
变体
有许多 ping 的实现。iputils 包提供了一个ping 命令,Busybox 有一个ping 命令,还有一个来自 BSD 和其他的。甚至还有一个用于ping 的GUI。Gping可用于Linux、macOS和Windows。你可以在Github上找到更多关于gping 的信息。
学习ping
ping 命令很简单,但它可以成为你的网络上的眼睛和耳朵的广袤无垠。下次你有连接问题时,让ping 成为你的第一个工具。