ping
在类似Unix的操作系统上,ping命令将ICMP ECHO_REQUEST数据包发送到网络主机。
查看英文版
1 ping 运行系统环境
2 ping 描述
3 ping 语法
4 ping 笔记
5 ping 例子
ping 运行系统环境
Linux
ping 描述
ping是一种向网络上的另一台计算机发送网络数据并从其接收网络数据的简单方法。它通常用于最基本的级别上测试另一个系统是否可以通过网络访问,如果可以,则要花费多少时间来交换该数据。
所述ping效用使用ICMP协议的强制性ECHO_REQUEST数据报从引发ICMP ECHO_RESPONSE主机或网关。ECHO_REQUEST数据报(“ ping”)具有IP和ICMP标头,后跟一个struct timeval,然后是任意数量的用于填充数据包的“pad”字节。
查看英文版
ping 语法
ping [-LRUbdfnqrvVaAB] [-c count] [-m mark] [-i interval] [-l preload] [-p pattern] [-s packetsize] [-t ttl] [-w deadline] [-F flowlabel] [-I interface] [-M hint] [-N nioption] [-Q tos] [-S sndbuf] [-T timestamp option] [-W timeout] [hop ...] destination
选件
-a | 可听见的ping。 | ||||||||||||||||||||||||
-A | 自适应ping。数据包间的间隔适应于往返时间,因此有效地在网络中不超过一个(或多个,如果设置了预加载)未回答的探针。除超级用户外,任何其他用户的最小间隔为200毫秒。在具有低RTT(往返时间)的网络上,此模式实质上等效于泛洪模式(请参阅下面的-f)。 | ||||||||||||||||||||||||
-b | 允许ping通广播地址。 | ||||||||||||||||||||||||
-B | 不允许ping更改探针的源地址。ping开始时,该地址将绑定到所选的地址。 | ||||||||||||||||||||||||
-m mark | 使用标记标记出局的数据包。由于内核中的各种原因,例如使用策略路由选择特定的出站处理,这很有用。 | ||||||||||||||||||||||||
-c count | 发送计数 ECHO_REQUEST数据包后停止。使用deadline选项,ping将等待计数ECHO_REPLY数据包,直到超时到期。 | ||||||||||||||||||||||||
-d | 在正在使用的套接字上设置SO_DEBUG选项。Linux内核不使用此套接字选项。 | ||||||||||||||||||||||||
-F | 洪水坪。对于每个发送的ECHO_REQUEST,将打印一个句点(“ 。 ”),而对于每个接收的ECHO_REPLY,则打印一个退格键。这样可以快速显示正在丢弃的数据包数量。如果未指定间隔(请参见下面的-i),则它将间隔设置为零,并以最快的速度输出数据包或每秒输出一百次,以较大者为准。仅超级用户可以以零间隔使用此选项。 | ||||||||||||||||||||||||
-i interval | 发送每个数据包之间的等待间隔秒数。默认设置是在每个数据包之间正常等待一秒钟,或者在泛洪模式下完全不等待(请参见上面的-f)。仅超级用户可以将间隔设置为小于0.2秒的值。 | ||||||||||||||||||||||||
-I interface-address | 将源地址设置为指定的接口地址。参数可以是数字IP地址或设备名称。ping IPv6链接本地地址时,此选项是必需的。 | ||||||||||||||||||||||||
-l preload | 如果指定了预加载,则ping发送不等待回复的许多数据包。只有超级用户可以选择大于3的预载。 | ||||||||||||||||||||||||
-L | 抑制多播数据包的环回。仅当ping目标是多播地址时,此标志才适用。 | ||||||||||||||||||||||||
-N nioption |
发送ICMPv6节点信息查询(RFC 4620),而不是回显请求。nioption可能是以下之一:
|
||||||||||||||||||||||||
-n | 仅数字输出。不会尝试查找主机地址的符号名称。 | ||||||||||||||||||||||||
-p pattern | 您最多可以指定16个“pad”字节来填写发送的数据包。这对于诊断网络中与数据相关的问题很有用。例如,-p FF将导致发送的分组来填充所有的:FF是255中的十六进制,或11111111在二进制。 | ||||||||||||||||||||||||
-D | 在每行之前打印时间戳(unix时间+微秒)。 | ||||||||||||||||||||||||
-Q tos | 在ICMP数据报中设置与服务质量相关的位。tos可以是十进制或十六进制数。传统上(RFC1349),这些都被解释为:0为保留(当前正被重新定义为拥塞控制),1 - 4为TOS(服务类型)和5 - 7为优先。服务类型的可能设置是:最低成本:0x02,可靠性:0x04,吞吐量:0x08,低延迟:0x10。不应同时设置多个TOS位。特殊优先级的可能设置范围是从优先级(0x20)到网络控制(0xe0)。您必须是root用户(CAP_NET_ADMIN功能)才能使用Critical或更高的优先级值。除非在内核中启用了ECN,否则无法将位0x01(保留)置1 。在RFC2474中,这些字段被重新定义为8位区分服务(DS),其中包括:位0 - 1单独的数据的(ECN将被使用,在这里),和位2 - 7差分服务代码点(DSCP)的。 | ||||||||||||||||||||||||
-q | 安静的输出。除了启动时和完成时的摘要行以外,什么都没有显示。 | ||||||||||||||||||||||||
-R | 记录路线。在ECHO_REQUEST数据包中包括RECORD_ROUTE选项,并在返回的数据包上显示路由缓冲区。请注意,IP标头仅足以容纳九条此类路由。许多主机忽略或放弃此选项。 | ||||||||||||||||||||||||
-r | 绕过常规路由表,并直接通过连接的接口发送到主机。如果主机不在直接连接的网络上,则返回错误。如果还使用了选项-I(请参见上文),则该选项可用于通过没有路由通过它的接口ping本地主机。 | ||||||||||||||||||||||||
-s PACKETSIZE | 指定要发送的数据字节数。缺省值为56,当与8个字节的ICMP头数据结合使用时,它将转换为64个ICMP数据字节。 | ||||||||||||||||||||||||
-S sndbuf | 设置套接字sndbuf。如果未指定,则选择它最多缓冲一个数据包。 | ||||||||||||||||||||||||
-t ttl | 设置IP TTL(生存时间)。 | ||||||||||||||||||||||||
-T timestamp-option | 设置特殊的IP时间戳选项。时间戳选项可以是tsonly(仅时间戳),tsandaddr(时间戳和地址)或tsprespec host1 [ host2 [ host3 [ host4 ]]]](时间戳预先指定的跃点)。 | ||||||||||||||||||||||||
-M hint | 选择路径MTU发现策略。提示可以是do(禁止分裂,甚至当地的一个),want(做PMTU发现,本地片段时,报文尺寸较大),或dont(不设置DF标志)。 | ||||||||||||||||||||||||
-U | 打印完整的用户到用户延迟(旧版ping行为)。通常ping命令会打印网络往返时间,由于DNS故障,时间可能有所不同。 | ||||||||||||||||||||||||
-v | 详细输出。 | ||||||||||||||||||||||||
-V | 显示版本号,然后退出。 | ||||||||||||||||||||||||
-w deadline | 指定ping退出之前的超时(以秒为单位),无论发送或接收了多少个数据包。在这种情况下,在发送计数数据包后ping不会停止,它会等待截止日期到期或直到响应计数探测或网络中的某些错误通知为止。 | ||||||||||||||||||||||||
-W timeout | 等待响应的时间(以秒为单位)。该选项仅在没有任何响应的情况下影响超时,否则ping将等待两个RTT。 |
查看英文版
ping 笔记
使用ping进行故障隔离时,应首先在localhost上运行它,以验证本地网络接口是否已启动并正在运行。然后,应该“ ping”越来越远的主机和网关。计算往返时间和丢包统计信息。如果接收到重复的数据包,尽管这些数据包的往返时间用于计算最小/平均/最大往返时间,但它们仍不包含在丢包计算中。当指定数量的数据包已发送(或接收)或程序以SIGINT 信号终止时,将显示简短摘要。在不终止信号SIGQUIT的情况下,可以获得更短的电流统计信息。
如果ping根本没有收到任何答复数据包,它将以代码1退出。如果同时指定了数据包计数和截止期限,并且在截止期限到来时接收到的数据包少于计数,则它也将以代码1退出。出现其他错误时,代码2退出。否则,它以代码0退出。这样就可以使用退出代码查看主机是否处于活动状态。
ping适用于网络测试,测量和管理。由于它可能会施加在网络上,因此在正常操作或自动脚本中使用ping是不明智的。
ICMP数据包详细信息
不带选项的IP标头为20个字节。ICMP ECHO_REQUEST数据包包含额外的8个字节的ICMP标头,后跟任意数量的数据。给定数据包大小时,这表示该额外数据的大小(默认值为56)。因此,在类型为ICMP ECHO_REPLY的IP数据包中接收到的数据量将始终比请求的数据空间(ICMP标头)多8个字节。
如果数据空间至少为struct timeval的大小,则ping使用该空间的开始字节来包括时间戳,该时间戳将用于往返时间的计算。如果数据空间较短,则不会给出往返时间。
重复和损坏的数据包
ping将报告重复和损坏的数据包。重复的数据包永远不会发生,并且似乎是由不适当的链路级重传引起的。在许多情况下可能会发生重复,并且很少(如果有的话)是一个好兆头,尽管重复水平较低的情况可能并不总是会引起警报。
损坏的数据包是引起警报的严重原因,并且通常表明ping数据包路径中某处(网络或主机中)的硬件损坏。
尝试不同的数据模式
(网络间)层决不应根据数据部分中包含的数据对数据包进行不同的处理。不幸的是,已知与数据有关的问题会潜入网络,并且很长一段时间都不会被发现。在许多情况下,有问题的特定模式是没有足够“过渡”的东西,例如全1或全零,或者在边缘的模式(例如几乎全零)。在命令行上指定全零的数据模式(例如)并不一定足够,因为感兴趣的模式位于数据链接级别,并且您键入的内容与控制器传输的内容之间的关系可以是复杂。
这意味着,如果您遇到与数据相关的问题,则可能必须进行大量测试才能找到它。如果幸运的话,您可能会设法找到一个文件,该文件要么不能通过网络发送,要么需要比其他类似长度的文件传输更长的时间。然后,您可以检查该文件中是否存在可以使用-p选项进行测试的重复模式。
TTL详细信息
IP数据包的TTL(生存时间)值表示该数据包在丢弃之前可以通过的IP路由器的最大数量。实际上,您可以期望Internet中的每个路由器将TTL字段减一。
该TCP / IP规范规定为TCP数据包的TTL字段应该设置为60,但许多系统使用较小的值(4.3 BSD用途30,4.2使用15)。
该字段的最大可能值为255,并且大多数Unix系统将ICMP ECHO_REQUEST数据包的TTL字段设置为255。这就是为什么您会发现可以ping某些主机,但不能通过telnet或ftp到达它们的原因。
在正常操作中,ping从收到的数据包中打印ttl值。远程系统收到ping数据包时,可以在响应中使用TTL字段执行以下三项操作之一:
- 不改变它;这是Berkeley Unix系统在4.3 BSD Tahoe发行之前所做的。在这种情况下,收到的数据包中的TTL值将为255减去往返路径中路由器的数量。
- 设置为255;这就是当前的Berkeley Unix系统所做的。在这种情况下,收到的数据包中的TTL值为255减去从远程系统到ping主机的路径中的路由器数量。
- 将其设置为其他值。一些机器对ICMP数据包使用的值与用于TCP数据包的值相同,例如30或60。其他机器可能完全使用通配值。
补充说明
- 许多主机和网关会忽略RECORD_ROUTE选项。
- IP标头的最大长度太小,以至于RECORD_ROUTE之类的选项无法完全发挥作用,尽管对此无法做很多事情。
- 通常不建议进行泛洪ping操作,并且仅应在非常受控的条件下对广播地址进行泛洪ping操作。
查看英文版
ping 例子
ping google.com
对主机google.com进行Ping操作,看看它是否还活着。
ping google.com -c 1
对主机google.com进行一次Ping操作。输出将类似于以下内容:
PING google.com (204.228.150.3) 56(84) bytes of data. 64 bytes from www.google.com (204.228.150.3): icmp_seq=1 ttl=63 time=0.267 ms --- google.com ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 0.267/0.267/0.267/0.000 ms
查看英文版