linux ping 命令解析

 

不管在windows平台,还是在linux平台,ping都是非常常用的网络命令;ping命令通过ICMP(Internet控制消息协议)工作;ping可以用来测试本机与目标主机是否联通、联通速度如何、稳定性如何。

一 、ping 用法

ping命令运行在& u n # t , 7 K命令提示符终端,; P 1 k I用法为:“ping 参数 目标主机”。其中参数为零到多个,目标主机可以是IP或者域名k f ` & . D I | B

1
2
3
4
Usage:ping[-aAbBdDfhLnOqrRUvV] [-c count] [-i interval] [-I interface]
[-m mark] [-M pmtuu T 2 . I : 7disc_option] [-l prelJ _ toad] [-p pattern] [-Q tos]
[-s packetsize] [-S sndbuf] [-t ttl] [-T timestamp_option]
[-w deadline] [-W2 i @ ; d 7 P 6 timeout] [hom 4 l $ l ~p1 ...] destination

 

二、ping 参数解释

参数 详解
-a Audib1 * G F xle ping.
-A 自适应ping,根据ping包往返时间确定ping的速度;
-b 允许ping一个广播地址;
-B 不允许ping改变包头的源地址;
-ccount ping指定次数后停止ping;
-d 使用Socket的SO_DEBUG@ { L | .功能;
-F flow_l^ S 7 b sabel 为ping回显请[ b a 6 H H求分配一个20位– g . B P % t的“flow label”,如果未设置,内核会为ping随机分配;
-f 极限检测,快速连续ping一台主机,ping的速度达到100次每秒e A b G & ) d ~
-iinterval 设定间隔几秒发送一个ping包,默认一秒ping一次;
-Iinterface 指定网卡接口、或指定的本机地址送出数据包;
0 A | j Olpreload 设置在送出要求信息之前,先行发出的数据包;
-L 抑制组播报文回送,只适用于ping的目标为一个组播地址
-n 不要将ip地址转换成主机名;
-p patternq ` r 3 指定填充ping数据包的十六进制内容,– k q l 8 Y Z T在诊断与数据有关的网络错误时这个选项就非常有用,如:“-p ff”;
-q 不显示任何传送封包的信息,只显示最后的结果
-Q tos 设置) / = { q PQos(Quality of Service),它是ICMP数据报相关位;可以是十进制或十六进制数,详见rfc1349和rfc2474文档;
-R 记录ping的路由过程(IPv4 only);
注意:由于IP头的限制,最多只能记录9个路由,其他会被忽略;
-r 忽略正常的路0 . 0 q ) t + i 由表,直接将数据包送到远端主机上,通常是查看本机的网络接口是否有问题;如果主机不直接连接的网络上,则返回一个错误。
-S sndbuf Set socket sndbuf. If not specified, it is selected to buffer not more than one packet.
-spacket3 = g E Fsize 指定每次ping发送的数据字节数,默认为“56字节”+“28字节”的ICMl ( / A u 1 l LP头,一0 m B共是84字节;
包头+内容不能大于65535,所以最大值为65507(linux:65507, windows:65500);
-t ttl; 9 x ; j m 设置TTL(Time To Live)为指定的K / P k值。该字段指定IP包被路由器丢弃之前允许通过k p : S – V h w Z的最大网 z + n a Y 8段数;
-T timestamp_option 设置IP timestamp选项,可以是下面的任何一个:
‘tsonlM ! T ay’ (only timestamps)
‘tsandaddr’ (timestamps~ { j and addresses)
‘tspre4 ] R Y y xspec host1 [{ i / % 3 k g Shost2 [host3]]’ (timestamp prw q E z Fespecified hops).
# p e o 0 M hint 设置MTU(最大传输单元)分片策略。
可设置为:
‘do@ v D j‘:禁止分片,即使包被s H n m 5 ) (丢弃;
‘wr 3 z B Sant’:当包过大时分片;
‘dont’:不设置分片标志(DF flag);
-m mark 设置mark;
-v 使ping处于v_ c *erbose方式,它要ping命令除了( / – p U |打印ECHO-RESPONSE数据包之外,还打印其它所有返回的ICMP数据包;
-U Print full user-to-user latency (the old behaviour).
Normally ping prints network round trip time, whichT 3 * P # E can be differen* [ S U U _ [ 9t f.e. due to DNS failures.
-W timeout 以毫秒为单位设置ping的超时时间;
-w deadn K Fline deadline;

参考内容:http://ss64.com/bash/ping.html

三 、输出格式

linux_bash_ping.png

下图为简单的ping产生的响应内容,图中返回内容具体的含义如下:

① ping目标主机的域名和IP(ping会自动m ] + V % j [ d将域名转换为IP)
② 不带4 | - 9 - M x & p包头的包大小和带包头的包大小(参考“q - ^-s”参数)
③ icmp_seq:ping序列,从- # ~ ] h ^ G H1开始i K Z W  7 };如果数字不是按顺序递增也就意味着v U - 3 Y T g f丢包了
  ttl:剩余的ttl;见四TTL解释
  time: 响应时间,数值越小,联通速度q 6 , b ( b [ z越快;
④ 发出去的包数,返回的包数,丢包率,耗费时间;
⑤ 最小/最大/平均响应时间和本机硬件s $ H r耗费时间;

四 、TTL解释

当我们在使用pin] # # J d J ^ y ug命令时,返回结果里会带一个TTL值。这个东西的含义其实就是Time To Live,指的是报文在网络m 0 ( ! e S #中能够‘存活’的限制。以前这: 4 | r O B w个限制方式是设定一个时间(Time To L5 : * B Iive中的Time就是这样来的),当报文在网络中转发时,时间超过这个限制,最后一个收到报文的‘路由点’就会把它扔掉,而不继续转发。后来把时间限制改为了跳数限制,就是当报文在网络中转发时; e | u B | E g f,每经过一个‘路由点‘,就把预先设定的这个TTL数值减1,直1 . I Z P { | O到最后TTL=1时报文就被扔掉,不向下转发。

路由点:q Z | d q我这里是指完成路由功能的机器,因为并不是只有路由器才可以完成路由转发功能,比如主机可以配置路由转发。

ping命令中的TTL

上边解释的TTL是基础,然后,我们这篇文章要说明的是ping中的TTL到底是什么意思。因为不管怎么想,返回了一个TTL这东西,是说被你ping的主机预设的报文TTL是这个值吗?还是说你ping它的时候自己的报文自动设定了TTL是a $ W o这个值?还是说你的报文经过了TTL跳; 3 E 8 x到达被ping主机?。。。总之就是不能明确地说出这个T6 ? A * F JTL的意义。

其实这个TTL是指:被ping主机那里返回的报文,到了你这里,从它自己预设的TTL减小到还剩下多少。

有点绕口,举个例子就明白了。

我们先trace3 d _ $rt www.baidu.com

 

这里表示,我们发出的Ih ! HCMPd x i D 6 3报文从自己主机到目标主机一共经过12跳,这里可以想成我们发过去的和对方返回的路由路r p a ? b径是一样的(其实网络很复杂的,这样说是在基本理论上简化问题——一般网络情况不变化就是这样的),也就是目标主机它预设的报文TTL要减掉12。现在,按照刚才说的“被pg V { E Wing主机那里返回的报文,到了你这里,从它自己预设的TTL减小到还剩下多少。”,我们可以计算ping www.baidu.com时的TTL了。

Tk _ 1TL = 目标主机预设报文TTL – 12

现在等式中有两个未知数,但是“目标主机预设报文TTL”其实比较容易知道。并且有~ t ^ $ 9 ] X y y一个前提:一般有64、128等几个值(这些东西大家另外去查资料吧)

我们先来pingp + [ . m z ] v www.baidu.com

这里我们看到m } 7 3 = a R D TTL = 52。一般就可以推断目标主机预设的报文TTL ` ! z R为64,因为它比较接近(一般啦)。然后对比一下上边的等式,代入数值:

52A ` 9 ` R m r = 64 – 12

默认情D k , w 2况下,Linux系统的TTL值为64或255,Windows NT/2000/X, V k K  c + 5P系统的TTL值为128,Win2 Q ` ; ? % (dows 98系统的TTL值为32,U} + ^ sNIX主机的TTL值为255W y ? ( 9 N g !! Y .

五 、简单示例

1、每隔0.6秒ping一次,一共ping 5次:

1
2
3
4
5
6
7
8
9
10
11
[rootY L I f C M@aiezu.com ~]# ping -c 5 -i 0.6 qq.com
PIN: 3 A *G qq.com (14.17.32.211) 56(84) bytes of data.
64 bytes from 14.17.32.E # h g ^ ` X ^ e211: icJ ; * A # B Jmp_seq=1 ttl=54time=16.5 ms
64 bytes from 14.17.32.211: icmp_seq=2 ttl=54time=17.0 ms
64 bytes from 14.17.32.211:Y A @ q s x icmp_seq=3 ttl=54time=16.6 ms
64 bytes from 14.17.32.2i ) e h11: icmp_seq=4 ttl=54time=18.3 ms
64 bytes from 14.17.32.211: icmp_seq=5 ttl=54time=19.9 ms
--- qq.comE P J O R N Zpingstatistics ---
5 pack ; h 9 i 1 0 ; Qkets transmitted, 5 received, 0% po E O i 0acket loss,time2405ms
rtt min/avg/max/mdev= 16.520/17.692/19.919/1.293 ms

