7.3 使用ping

ping是每位用户都应该首先了解的最基础的网络命令。绝大多数操作系统上都包含该命令。ping也是一个验证网络上两台主机连通性的诊断工具,能够用来找出网络上的活动主机。让我们看看这个命令的用法。

7.3.1 实战演练

为了检查网络上两台主机之间的连通性,ping命令使用互联网控制消息协议(Internet Control Message Protocol,ICMP)的echo分组。当这些echo分组发送到某个主机时,如果分组能够送达且该主机为活动主机,那么它就会发送一条回应。

检查某个主机是否可以到达:

  1. $ ping ADDRESS

ADDRESS可以是主机名、域名或者IP地址。

ping会连续发送分组,回应信息将被打印在终端上。用Ctrl+C来停止ping命令。

例如:

  • 如果主机可以到达,那么输出信息如下所示。
  1. $ ping 192.168.0.1
  2. PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data.
  3. 64 bytes from 192.168.0.1: icmp_seq=1 ttl=64 time=1.44 ms
  4. ^C
  5. --- 192.168.0.1 ping statistics ---
  6. 1 packets transmitted, 1 received, 0% packet loss, time 0ms
  7. rtt min/avg/max/mdev = 1.440/1.440/1.440/0.000 ms
  8.  
  9. $ ping google.com
  10. PING google.com (209.85.153.104) 56(84) bytes of data.
  11. 64 bytes from bom01s01-in-f104.1e100.net (209.85.153.104): icmp_
  12. seq=1 ttl=53 time=123 ms
  13. ^C
  14. --- google.com ping statistics ---
  15. 1 packets transmitted, 1 received, 0% packet loss, time 0ms
  16. rtt min/avg/max/mdev = 123.388/123.388/123.388/0.000 ms
  • 如果主机不可到达,则输出如下所示。
  1. $ ping 192.168.0.99
  2. PING 192.168.0.99 (192.168.0.99) 56(84) bytes of data.
  3. From 192.168.0.82 icmp_seq=1 Destination Host Unreachable
  4. 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命令中获知。例如:

  1. --- google.com ping statistics ---
  2. 5 packets transmitted, 5 received, 0% packet loss, time 4000ms
  3. 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分组的数量。

用法如下:

  1. -c COUNT

例如:

  1. $ ping 192.168.0.1 -c 2
  2. PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data.
  3. 64 bytes from 192.168.0.1: icmp_seq=1 ttl=64 time=4.02 ms
  4. 64 bytes from 192.168.0.1: icmp_seq=2 ttl=64 time=1.03 ms
  5. --- 192.168.0.1 ping statistics ---
  6. 2 packets transmitted, 2 received, 0% packet loss, time 1001ms
  7. rtt min/avg/max/mdev = 1.039/2.533/4.028/1.495 ms

在上面的例子中,ping命令发送了2个echo分组后就停止发送。

如果我们需要通过脚本ping一组IP地址来检查主机的状态,那么这个技巧就能派上用场。

  • ping命令的返回状态

ping命令如果执行顺利,会返回退出状态0;否则,返回非0。执行顺利意味着目的主机能够到达,否则意味着目的主机不可到达。

返回状态可以通过下面的方法轻松获得:

  1. $ ping ADDRESS -c2
  2. if [ $? -eq 0 ];
  3. then
  4. echo Successful ;
  5. else
  6. echo Failure
  7. fi