linux ping 命令解析
不管在windows平台,还是在linux平台,ping都是非常常用的网络命令;ping命令通过ICMP(Internet控制消息协议)工作;ping可以用来测试本机与目标主机是否联通、联通速度如何、稳定性如何。
一 、ping 用法
ping命令运行在命令提示符终端,用法为:“ping 参数 目标主机”。其中参数为零到多个,目标主机可以是IP或者域名。
|
1
2
3
4
|
Usage: ping [-aAbBdDfhLnOqrRUvV] [-c count] [-i interval] [-I interface] [-m mark] [-M pmtudisc_option] [-l preload] [-p pattern] [-Q tos] [-s packetsize] [-S sndbuf] [-t ttl] [-T timestamp_option] [-w deadline] [-W timeout] [hop1 ...] destination |
二、ping 参数解释
| 参数 | 详解 |
|---|---|
| -a | Audible 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; |
参考内容:http://ss64.com/bash/ping.html
三 、输出格式

下图为简单的ping产生的响应内容,图中返回内容具体的含义如下:
① ping目标主机的域名和IP(ping会自动将域名转换为IP)
② 不带包头的包大小和带包头的包大小(参考“-s”参数)
③ icmp_seq:ping序列,从1开始;如果数字不是按顺序递增也就意味着丢包了
ttl:剩余的ttl;见四TTL解释
time: 响应时间,数值越小,联通速度越快;
④ 发出去的包数,返回的包数,丢包率,耗费时间;
⑤ 最小/最大/平均响应时间和本机硬件耗费时间;
四 、TTL解释
当我们在使用ping命令时,返回结果里会带一个TTL值。这个东西的含义其实就是Time To Live,指的是报文在网络中能够‘存活’的限制。以前这个限制方式是设定一个时间(Time To Live中的Time就是这样来的),当报文在网络中转发时,时间超过这个限制,最后一个收到报文的‘路由点’就会把它扔掉,而不继续转发。后来把时间限制改为了跳数限制,就是当报文在网络中转发时,每经过一个‘路由点‘,就把预先设定的这个TTL数值减1,直到最后TTL=1时报文就被扔掉,不向下转发。
路由点:我这里是指完成路由功能的机器,因为并不是只有路由器才可以完成路由转发功能,比如主机可以配置路由转发。
ping命令中的TTL
上边解释的TTL是基础,然后,我们这篇文章要说明的是ping中的TTL到底是什么意思。因为不管怎么想,返回了一个TTL这东西,是说被你ping的主机预设的报文TTL是这个值吗?还是说你ping它的时候自己的报文自动设定了TTL是这个值?还是说你的报文经过了TTL跳到达被ping主机?。。。总之就是不能明确地说出这个TTL的意义。
其实这个TTL是指:被ping主机那里返回的报文,到了你这里,从它自己预设的TTL减小到还剩下多少。
有点绕口,举个例子就明白了。
我们先tracert www.baidu.com

这里表示,我们发出的ICMP报文从自己主机到目标主机一共经过12跳,这里可以想成我们发过去的和对方返回的路由路径是一样的(其实网络很复杂的,这样说是在基本理论上简化问题——一般网络情况不变化就是这样的),也就是目标主机它预设的报文TTL要减掉12。现在,按照刚才说的“被ping主机那里返回的报文,到了你这里,从它自己预设的TTL减小到还剩下多少。”,我们可以计算ping www.baidu.com时的TTL了。
TTL = 目标主机预设报文TTL - 12
现在等式中有两个未知数,但是“目标主机预设报文TTL”其实比较容易知道。并且有一个前提:一般有64、128等几个值(这些东西大家另外去查资料吧)
我们先来ping www.baidu.com

