不管在windows平台,还是在linux平台,ping都是非常常用的网络命令;ping命令通过ICMP{Internet控制消息协议,一个ICMP报文包括IP报头(至少20字节)、ICMP报头(至少8字节)和ICMP报文(属于ICMP报文的数据部分)};ping可以用来测试本机与目标主机是否联通、联通速度如何、稳定性如何。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
在介绍ping命令之前,需要了解几个技术名词:
IP协议
IP协议是TCP/IP协议族中最核心的部分,它的作用是在两台主机之间传输数据,所有上层协议的数据(HTTP、TCP、UDP等)都会被封装在一个个的IP数据包中被发送到网络上。
ICMP
ICMP全称为互联网控制报文协议,它常用于传递错误信息,ICMP协议是IP层的一部分,它的报文也是通过IP数据包来传输的。
TTL
TTL(time-to-live)是IP数据包中的一个字段,它指定了数据包最多能经过几次路由器。从我们源主机发出去的数据包在到达目的主机的路上要经过许多个路由器的转发,在发送数据包的时候源主机会设置一个TTL的值,每经过一个路由器TTL就会被减去一,当TTL为0的时候该数据包会被直接丢弃(不再继续转发),并发送一个超时ICMP报文给源主机。
一、命令格式:
pin [选项] <参数> [主机名或IP地址]
选项
-b :允许ping一个广播地址;
-c<次数> :指定ping的次数,linux默认一直ping,直到用户强行终止;
-f :极限检测,快速连续ping一台主机,ping的速度达到100次每秒;
-i<间隔秒数> :设定间隔几秒发送一个ping包,默认一秒ping一次;
-I<网络接口> :使用指定的网络接口送出数据包;
-l<前置载入> :设置在送出要求信息之前,先行发出的数据包;
-n :不要将ip地址转换成主机名,只输出数值;
-p<范本样式> :设置填满数据包的范本样式,指定填充ping数据包的十六进制内容,在诊断与数据有关的网络错误时这个选项就非常有用,如:“-p ff”;;
-q :不显示指令执行过程,开头和结尾的相关信息除外;
-r :忽略正常的路由表,直接将数据包送到远端主机上,通常是查看本机的网络接口是否有问题;如果主机不直接连接的网络上,则返回一个错误。;
-R :记录路由过程注意:由于IP头的限制,最多只能记录9个路由,其他会被忽略;
-s<数据包大小> :指定每次ping发送的ICMP报文数据部分的字节数,默认为“56字节”+“8字节”的ICMP头,一共是64字节,ICMP头+内容不能大于65535,所以最大值为65507(linux:65507, windows:65500);
-t<存活数值> :设置存活数值TTL(Time To Live)的大小,该字段指定IP包被路由器丢弃之前允许通过的最大网段数;
-v :详细显示指令的执行过程。
-M<do,want,dont> :设置MTU(最大传输单元)分片策略。可设置为:'do':禁止分片,即使包被丢弃;'want':当包过大时分片;'dont':不设置分片标志(DF flag);
二、举例:
1、测试目标地址是否畅通
---------------------------------------------------------------
[root@CentOS ~]# ping www.baidu.com #ping目标主机的域名和IP(ping会自动将域名转换为IP)
PING www.a.shifen.com (39.156.66.14) 56(84) bytes of data.
64 bytes from 39.156.66.14: icmp_seq=1 ttl=53 time=26.1 ms
64 bytes from 39.156.66.14: icmp_seq=2 ttl=53 time=25.0 ms
64 bytes from 39.156.66.14: icmp_seq=3 ttl=53 time=51.3 ms
64 bytes from 39.156.66.14: icmp_seq=4 ttl=53 time=33.9 ms
64 bytes from 39.156.66.14: icmp_seq=5 ttl=53 time=27.4 ms
64 bytes from 39.156.66.14: icmp_seq=6 ttl=53 time=27.2 ms
^C
--- www.a.shifen.com ping statistics ---
6 packets transmitted, 6 received, 0% packet loss, time 5971ms
rtt min/avg/max/mdev = 25.013/31.882/51.372/9.174 ms
---------------------------------------------------------------
对上面的参数进行解释
64 bytes #表示这次传送的ICMP数据包大小为64 Bytes(ICMP报头(至少8字节)加上ICMP报文),这是默认值,可以使用-s更改数据包大小
from 39.156.66.14 #应到的数据包来自的主机IP
icmp_seq=1 #ping序列,从1开始,有的可能从0开始;
ttl=53 #剩余的ttl,其实这个TTL是指:从被ping主机那里返回的报文,到了你这里,从它自己预设的TTL减小到还剩下多少,而不是你发出去数据包的TTL值
time=1.66 ms #响应时间(毫秒),数值越小,联通速度越快;
6 packets transmitted #发出去的包数
6 received #返回的包数
0% packet loss # 丢包率
time 5971ms #耗费时间
rtt min/avg/max/mdev = 25.013/31.882/51.372/9.174 ms #最小/最大/平均响应时间/本机硬件耗费时间;
2、每隔0.5秒ping一次,一共ping 3次
---------------------------------------------------------------
ping -i 0.5 -c 3 192.168.1.1
---------------------------------------------------------------
3、从指定的网口进行ping,
---------------------------------------------------------------
ping -I eth0 www.baidu.com
---------------------------------------------------------------
4、以最快的速度,使用最大的包进行ping,可用于测试目标主机的承压能力
---------------------------------------------------------------
ping -f -s 65507 192.168.1.1
---------------------------------------------------------------
注意:此用法非常危险,65535(包头+内容)*100个包每秒=6.25MB,每秒发送6.25MB的数据,相当于50Mbps的带宽,完全可能导致目标主机拒绝服务。请勿用于非法用途,造成不良后果自负。
5、找出最大的MTU
---------------------------------------------------------------
[root@CentOS ~]# ping -c 2 -s 1200 -M do 192.168.1.1
---------------------------------------------------------------
如果有响应,那就是可以接受这个数据包,如果无响应,那就表示这个MTU太大了