7.3 使用ping
ping
是每位用户都应该首先了解的最基础的网络命令。绝大多数操作系统上都包含该命令。ping
也是一个验证网络上两台主机连通性的诊断工具,能够用来找出网络上的活动主机。让我们看看这个命令的用法。
7.3.1 实战演练
为了检查网络上两台主机之间的连通性,ping
命令使用互联网控制消息协议(Internet Control Message Protocol,ICMP)的echo
分组。当这些echo
分组发送到某个主机时,如果分组能够送达且该主机为活动主机,那么它就会发送一条回应。
检查某个主机是否可以到达:
- $ ping ADDRESS
ADDRESS
可以是主机名、域名或者IP地址。
ping
会连续发送分组,回应信息将被打印在终端上。用Ctrl+C来停止ping
命令。
例如:
- 如果主机可以到达,那么输出信息如下所示。
- $ ping 192.168.0.1
- PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data.
- 64 bytes from 192.168.0.1: icmp_seq=1 ttl=64 time=1.44 ms
- ^C
- --- 192.168.0.1 ping statistics ---
- 1 packets transmitted, 1 received, 0% packet loss, time 0ms
- rtt min/avg/max/mdev = 1.440/1.440/1.440/0.000 ms
- $ ping google.com
- PING google.com (209.85.153.104) 56(84) bytes of data.
- 64 bytes from bom01s01-in-f104.1e100.net (209.85.153.104): icmp_
- seq=1 ttl=53 time=123 ms
- ^C
- --- google.com ping statistics ---
- 1 packets transmitted, 1 received, 0% packet loss, time 0ms
- rtt min/avg/max/mdev = 123.388/123.388/123.388/0.000 ms
- 如果主机不可到达,则输出如下所示。
- $ ping 192.168.0.99
- PING 192.168.0.99 (192.168.0.99) 56(84) bytes of data.
- From 192.168.0.82 icmp_seq=1 Destination Host Unreachable
- From 192.168.0.82 icmp_seq=2 Destination Host Unreachable
一旦主机不可到达,ping
返回错误信息“Destination Host Unreachable”。
7.3.2 补充内容
除了检查网络上两点之间的连通性,ping
命令还可以通过其他选项来获取有用信息。让我们看看ping
的其他选项。
- 往返时间
ping
命令可以用来得出网络上两台主机之间的往返时间(Round Trip Time,RTT)。RTT是分组从源主机到目的主机的往返时间。RTT的单位是毫秒,可以从ping
命令中获知。例如:
- --- google.com ping statistics ---
- 5 packets transmitted, 5 received, 0% packet loss, time 4000ms
- rtt min/avg/max/mdev = 118.012/206.630/347.186/77.713 ms
其中,最小的RTT是118.012ms,平均RTT是206.630ms,最大RTT是347.186ms。ping
输出中的mdev
(77.713ms)代表平均偏差。
- 限制发送的分组数量
ping
命令会不停地发送echo
分组,并等待回复,直到按下Ctrl+C。不过,我们可以用选项 -c
限制所发送的echo
分组的数量。
用法如下:
-c COUNT
例如:
- $ ping 192.168.0.1 -c 2
- PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data.
- 64 bytes from 192.168.0.1: icmp_seq=1 ttl=64 time=4.02 ms
- 64 bytes from 192.168.0.1: icmp_seq=2 ttl=64 time=1.03 ms
- --- 192.168.0.1 ping statistics ---
- 2 packets transmitted, 2 received, 0% packet loss, time 1001ms
- rtt min/avg/max/mdev = 1.039/2.533/4.028/1.495 ms
在上面的例子中,ping
命令发送了2个echo
分组后就停止发送。
如果我们需要通过脚本ping
一组IP地址来检查主机的状态,那么这个技巧就能派上用场。
ping
命令的返回状态
ping
命令如果执行顺利,会返回退出状态0;否则,返回非0。执行顺利意味着目的主机能够到达,否则意味着目的主机不可到达。
返回状态可以通过下面的方法轻松获得:
- $ ping ADDRESS -c2
- if [ $? -eq 0 ];
- then
- echo Successful ;
- else
- echo Failure
- fi