ping命令经过发送ICMP(Internet控制消息协议)的ECHO REQUEST到目标网络主机,来测试网络联通性。ping命令支持多平台,linux,unix,windows等都有ping命令。html
ping [-aAbBdDfhLnOqrRUvV46] [-c count] [-F flowlabel] [-i interval] [-I interface] [-l preload] [-m mark] [-M pmtudisc_option] [-N nodeinfo_option] [-w deadline] [-W time‐out] [-p pattern] [-Q tos] [-s packetsize] [-S sndbuf] [-t ttl] [-T timestamp option] [hop ...] destinationnode
[]:中括号中为可选参数
destination:为目的网络主机,能够是IP或域名linux
参数 详解git
-a 带声音的 ping.
-A 自适应ping,根据ping包往返时间肯定ping的速度;
-b 容许ping一个广播地址;
-B 不容许ping改变包头的源地址;
-c count ping指定次数后中止ping;
-d 使用Socket的SO_DEBUG功能;
-F flow_label 为ping回显请求分配一个20位的“flow label”,若是未设置,内核会为ping随机分配;
-f 极限检测,快速连续ping一台主机,ping的速度达到100次每秒;
-i interval 设定间隔几秒发送一个ping包,默认一秒ping一次;
-I interface 指定网卡接口、或指定的本机地址送出数据包;
-l preload 设置在送出要求信息以前,先行发出的数据包;
-L 抑制组播报文回送,只适用于ping的目标为一个组播地址
-n 不要将ip地址转换成主机名;
-p pattern 指定填充ping数据包的十六进制内容,在诊断与数据有关的网络错误时这个选项就很是有用,如:“-p ff”;
-q 不显示任何传送封包的信息,只显示最后的结果
-Q tos 设置Qos(Quality of Service),它是ICMP数据报相关位;能够是十进制或十六进制数,详见rfc1349和rfc2474文档;
-R 记录ping的路由过程(IPv4 only);
注意:因为IP头的限制,最多只能记录9个路由,其余会被忽略;
-r 忽略正常的路由表,直接将数据包送到远端主机上,一般是查看本机的网络接口是否有问题;若是主机不直接链接的网络上,则返回一个错误。
-S sndbuf Set socket sndbuf. If not specified, it is selected to buffer not more than one packet.
-s packetsize 指定每次ping发送的数据字节数,默认为“56字节”+“28字节”的ICMP头,一共是84字节;
包头+内容不能大于65535,因此最大值为65507(linux:65507, windows:65500);
-t ttl 设置TTL(Time To Live)为指定的值。该字段指定IP包被路由器丢弃以前容许经过的最大网段数;
-T timestamp_option 设置IP timestamp选项,能够是下面的任何一个:
'tsonly' (only timestamps)
'tsandaddr' (timestamps and addresses)
'tsprespec host1 [host2 [host3]]' (timestamp prespecified hops).
-M hint 设置MTU(最大传输单元)分片策略。
可设置为:
'do':禁止分片,即便包被丢弃;
'want':当包过大时分片;
'dont':不设置分片标志(DF flag);
-m mark 设置mark;
-v 使ping处于verbose方式,它要ping命令除了打印ECHO-RESPONSE数据包以外,还打印其它全部返回的ICMP数据包;
-U Print full user-to-user latency (the old behaviour).
Normally ping prints network round trip time, which can be different f.e. due to DNS failures.
-W timeout 以毫秒为单位设置ping的超时时间;
-w deadline deadline;github
引用自 <https://www.cnblogs.com/operationhome/p/9848138.html>; windows
[root@master ~]# ping -c 4 baidu.com PING baidu.com (39.156.69.79) 56(84) bytes of data. 64 bytes from 39.156.69.79 (39.156.69.79): icmp_seq=1 ttl=128 time=20.3 ms 64 bytes from 39.156.69.79 (39.156.69.79): icmp_seq=2 ttl=128 time=28.9 ms 64 bytes from 39.156.69.79 (39.156.69.79): icmp_seq=3 ttl=128 time=19.0 ms 64 bytes from 39.156.69.79 (39.156.69.79): icmp_seq=4 ttl=128 time=30.2 ms --- baidu.com ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3004ms rtt min/avg/max/mdev = 19.036/24.651/30.299/4.999 ms
从上能够看到百度服务器的ICMP ECHO RESPOND(返回)了64字节的包,icmp_seq为包序号,ttl为生存时间,time为延时;在下方的统计信息中能够看到发出4个包,收到4个包,丢包率0%,本次执行命令用时3004ms;rtt min/avg/max/mdev分别是最小/平均/最大响应时间和本机耗费时间。服务器
场景1:须要检查发包服务器到某边界网络设备的时延
在各地的局点中选择一部分服务器使用脚本加定时任务ping测固定大小的包到网络设备,在固定时长的状况下,取统计信息;
若是ttl有明显少于其余局点设备的,该局点中间设备可能存在网络环路;
若是平均响应时间较高,且最大或最小响应时间不正常,可能服务器驱动、硬件、或中间链路存在问题;
若是本机耗费时间较高,可能服务器程序(尤为是运行的c程序)、服务器驱动、硬件存在问题网络
Ping ipv6的地址须要加上有ipv6地址的网卡socket
[root@master ~]# ping -c 4 -s 65507 192.168.236.21 PING 192.168.236.21 (192.168.236.21) 65507(65535) bytes of data. ^C --- 192.168.236.21 ping statistics --- 1 packets transmitted, 0 received, 100% packet loss, time 0ms
linux系统最大能够ping65507字节的大包,经常使用于测试链路带宽。ide
fping能够批量测试网络联通性。fping 与ping的不一样之处在于,您能够在命令行上指定任意数量的目标,或指定包含要ping的目标列表的文件。fping不会发送到一个目标,直到它超时或答复为止,它会发出ping数据包并以循环方式移至下一个目标。
在默认模式下,若是目标答复,则将其记录下来并从要检查的目标列表中删除;若是目标在特定时间限制和/或重试限制内未响应,则将其指定为不可访问。 ping还支持向目标发送指定数量的ping或无限循环(如 ping)。与ping不一样,fping是在脚本中使用的,所以其输出旨在易于解析。
项目地址:https://github.com/schweikert/fping/
下载:https://github.com/schweikert/fping/releases/download/v5.0/fping-5.0.tar.gz
tar -xzf fping-5.0.tar.gz cd fping-5.0/ ./configure prefix=/usr/local/fping make ; make install echo "export PATH=$PATH:/usr/local/fping/sbin" >> /etc/profile
参数 详解
-a 显示可ping通的目标
-A 将目标以ip地址的形式显示
-b ping 数据包的大小。(默认为56)
-B <f> 设置指数反馈因子到f
-c <num> ping每一个目标的次数 (默认为1)
-C <num> 同-c,返回的结果为冗长格式
-e 显示返回数据包所费时间
-f <file> 从文件获取目标列表( - 表示从标准输入)(不能与 -g 同时使用)
-g 经过指定开始和结束地址来生成目标列表(例如:./fping –g 192.168.1.0 192.168.1.255)或者一个IP/掩码形式(例如:./fping –g 192.168.1.0/24)
-i <num> 设置ip的TTL值 (生存时间)
-l 循环发送ping
-m ping目标主机的多个网口
-n 将目标以主机名或域名显示(等价于 -d )
-p <num> 对同一个目标的ping包间隔(毫秒) (在循环和统计模式中,默认为1000)
-q 安静模式(不显示每一个目标或每一个ping的结果)
-Q <num> 同-q, 可是每n秒显示信息概要
-r <num> 当ping失败时,最大重试次数(默认为3次)
-s 打印最后的统计数据
-t <num> 单个目标的超时时间(毫秒)(默认500)
-u 显示不可到达的目标
-v 显示版本号
[root@master ~]# fping -u -g 106.117.244.230/24 117.244.1 117.244.2 117.244.3 …
[root@master ~]# fping -u -g 106.117.244.100 106.117.244.235 106.117.244.100 106.117.244.101 106.117.244.102 …
iplist文件为ip列表
[root@master ~]# fping -u < iplist 106.117.244.174 106.117.244.175 106.117.244.176 106.117.244.177 [root@master ~]# fping -u -f iplist 106.117.244.174 106.117.244.175 106.117.244.176 106.117.244.177
[root@master ~]# fping -a -e < iplist 106.117.244.231 (28.8 ms) 1.81.1.223 (42.6 ms) 182.86.84.229 (49.4 ms) 106.117.244.232 (42.7 ms) 125.64.1.232 (36.6 ms)
[root@master ~]# fping -s -a < iplist 106.117.244.232 182.86.84.229 125.64.1.232 9 targets 3 alive 6 unreachable 0 unknown addresses 30 timeouts (waiting for response) 33 ICMP Echos sent 3 ICMP Echo Replies received 0 other ICMP received 208 ms (min round trip time) 219 ms (avg round trip time) 229 ms (max round trip time) 4.148 sec (elapsed real time)
参考文章:
https://www.cnblogs.com/operationhome/p/9848138.html
http://www.javashuo.com/article/p-uhgvpewd-ew.html