Ping命令是一种用来测试ip层网络层可达的命令,属于icmp层的探查消息。当网络访问出现故障时,用来执行测试网络导通性,根据ping的结果回显来判断问题可能在哪里?
ping命令发出包是icmp协议的查询消息,路由正常导通时为双向消息,有发出requst的,有回复reply的。但有时也会出现ping命令发出,收到差错消息,这是后向单向消息,告知发送requset的源主机,通信节点故障。也会出现ping的rquest消息发出后,没有收到reply而定时器超时,显示请求超时的情况。
Ping命令正常导通情况下是icmp协议下的双向消息,通常主叫发出一串测试包,并携带对应id和序号,被测试方收到后送回对应这串测试包,并携带正确的id和序号。它是网络导通性的充分条件,能ping通,网络导通性肯定好。反之,ping不通(如请求超时)并不意味着网络不可达,有时,ping不通,但tcp和udp访问是正常的。另外返回时间和丢失包数也能反应经过路径的长短,和通信质量是否拥堵?如平时往返时间是20ms,但现在是100ms,明显有问题,要么发出慢,要么目标主机回复的慢,要么request或reply在传输经过节点造成传输延迟。
注意这里wireshark里显示的BE和LE为两种数据存储的方式时的值,实际的值只有一个。物理上对应一段数据。
Request消息如上图:
icmp层的data里封装一串字符串通常是32byte,发给对方ip。
Reply消息如下:
同样下一个request消息id不变,序号递增,默认cmd下是执行一次命令,ping的request消息发出四次,seq是连续的,步长是+1。
data里含有request里data里的数据,收发对照id,序号,data一致,就认为正常。
Ping的正常是结果回显内容:
回显一次ping的请求回显的结果三种,1正常,2不通(icmp错误,有原因值),3不通请求超时,导通时,里面有目的主机发出reply消息到达源主机时ttl值(能反映出经过路由次数),收发包数发出和收到的统计。往返的时间。通过往返时间可以看出网络传输经过节点书,传输质量,发送,接收包数判断是否拥堵丢失?
有错误原因的结果:
请求超时的回显
也有情况是在一次ping命令过程四次回显中,有的正常, 有的有错误或者请求超时,或者错误和超时的显示。会回显统计丢包。如下图:
上图是过程中有丢包的情况。下图:是双网卡,先走直连路由,后走默认路由的情况。
Ping的过程,对源主机来说,是执行命令后,分析目的主机ip,查路由表,确定ip层消息发出的接口和下一跳ip地址,确定是直连路由还是走默认路由,然后查arp缓存,是否有下一跳的mac地址缓存,有的话,直接组包发出,没有的话,要根据走直连路由还是默认路由来判断,直连路由,直接用自身接口ip发出arp消息去请求目的ip的mac地址,走默认路由就去请求网关的mac地址,得到arp响应后,组包发出,没有得到arp响应就回显错误。
获得下一跳mac地址后,就发出ping的请求消息,直连路由和默认路由是有区别的,直连路由,ping的request发出后就两种结果,正常回包和time out请求超时。
而默认路由会有三种结果,正常回包,time out请求超时,和各种icmp层错误。原因是直连路由是对方设备直接处理ping的requst消息,而默认路由是由网关进行转发ping的reuest消息,中间节点和目的主机的路由,是否在线等等情况,会影响ping的结果。
Ping的request被对方设备icmp层接收后,回包的过程和ping的request消息发出过程一样,检查路由,检查arp缓存,发出ping的reply消息。
源主机ping命令的处理过程:
cmd下ping会显示四次结果,不通情况下最多发出12次arp消息,每次一秒, time out的定时器是5s。
目标设备收到ping的request回reply的流程如下:
目的ip的网关处理ping的request消息如下:
可以看到,是否回reply与目的主机的状态,位置,防火墙,是否有回程路由表项,反向路由检测有关系。
ping [-t] [-a] [-n count] [-l size] [-f] [-i TTL] [-v TOS] [-r count] [-s count] [[-j host-list] | [-k host-list]] [-w timeout] [-R] [-S srcaddr] [-4] [-6] target_name
ping选项目的域名或者ip地址选项可以在最后,也可以在地址前面
-t Ping指定的计算机直到中断,就是长ping,除非ctrl+c中断
-a将地址解析为计算机名 很少能成功
-n count发送count指定的发出request数据包数。默认值为4。
-l length发送包含由length指定发出ping的request消息的附加内容的字节数
-f在数据包中发送"不要分段"标志。数据包就不会被路由上的网关分段。
-i ttl将发出request消息ip层ttl值"生存时间"字段设置指定的值
-v tos将"服务类型"字段设置为tos指定的值。
-r count在ip层选项里增加"记录路由"字段中记录传出和返回数据包的路由
-s count指定count指定的跃点数的时间戳。
-j computer-list利用computer-list指定的计算机列表路由数据包。连续计算机可以被中间网关分隔(路由稀疏源)IP允许的最大数量为9。
-k computer-list利用computer-list指定的计算机列表路由数据包。连续计算机不能被中间网关分隔(路由严格源)IP允许的最大数量为9。
-w timeout指定超时间隔,单位为毫秒。就是等待ping的reply的定时器时长,默认是5s。
Target_name指定要ping的远程计算机的域名或者ip地址
具体常用选项说明:
-t Ping指定的计算机直到中断,就是长ping,除非ctrl+c中断
默认是ping的去request消息发出4次,但有的特殊场景下需要一直发包,这时,就需要-t选项了。排除故障,要在目的方看收发包情况,可以用这个命令。
-n选项 -n后面跟数字,表示发出ping的request的个数,默认间隔是一秒一个,就是定次数显示ping结果时,可以执行这个命令。
-l length发送包含由length指定发出ping的request消息的附加内容data的字节数,就是icmp层里data的字节数,一般mtu是1500字节,大于这个要进行分片。应用场景是当测试节点处理能力或者时,可以使用这个选项。
ping 192.168.205.64 -l 4000为例,除去协议包头,就是data里净数据含量了
抓包看发出分片为三包,第一片里1480字节,data里总和为4000
-w timeout指定超时间隔,单位为毫秒。就是等待ping的reply的定时器时长,默认是5s。
查看wireshark里表现:
判断网络故障的,就看ping的结果回显,根据回显我们判断可能的原因。
Ping回显的三种情况,正常导通,回显错误,和请求超时。其中回显错误提示,又分ping的request消息发出,和没有发出。
这是我们关心一下reply的ttl,因为直连路由的ttl值64,128.255这三种的一种,走默认路由的经过一个路由器值减一。ping结果里有统计reply的最小时间,最大时间和平均时间,根据这些判断是否经过节点拥塞。一般局域网网内,不超过1ms,广域网ip不超过100ms,若出现几百甚至秒以上的回包,说明节点或者目标设备网络拥塞验证或者有突发包影响。
如上图中没有对应的路由表项,没有可用线路时,显示传输失败。
如自身ip192.168.205.201,去ping192.168.205.3,这样显示肯定目的ip匹配直连路由。用自身ip发出了arp请求,但没有得到响应。
arp发出没有得到响应。
1、目的设备没有开机,或者开机但没有接入对应的广播域,导致arp查询消息没有得到应答。
2、目的ip不存在。
3、源设备本身路由错误,没有对应访问的路由。这种情况是所有网卡状态down,没有任何直连路由和默认路由的情况。
4、源设备自身路由错误(如自身ip的掩码配置错误),应该走默认网关的ping消息,认为是同一网段,发出arp查询消息,在广播域里没到得到应答。
无法访问目的主机,是icmp的错误消息,由网络节点发出,直连路由的网络节点是发出ping动作的设备自身ip地址。跨网段是经过的网络节点用正常时ip导通时的ip地址回icmp错误消息。
这种情况一般是走默认路由的情况,ping的request已经发出,常见错误有以下几种:
目的主机不可达 destnation host unreachable 目的网络中找不到目的主机,目的网关arp查询目的主机请求没有得到广播域范围内响应。
目的网络不可达 destnation network unreachable 经过节点没有路由可达,或者经过节点设备存在acl拦截
传输失败,一般错误 transmit failed. General failure 源设备中没有默认路由
ttl传输中过期 ttl exceeded 目标ip网段在经过的节点环境中存在路由环路
在规定时间没有收到request的reply消息,显示超时,一般定时器为5秒。
超时可能的原因:
a、检查一下目的设备的防火墙是否开启,是否拦截了ping的请求消息,导致高层收不到而没有回reply消息?
b、检查经过节点的路由是否正确是否送到错误地方?或者目的设备是否有回程路由。
c、回程路由的硬件网卡出口和ping的request的入口网卡不是同一个?
d、交换机vlan对应的接口全部down了,导致vlan状态down,vlan的对应路由没有生成。导致节点从路由器wan口发包到公网上去,而没有回包导致time out请求超时?
e、还有极端情况就是跨网段,环境中有突发性大包,超出某一个节点的传输最大速率,造成转发端口丢弃大量的包。现象会出现时通时断,某一段时间ping显示time out请求超时。这种情况可以查看交换机的收发情况,是否有大量丢弃的包。如有查找源头处理。
可能原因:
1、源设备环境存在路由错误,或者下一跳ip冲突,导致一些包发给错误地方。
2、目的网络回程路由或者经过节点存在路由或者下一跳错误。
3、传输路径上质量不好,丢失一部分包,或者经过节点设备有突发流量,丢弃一些包。
出现这种情况,就在源和目的同时抓包,开启长ping -t命令,比对ping的消息的序号看看丢了那些?目的设备是否收到,是否正常回包,然后检查对应序号包的目的mac地址,是否错误?若丢在节点,就逐级镜像,确定丢在哪一级?并检查相应问题。