ping(8)

名称
ping, ping6 - 向网络主机发送ICMP回显请求(ECHO_REQUEST)分组

命令概要
ping [ -LRUbdfnqrvR] [-c count] [-i wait] [-l preload] [-p pattern] [-s packetsize]

更改过的选项：

-I <device name>
    可用于设置输出接口

新增选项：

-T [ping only]:
    发送IP时间戳选项。

-T tsonly
    只有时间戳

-T tsandaddr
    时间戳和地址

-T tsprespec host1 [host2 [host3 [host 4]]]
    预先指定跳数的时间戳

改进：

- 可理解ICMP错误信息并恢复正确。

- 可检查ICMP校验和并把损坏的分组恢复正确。

- 可正确测试linux的回环地址。

描述
ping 程序使用 ICMP 协议的强制回显请求数据报以使主机或网关发送一份 ICMP 的回显应答。回显请求数据报(" pings ")含有一个 IP 及 ICMP 的报头，后跟一个``时间值关键字''然后是一段任意长度的填充字节用于把保持分组长度为16的整数倍。以下是程序的选项：

-c  count 在发送(和接收)了正好数量为 count 的回显应答分组后停止操作。在发送了 count 个分组后没有收到任何分组的特别情况是发送导致了终止(选程主机或网关不可达)。

-d  在所用的套接字上使用 SO_DEBUG 选项。

-f  以高速方式来作 ping 。以分组返回的速度来输出其它分组或每秒输出百次。当收到每个回显应答并打印一个退格符时，对每个回显请求都打印一个句点``.''。这可以快速显示出丢弃了多少个分组，只有超级用户可以用这个选项。这（操作）对网络要求非常苛刻，应该慎重使用。

-i  wait 在发送每个分组时等待 wait 个秒数。缺省值为每个分组等待一秒。此选项与-f选项不能同时使用。

-l  preload 如果指定 preload ，那么 ping 程序在开始正常运行模式前尽可能快地发送分组。同样只有超级用户可以用这个选项。

-n  只以数字形式输出信息。这样就不尝试去查找主机名了。

-p  pattern 可以指定最多16个填充字节用于保持分组长度为16的整数倍。在网络上诊断与数据相关问题时此选项很有用。例如``-p ff''将使发出的分组都用全1填充数据区。

-q  静态输出。在程序启动和结束时只显示摘要行。

-R  记录路由。在回显请求分组中包含记录路由选项并在相应的分组返回时显示路由缓冲区。注意IP首部的容量只能存放9条这样的路由。很多主机 忽略或禁用此选项。

-r  在所连接的网络上旁路正常的选路表，直接向主机发送分组。如果主机未处于直接相连的网络上，那么返回一个错误。此选项可用来通过无路由接口对一台主机进行检测(例如当接口已被 routed 程序丢弃后)。

-s  packetsize 指定要发送数据的字节量。缺省值为 56 ，这正好在添加了 8 字节的 ICMP 首部后组装成 64 字节的 ICMP 数据报。

-v  详细模式输出。打印接收到的回显应答以外的 ICMP 分组。

-w  waitsecs 在 waitsecs 秒后停止 ping 程序的执行。当试图检测不可达主机时此选项很有用。

当用ping来隔离故障时，应首先在本地主机上运行，以检查本地网络接口有效 运行。然后，应该进一步检查主机和网关。计算出往返时间和分组丢失率。如 果收到重复的分组，虽然这些分组的往返时间要用于计算往返时间的最小/平均 /最大值，但是它们不应该算在刚才计算的丢失的分组中。当指定数量的分组已 经发送(和接收)时或如果程序被SIGINT信号终止，会显示一份简短的摘要。

如果ping程序根本没有收到任何返回分组，那它将以返回码1退出。出错时返回 2。否则返回0。这些值可能用于查看主机存在与否。

此程序专用于网络测试，度量和管理。因为它会使用网络的流量，在正常操作或 自动的脚本中使用它并不明智。

  ICMP分组细节
一个无选项的IP首部长为20字节。一个ICMP回显请求分组包含了额外的8个字节 用于任意数量的数据。当给出分组长度时，就同时指出了额外数据的长度(缺省为 56)。因此接收到的ICMP回显应答这样的一个IP分组内部所含的数据量总是8个字 节从而超过了请求数据空间(ICMP首部)。

如果数据空间至少有8个字节大小，ping程序使用此空间的头8个字节来包含一个 用于计算往返时间的时间戳。如果指定了填充字节小于8个字节，就不给定往返 时间了。

  重复和受损的分组

ping程序会报告重复和受损的分组。分组重复不应该发生，不适当的链路层传输 可能会导致这样问题。分组重复在很多情况下可能会发生，虽然存在少量重复并 不总会导致警告，但并不是个好信号。

分组受损很显然会引起严重警告，并通常会在检测分组的路径上某处指出受损的 硬件(在网络中或主机中)。

  尝试不同的数据结构

互联网络并不会因为分组数据部分的内容不同而区别看待分组。不幸的是，与数据相关的问题都已知潜存于网络中，并在一个较长时期内无法检测到。在很多情况下，引起问题的特殊结构是些未完全转换的内容如全1或全0，接近临界的结构如几乎全0。在命令行上没有足够的必要去指定如全0这样的一个数据结构，因为有影响的结构位于数据链路层，并且与指定的和控制器传输的复杂程度有关。

这说明如果你有一个与数据相关的问题，可能必须用很多测试来找出它。如果幸运的话，可以设法查找一个不能在网上发送或发送时要花比同长度的文件更多时间的文件。然后检查此文件中用ping程序的-p选项来指定的重复结构。

  有效时间细节

一个IP分组的TTL值表示分组在被丢弃前穿越IP路由器的最大数据。在现有的实际中， 你可以认为互联网上每个路由器都对TTL字段减1。

TCP/IP规定TCP分组的TTL字段应该设为60，但很多系统用较小的值(4.3 BSD 用30, 4.2用15)。

此字段可能的最大值为255，多数UNIX系统把ICMP回显请求分组的TTL字段设 为255。这就是为什么你可以``ping''一些主机而不能用telnet(1)和ftp(1)到达。

在正常操作时ping打印它收到分组的TTL值。当选程系统收到一份ping的分组时， 在作出响应时可以用TTL字段完成三件事：

不变； 4.3BSD-Tahoe release之前的Berkeley Unix系统是这样做的。 在此情况下，收到的分组的TTL值为255减往返路径中的路由器数。

把它设为255；
    当前的Berkeley Unix系统是这样做的。在此情况下，收到的 分组的TTL值为为255减选程系统与执行ping主机之间的路由器数。

把它设为其它值。
    有些主机对ICMP分组使用与TCP分组相同的值，例如30或 60。其它系统使用原始值。(校对者请指教此句之确切含义：meaculpa@21cn.com)

错误
很多主机和网关忽略记录路由选项。 最大IP首部对如记录路由这样非常有用的选项来说长度太小。但对此无法再做更多 事情了。 通常情况并不推荐以高速方式作ping，而且只在非常受限的条件下才可对广播地址 这样做。

另见
netstat(1), ifconfig(8)

历史
ping程序出现于4.3BSD 。

[中文版维护人]
meaculpa <meaculpa@21cn.com>

[中文版最新更新]
2000/12/08

[中国Linux论坛man手册页翻译计划]
http://cmpp.linuxforum.net