这里我们看到 TTL = 52。一般就可以推断目标主机预设的报文TTL为64,因为它比较接近(一般啦)。然后对比一下上边的等式,代入数值:
52 = 64 - 12
默认情况下,Linux系统的TTL值为64或255,Windows NT/2000/XP系统的TTL值为128,Windows 98系统的TTL值为32,UNIX主机的TTL值为255。
五 、简单示例
1、每隔0.6秒ping一次,一共ping 5次:
|
1
2
3
4
5
6
7
8
9
10
11
|
[root@aiezu.com ~]# ping -c 5 -i 0.6 qq.comPING qq.com (14.17.32.211) 56(84) bytes of data.64 bytes from 14.17.32.211: icmp_seq=1 ttl=54 time=16.5 ms64 bytes from 14.17.32.211: icmp_seq=2 ttl=54 time=17.0 ms64 bytes from 14.17.32.211: icmp_seq=3 ttl=54 time=16.6 ms64 bytes from 14.17.32.211: icmp_seq=4 ttl=54 time=18.3 ms64 bytes from 14.17.32.211: icmp_seq=5 ttl=54 time=19.9 ms--- qq.com ping statistics ---5 packets transmitted, 5 received, 0% packet loss, time 2405msrtt min/avg/max/mdev = 16.520/17.692/19.919/1.293 ms |
2、极限快速的使用大包ping:
以最快的速度,使用最大的包进行ping,可用于测试目标主机的承压能力:
|
1
2
3
4
5
6
|
[root@aiezu ~]# ping -f -s 65507 10.0.0.52PING 10.0.0.52 (10.0.0.52) 65507(65535) bytes of data..^--- 10.0.0.52 ping statistics ---646 packets transmitted, 646 received, 0% packet loss, time 1675msrtt min/avg/max/mdev = 1.202/2.406/8.253/0.507 ms, ipg/ewma 2.598/2.318 ms |
注意:此用法非常危险,65535(包头+内容)*100个包每秒=6.25MB,每秒发送6.25MB的数据,相当于50Mbps的带宽,完全可能导致目标主机拒绝服务。请勿用于非法用途,造成不良后果自负。
3、联通不稳定,丢包严重的情形:
下面的ping发出17个ping icmp包,而只有序号为8、9、12的包收到响应信息,丢包率达82%,联通非常不稳定:
|
1
2
3
4
5
6
7
8
9
|
[root@aiezu.com ~]# ping 8.8.8.8PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.64 bytes from 8.8.8.8: icmp_seq=8 ttl=43 time=32.3 ms64 bytes from 8.8.8.8: icmp_seq=9 ttl=43 time=32.2 ms64 bytes from 8.8.8.8: icmp_seq=12 ttl=43 time=32.0 ms^C--- 8.8.8.8 ping statistics ---17 packets transmitted, 3 received, 82% packet loss, time 16003msrtt min/avg/max/mdev = 32.038/32.208/32.362/0.246 ms |
4、完全无法ping通的情形:
|
1
2
3
4
5
|
[root@aiezu.com ~]# ping -c 3 9.9.9.9PING 9.9.9.9 (9.9.9.9) 56(84) bytes of data.--- 9.9.9.9 ping statistics ---3 packets transmitted, 0 received, 100% packet loss, time 1999ms |
六:常见错误
1、错误一:
|
1
|
ping: packet size too large: 70000 |
|
1
2
3
4
|
WARNING: packet size 65508 is too large. Maximum is 65507PING 10.0.0.52 (10.0.0.52) 65508(65536) bytes of data.ping: local error: Message too long, mtu=1500ping: local error: Message too long, mtu=1500 |
解决:
将ping的“-s”参数设置一个更小的值,windows最大值为“65500”,linux最大值为“65507”。
本文转自:
https://blog.csdn.net/AlimSah/article/details/52439029?utm_source=blogxgwz0
http://aiezu.com/article/linux_ping_command.html
linux ping 命令解析的更多相关文章
- linux mknod命令解析
linux mknod命令解析 http://www.cnblogs.com/cobbliu/archive/2011/07/05/2389014.html mknod:make node 生成设备 ...
- linux ping命令实践
ping 解析 Linux系统的ping命令是常用的网络命令,它通常用来检测与目标主机的连通性,经常说"ping以下机器,看是否开着,不能打开网页时候,可以ping ...
- linux ping命令
Linux系统的ping命令是常用的网络命令,它通常用来测试与目标主机的连通性,我们经常会说“ping一下某机器,看是不是开着”.不能打开网页时会说“你先ping网关地址192.168.1.1试试”. ...
- Linux ping 命令
ping命令用来测试与目标主机的连通性,常见用法如下: [root@localhost ~]$ ping www.baidu.com # 对目标主机域名进行连通性测试 [root@localhost ...
- Linux ping命令详解
Linux系统的ping命令是常用的网络命令,它通常用来测试与目标主机的连通性 基于IMCP协议 常见命令参数 -q 不显示任何传送封包的信息,只显示最后的结果 -n 只输出数值 -R 记录路由过程 ...
- 使用Ping命令解析主机名解析出来的是IPv6
如果你经常使用ping命令,并身处局域网,那么你肯定会有这样一个疑问:Ping计算机名为何是IPv6地址? 问这个问题的人很少见,大多都是对网络知识稍有了解的人,所以才会闻到关于ping的问题,而且在 ...
- 【转】Linux Top 命令解析 比较详细
TOP命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况. TOP是一个动态显示过程,即可以通过用户按键来不断刷新当前状态.如果在前台执行该命令,它将独占前台,直到用户 ...
- Linux Top 命令解析 比较详细
[尊重原创文章出自:http://www.jb51.net/LINUXjishu/34604.html] TOP是一个动态显示过程,即可以通过用户按键来不断刷新当前状态.如果在前台执行该命令,它将独占 ...
- 【转】linux mknod命令解析
转自:http://www.cnblogs.com/cobbliu/archive/2011/07/05/2389014.html 个人觉得linux的软件设计思想异常强大,比如把所有的设备都当做文件 ...
随机推荐
- Oracle sql 优化の索引监控
1.监视索引是否使用 除了主键是完整性约束而自动变为索引外,创建普通索引的目的就是为了提高查询速度,如果我们创建了索引而没有被使用,那么这些不被使用的索引将起到阻碍性能的作用. 语法: --检查某个索 ...
- C#委托和事件的使用的意义
转载自:https://www.cnblogs.com/yinqixin/p/5056307.html 每一个初学C#的程序猿,在刚刚碰到委托和事件的概念时,估计都是望而却步,茫然摸不到头脑的.百度一 ...
- MVVM Light 新手入门(3) :ViewModel / Model 中定义“事件” ,并在View中调用 (无参数调用)
今天学习MVVM架构中“事件”的添加并调用,特记录如下,学习资料均来自于网络,特别感谢翁智华 的 利刃 MVVMLight 6:命令基础 在MVVM Light框架中,事件是WPF应用程序中UI与后台 ...
- sql表与表之间的数据操作
--把一张表的内容更新到另一张表 update 表1 set 表1.Store=t2.Name from 表2 t2 where 表1.id=t2.id --备份一张表 create table ta ...
- 887. Super Egg Drop
You are given K eggs, and you have access to a building with N floors from 1 to N. Each egg is ident ...
- TP5使用Composer安装phpoffice/phpspreadsheet,导出Excel文件
1.composer安装: composer require phpoffice/phpspreadsheet 2.点击导出按钮,触发控制器里面的方法 wdjzdc() 3. 在控制中引入 use P ...
- webpack快速入门——如何安装webpack及注意事项
1.window+R键,输入cmd打开命令行工具,输入 mkdir XXXX(XX:文件夹名): 2.cd XXX 进入刚刚创建好的文件夹里,输入cnpm install -g webpack (安装 ...
- 【vim】分割窗口、标签页与Quickfix窗口
vim支持窗口分割和标签页,合适地使用这两种特性可以使文字编辑工作更愉快. 1. 窗口分割 vim支持窗口的水平分割和垂直分割.以下是常用的操作指令或快捷键. 命令 说明 vim -o <fil ...
- jvm(1)类的加载(二)(自定义类加载器)
[深入Java虚拟机]之四:类加载机制 1,从Java虚拟机的角度,只存在两种不同的类加载器: 1,启动类加载器:它使用C++实现(这里仅限于Hotspot,也就是JDK1.5之后默认的虚拟机,有其他 ...
- Using Time Profiler in Instruments
要用 release 版本来profile 概述 time profile 是使用采样的方法来统计,而不是记录每一个方法调用的起始和结束,采样间隔是 1 ms.  在上图中,main 函数被采样了 ...