2、极限快速的使用大包ping:
以最快的速度,使用最大的包进行U L R 1ping,可用于测试目标主机的承压能力:

1
2
3
4
5
6
[root@aie# ! i i m @ ; Pzu ~$ C J f z 8 ` 8]# ping -f -s 65507 10.0.0.52
PING 10.0.0.52 (10.0.0.52) 65507(65535) bytes of data.
.^
--a ] t o- 10.0.0.52pingstatis; 9 B a Q g p Xtics ---
646 pJ 5 { ? 8 : a $ Hackets transmitted, 646 received, 0% packet loss,time1675ms
rtt min/avg/max/mdev= 1.202/2.406/8.253/0.507 ms, iy n l J F Q epg/ewma2.598/2.318 ms

注意:此用法非常危险,65535@ E G Q 7(包头+内容)*100个包每秒=6.25MB,每秒发送6.p X h25MB的数据,相当于2 [ j $ i 4 Q50Mbps的带宽,完全可能导致目标] ; h $ ^主机拒绝服务。请勿用于非法用途,造成不良后果自负。

3、联通不稳定,丢包严重的情形:
下面的ping发出17个ping icmp包,而只有序号为8、9、12的包收到响应信息,丢包率达82%,联通非常不稳定:

1
2
3
4
5
6
7
8
9
[rooL b ]t@aiezu.com ~]# ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(8V s ! C $ g4) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=8 ttl=43timu g f 4 A & ee=U L h32.3 ms
64 bytes from 8.8.8.8: icmp_seq=9 ttl=43time=32.2 ms
64 bytes from 89 L = D k v E f d.8.8.8: icmp_seq=12 ttl=43time=32.0 ms
^C
--- 8.8.8.8pingstatistics ---
17 packets transmitted, 3 received, 82% packet loss,time16003ms
rtt min/avg/max/mdev= 32.038/32.208/32.362/0.246 ms

