ping命令返回结果分析
LINUX 下ping 命令的使用祥解ping 是一个很常用的小工具,它主要用于确定网络的连通性问题 使用ping 命令后,常见的出错信息通常分为3种:1、unknown host:不知名主机,该远程
LINUX 下ping 命令的使用祥解
ping 是一个很常用的小工具,它主要用于确定网络的连通性问题 使用ping 命令后,常见的出错信息通常分为3种:
1、unknown host:不知名主机,该远程主机的名字不能被域名服务器DNS 转换成IP 地址,故障原因可能是域名服务器有故障,或者目标主机的名字不正确,或者网络管理员的系统与远程主机之间的通信线路有故障。
2、Destination Host Unreachable:此错误信息表明执行命令的计算机没能将信息发送到对方那里。大多数情况是自己一方的计算机LAN 连接线掉线,或者由于IP 设置不对,而无法进行正常通信。
3、Request time out :表示在规定时间内因某种原因没有返回ping 命令的应答,这种情况很可能是对方的计算机没有运行,或者中间线路不通致使信息没有到达对方那里。大多数情况下是企业防火墙等阻挡了ping 命令中使用的ICMP 信息。在这种情况下即便通信对象正在工作,也会有这种结果显示。(echo 包顺利到达目的主机,且目的主机也向源主机返回echo-reply 包,但是echo-reply 包在半路上丢失,无法到达源主机。)
如何用ping 命令查找无法上网的原因
1.Ping 命令的语法格式:
有必要先给不了解Ping 命令的人介绍一下Ping 命令的具体语法格式:
ping 目的地址[参数1J[参数2]……
其中目的地址是指被测试计算机的IP 地址或域名 主要参数有:
a :解析主机地址
c :数据:发出的测试包的个数,缺省值为无限ping
l :数值:所发送缓冲区的大小

1
以上面的结果为例
1. Reply from 61.135.179.166: bytes=10240 time=48ms TTL=50
10240的网络包用48毫秒完成了一次网络交互
TTL=50表示服务器的操作系统是Linux ,中间经过了14个网络设备
2. Packets: Sent = 100, Received = 100, Lost = 0 (0 loss)
发送了100个包,接收到100个回应,丢包率0(一般应该在5以内)
3. Minimum = 48ms, Maximum = 50ms, Average = 48ms
最短交互时间48毫秒,最长50毫秒,平均48毫秒
平均时间如果跟最短很接近,表示速度比较均匀,偶尔时间长些
,平均时间如果跟最长很接近,一般认为网络忙的可能性比较大了
推算速度
网络速度≈包大小/交互时间 k字节/s
例如上面的结果,网络速度 ≈ 10240/48 = 213 k/s = 1704K BIT/s 速度很好,肯定比1M 的ADSL 是达不到这个速度的
几个结果分析
网络速度不稳定
Minimum = 33ms, Maximum = 179ms, Average = 62ms
最短、最长、平均,三个时间很开,说明网络速度不稳定,波动很大
网络链接突然断开
Reply from xxx.xxx.xx.xx: bytes=990 time=11ms TTL=108
Reply from xxx.xxx.xx.xx: bytes=990 time=7ms TTL=108
Request timed out.
Reply from xxx.xxx.xx.xx: bytes=990 time=12ms TTL=108
Reply from xxx.xxx.xx.xx: bytes=990 time=10ms TTL=108
响应时间变化不大,突然出现一个超时,一般是中间某一个网络设备导致网络链接突然断开 网络速度不稳定
Reply from xxx.xxx.xx.xx: bytes=990 time=182ms TTL=108
Request timed out.
Reply from xxx.xxx.xx.xx: bytes=990 time=448ms TTL=108
Reply from xxx.xxx.xx.xx: bytes=990 time=61ms TTL=108
,Request timed out.
Reply from xxx.xxx.xx.xx: bytes=990 time=8ms TTL=108
响应时间变化很大,时不时出现超时,一般是接触不良、网络设备处理不过来、网络繁忙等 在ping 的结果基础上,可以用 tracert 或者 pathping 进一步分析网络问题出在哪个网络设备上。
2.键入Ping 192.192.225.225就可以了
Ping 192.192.225.225 with 32 byteS of dara:
Reply from 192.192.225.225:bytes=32 time<10ms TTL=128
Reply from 192.192.225.225:bytes=32 time<10ms TTL=128
Reply from 192.192.225.225:bytes=32 time<10ms TTL=128
Reply from 192.192.225.225:bytes=32 time<10ms TTL=128
Ping StatiStiCe for 192.192.225.225:
PacketS :Sent=4,ReceiVed=4,LOSt=0 0%lOSS
Approximate round trip timeS in milli-secondS:
Minimum=Oms,Maximum=1mS,Average=OmS
以上返回了4个测试数据包,其中bytes=32表示测试中发送的数据包大小是32个字节,“time<10ms表示与对方主机
往返一次所用的时间小于10毫秒,TTL=128表示当前测试使用的TTL Time to Live 值为128 系统默认值
如果网络有问题,则返回如下所示的响应失败信息:
Pinging 192.192.225.225 with 32 bytes of data
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Ping StatiStiCe for 192.192.225,225:
PacketS :Sent=4,ReceiVed=0,lost \=4 100%loss
Minimum‘0ms,Maximum=OmS,Average’0mS
网络故障:出现第二种情况时,建议从以上几个方面来着手排查:一是看被测试计算机是否已安装了TCP /IP 协议:
二是检查一下被测试计算机的网卡安装是否正确且是否已经连通:三是看被测试计算机的TCP /IP 协议是否与网F
有效的绑定 具体方法是通过选择“开始一设置一控制面板一网络”来查看 :如果通过以上几个步骤的检查还没有
发现问题的症结,建议重新安装并设置一,‘厂TCP /”协议,如果是TCP /IP 协议的问题,这时绝对可以彻底解决
按照上述方法,我们还可以用Ping 命令来检查任意一台客户湍计算机上TCP /IP 的工作情况 例如我们要检查网络任
一客户端“机房0厂上的TCP /IP 协议的配置和工作情况,可直接在该台机器上Ping 本机的
,IP 地址,若返回成功的信
息,说明IP 地虹LB 己置无误,若失败则应检查IP 地址的配置? 赏ü 韵虏街杞 校菏紫认燃觳橐弧げ氛 鐾 纾 氐?nbsp;
看一下该IP 地址是否正在被其他用户使用,然后再看一下该工作站是否已正确连入网络 很多情况下用户没有登陆网
络也会出现此种情况,这可是低级错误啊 最后检查网—E 的I /0地址lIRQ 值和DMA 值,这些值是否与其他设备发生
了冲突 其中最后一项的检查非常重要,也常被许多用户所忽视,即使是Ping 成功后也要进行此项的检查 因为当Ping
本机的IP 地址成功后,仅表明本机的IP 地址配置没有问题,但并不能说明网卡的配置完全正确 这时虽然在本机的
“网上邻居”中能够看到本机的计算机名,可就是无法与其他的用户连通,不知问题出在何处,其实问题往往就出在
网卡上
简单来说,TTL 全程Time to Live,意思就是生存周期
首先要说明ping 命令是使用的网络层协议ICMP ,所以TTL 指的是一个网络层的网络数据包 package 的生存周期,这句话不懂的先回去复习OSI7层协议去
第一个问题,为什么要有生存周期这个概念
很显然,一个package 从一台机器到另一台机器中间需要经过很长的路径,显然这个路径不是单一的,是很复杂的,并且很可能存在环路 如果一个数据包在传输过程中进入了环路,如果不终止它的话,它会一直循环下去,如果很多个数据包都这样循环的话,那对于网络来说这就是灾难了 所以需要在包中设置这样一个值,包在每经过一个节点,将这个值减1,反复这样操作,最终可能造成2个结果:包在这个值还为正数的时候到达了目的地,或者是在经过一定数量的节点后,这个值减为了0 前者代表完成了一次正常的传输,后者代表包可能选择了一条非常长的路径甚至是进入了环路,这显然不是我们期望的,所以在这个值为0的时候,网络设备将不会再传递这个包而是直接将他抛弃,并发送一个通知给包的源地址,说这个包已死
其实TTL 值这个东西本身并代表不了什么,对于使用者来说,关心的问题应该是包是否到达了目的地而不是经过了几个节点后到达 但是TTL 值还是可以得到有意思的信息的
每个操作系统对TTL 值得定义都不同,这个值甚至可以通过修改某些系统的网络参数来修改,例如Win2000默认为128,通过注册表也可以修改 而Linux 大多定义为64 不过一般来说,很少有人会去修改自己机器的这个值的,这就给了我们机会可以通过ping 的回显TTL 来大体判断一台机器是什么操作系统
以我公司2台机器为例
看如下命令
D:Documents and Settingshx>ping 61 152 93 131
Pinging 61 152 93 131 with 32 bytes of data:
Reply from 61 152 93 131: bytes=32 time=21ms TTL=118
,Reply from 61 152 93 131: bytes=32 time=19ms TTL=118
Reply from 61 152 93 131: bytes=32 time=18ms TTL=118
Reply from 61 152 93 131: bytes=32 time=22ms TTL=118
Ping statistics for 61 152 93 131:
Packets: Sent = 4, Received = 4, Lost = 0 0 loss
Approximate round trip times in milli-seconds:
Minimum = 18ms, Maximum = 22ms, Average = 20ms
D:Documents and Settingshx>ping 61 152 104 40
Pinging 61 152 104 40 with 32 bytes of data:
Reply from 61 152 104 40: bytes=32 time=28ms TTL=54
Reply from 61 152 104 40: bytes=32 time=18ms TTL=54
Reply from 61 152 104 40: bytes=32 time=18ms TTL=54
Reply from 61 152 104 40: bytes=32 time=13ms TTL=54
Ping statistics for 61 152 104 40:
Packets: Sent = 4, Received = 4, Lost = 0 0 loss
Approximate round trip times in milli-seconds:
Minimum = 13ms, Maximum = 28ms, Average = 19ms
第一台TTL 为118,则基本可以判断这是一台Windows 机器,从我的机器到这台机器经过了10个节点,因为128-118=10 而第二台应该是台Linux ,理由一样64-54=10
了解了上面的东西,可能有人会有一些疑问,例如以下:
1,不是说包可能走很多路径吗,为什么我看到的4个包TTL 都是一样的,没有出现不同
这是由于包经过的路径是经过了一些最优选择算法来定下来的,在网络拓扑稳定一段时间后,包的路由路径也会相对稳定在一个最短路径上 具体怎么算出来的要去研究路由算法了,不在讨论之列
2,对于上面例子第二台机器,为什么不认为它是经过了74个节点的Windows 机器 因为128-74=54
对于这个问题,我们要引入另外一个很好的ICMP 协议工具 不过首先要声明的是,一个包经过74个节点这个有些恐怖,这样的路径还是不用为好
要介绍的这个工具是tracert *nix下为traceroute ,让我们来看对上面的第二台机器用这个命令的结果
D:Documents and Settingshx>tracert 61 152 104 40
Tracing route to 61 152 104 40 over a maximum of 30 hops
,1 13 ms 16 ms 9 ms 10 120 32 1
2 9 ms 9 ms 11 ms 219 233 244 105
3 12 ms 10 ms 10 ms 219 233 238 173
4 15 ms 15 ms 17 ms 219 233 238 13
5 14 ms 19 ms 19 ms 202 96 222 73
6 14 ms 17 ms 13 ms 202 96 222 121
7 14 ms 15 ms 14 ms 61 152 81 86
8 15 ms 14 ms 13 ms 61 152 87 162
9 16 ms 16 ms 28 ms 61 152 99 26
10 12 ms 13 ms 18 ms 61 152 99 94
11 14 ms 18 ms 16 ms 61 152 104 40
Trace complete
从这个命令的结果能够看到从我的机器到服务器所走的路由,确实是11个节点 上面说10个好像是我犯了忘了算0的错误了,应该是64-54 1,嘿嘿 ,而不是128的TTL 经过了70多个节点
既然已经说到这里了,不妨顺便说说关于这两个ICMP 命令的高级一点的东西
首先是ping 命令,其实ping 有这样一个参数,可以无视操作系统默认TTL 值而使用自己定义的值来发送ICMP Request包
例如还是用那台Linux 机器,用以下命令:
D:Documents and Settingshx>ping 61 152 104 40 -i 11
Pinging 61 152 104 40 with 32 bytes of data:
Reply from 61 152 104 40: bytes=32 time=10ms TTL=54
Reply from 61 152 104 40: bytes=32 time=13ms TTL=54
Reply from 61 152 104 40: bytes=32 time=10ms TTL=54
Reply from 61 152 104 40: bytes=32 time=13ms TTL=54
Ping statistics for 61 152 104 40:
Packets: Sent = 4, Received = 4, Lost = 0 0 loss ,
Approximate round trip times in milli-seconds:
Minimum = 10ms, Maximum = 13ms, Average = 11ms
D:Documents and Settingshx>
这个命令我们定义了发包的TTL 为11,而前面我们知道,我到这台服务器是要经过11个节点的,所以这个输出和以前没什么不同 现在再用这个试试看:
D:Documents and Settingshx>ping 61 152 104 40 -i 10
Pinging 61 152 104 40 with 32 bytes of data:
Reply from 61 152 99 94: TTL expired in transit
,Reply from 61 152 99 94: TTL expired in transit
Reply from 61 152 99 94: TTL expired in transit
Reply from 61 152 99 94: TTL expired in transit
Ping statistics for 61 152 104 40:
Packets: Sent = 4, Received = 4, Lost = 0 0 loss ,
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 0ms, Average = 0ms
D:Documents and Settingshx>
可以看到,结果不一样了,我定义了TTL 为10来发包,结果是TTL expired in transit 就是说在到达服务器之前这个包的生命周期就结束了 注意看这句话前面的ip ,这个ip 恰好是我们前面tracert 结果到服务器之前的最后1个ip ,包的TTL 就是在这里减少到0了,根据我们前面的讨论,当TTL 减为0时设备会丢弃包并发送一个TTL 过期的ICMP 反馈给源地址,这里的结果就是最好的证明
通过这里再次又证明了从我机器到服务器是经过了11个节点而不是70多个,呵呵
最后再巩固一下知识,有人可能觉得tracer 这个命令很神奇,可以发现一个包所经过的路由路径 其实这个命令的原理就在我们上面的讨论中
想象一下,如果我给目的服务器发送一个TTL 为1的包,结果会怎样
根据前面的讨论,在包港出发的第一个节点,TTL 就会减少为0,这时这个节点就会回应TTL 失效的反? 飧龌赜Π 松璞副旧淼膇p 地址,这样我们就得到了路由路径的第一个节点的地址
因此,我们继续发送TTL=2的包,也就受到第二个节点的TTL 失效回应
依次类推,我们一个一个的发现,当最终返回的结果不是TTL 失效而是ICMP Response的时候,我们的tracert 也就结束了,就是这么简单
顺便补一句ping 命令还有个-n 的参数指定要发包的数量,指定了这个数字就会按照你的要求来发包了而不是默认的4个包 如果使用-t 参数的话,命令会一直发包直到你强行中止它
ping 的后台执行过程
就以这样一个网络作为例子:假设有A 、B 、C 、D 四台机器,一台路由RA ,子网掩码均为255.255.255.0,默认网关是192.168.0.1。
1. 同一网段
我们来看一下在A 主机上执行“Ping 192.168.0.5”后,都发生了些什么。首先,Ping 会通知系统建立一个固定格式的ICMP 请求数据包,然后由ICMP 协议打包这个数据包和地址
,“192.168.0.5”转交给IP 层协议(一组后台运行的进程,与ICMP 类似),IP 层协议将以地址“192.168.0.5”作为目的地址,本机IP 地址作为源地址,加上一些其他的控制信息,构建一个IP 数据包,并想办法得到192.168.0.5的MAC 地址(物理地址,这是数据链路层协议构建数据链路层的传输单元——帧所必需的),以便交给数据链路层构建一个数据帧。关键就在这里,IP 层协议通过机器B 的IP 地址和自己的子网掩码,发现它跟自己属同一网络,就直接在本网络内查找这台机器的MAC ,如果以前两机有过通信,在A 机的ARP 缓存表应该有B 机IP 与其MAC 的映射关系,如果没有,就发一个ARP 请求广播,得到B 机的MAC ,一并交给数据链路层。后者构建一个数据帧,目的地址是IP 层传过来的物理地址,源地址则是本机的物理地址,还要附加上一些控制信息,依据以太网的介质访问规则,将它们传送出去。
主机B 收到这个数据帧后,先检查它的目的地址,并和本机的物理地址对比,如符合,则接收;否则丢弃。接收后检查该数据帧,将IP 数据包从帧中提取出来,交给本机的IP 层协议。同样,IP 层检查后,将有用的信息提取后交给ICMP 协议,后者处理后,马上构建一个 ICMP 应答包,发送给主机A ,其过程和主机A 发送ICMP 请求包到主机B 一模一样。
2. 不同网段
在主机A 上执行 “Ping 192.168.1.4”后,开始跟上面一样,到了怎样得到MAC 地址时,IP 协议通过计算发现D 机与自己不在同一网段内,就直接将交由路由处理,也就是将路由的MAC 取过来,至于怎样得到路由的MAC ,跟上面一样,先在ARP 缓存表找,找不到可以利用广播。路由得到这个数据帧后,再跟主机D 进行联系,如果找不到,就向主机A 返回一个超时的信息。
3、ping 结果分析
ping 的结果分两种,正常的结果,表明连接性良好,如下:
Pinging 202.105.136.105 with 32 bytes of data:
Reply from 202.105.136.105: bytes=32 time=590ms TTL=114
Reply from 202.105.136.105: bytes=32 time=590ms TTL=114
Reply from 202.105.136.105: bytes=32 time=590ms TTL=114
Reply from 202.105.136.105: bytes=32 time=601ms TTL=114
Ping statistics for 202.105.136.105:
Packets: Sent = 4, Received = 4, Lost = 0 (0 loss),
Approximate round trip times in milli-seconds:
Minimum = 590ms, Maximum = 601ms, Average = 593ms
还有就是不正常的结果,也就是说设备之间的连接性不好。这些结果有:
Request Timed Out
Destination Net Unreachable
Bad IP address
Source quench received
Unknown host
,No answer
no rout to host
transmit failed,error code:10043
unknown host name
一般我们常遇到的是前四种情况。
转载请注明自:贝贝实验室(www.bblab.cn ),谢谢合作! 《ping 命令详解、过程、结果分析》 原文地址:http://www.bblab.cn/post/151.html