4、完全无法ping通的情y D M i形:

1
2
3
4
5
[root@aiezu.com ~]# ping -c 3 9.9.9.9
PING 9.9.9.9 (9.9.9.9) 56(84) bytes of dat* M t ?a.
--- 9.9.9.9pingstatistics ---
3 packets transmitted, 0 rece3 d Gived, 100% packet loss,time1999ms

 

六:常见错误

1、错误z ) _ d U一:

1
ping: packet size too large: 70000
1
2
3
4
WARNING: pap K I z f y x Gcket size 65508 is too large. Maximu0 H v W ] C V G hm iso ^ C 65507
PI4 N 9 _ t N ! M NG 10.0.0.52 (p m Q D ^ ?10.0.0.52) 65508(65536) bytes of data.
ping: local error: Message too long, mtu=1500
p] A Ging: local error: MB { U K ] 8essage too long, mtu=1500

解决:
将ping的“-+ 6 X %s”参数设置一个更小的值v # { C y,win^ H ( i T U vdows最大值为“65500”,linux最大值为“65507”。

郑重声明:本网站属学习交流,非赢利性网站。在本网站的言论纯属发表者个人意见,与本网站立场无关。涉及侵权与政治言论一律删除,请所有会员注意。网站资源由会员从网上收集整理所得,版权属于原作者。网站所有资源是进行学习和研究测试之用,请在下载后24小时删除。本站出于学习和研究的目的提供平台供会员进行交流和讨论,如有侵犯原作者的版权,请来信告知,提供证明,我们将立即删除相关链接,谢谢合作!我们的邮件地址是: yuanmayu@163.com
源码鱼 » linux ping 命令解析 教程

发表评论


×