一、ping要不丢包,需要满足的条件
1.源主机发送icmp request要到达目标主机
2.目标主机要接受并响应(比如防火墙或策略不能过滤掉)
3.目标主机发达icmp reply 要到达源主机 (这一步很多不懂的人常常会忽略掉)
4.数据包往返整个过程的时长不能超过源主机设定的icmp超时时间(比如linux系统默认是1s,windonws好像是5s 。linux ping 可以用-w指定超时时间)
ping是一个双向过程,ping不通时,排查也应该是双向的。
网络如果不做特殊策略,两端主机都只是单IP并且都不做过滤,那么如果主机A能ping通主机B,主机B就能ping通主机A,并且如果有丢包的话,丢包率应该是一致的。
二、几种常见的导致丢包的情况
1.网络拥塞导到icmp包被丢弃
运营商内部的骨干网带宽跑满一般是由于负载的多条链路中有一条/多条因为某些原因断开了,导致流量只能走到其它的链路上,从而产生拥塞。
机房的拥塞除了和上面一样的原因外,还有可能是机房购买的带宽不够,超卖导致(比如为了节省成本而错峰)。或者机房受攻击导致带宽被占满。
当出现网络拥塞时,路由器/交换机会先把数据缓存进来,等不拥塞再发。但路由器/交换机的缓存是非常有限的,当缓存空间不够时,后面来的数据包就只能直接被丢弃(假设不专门做QoS)
2.光纤链路产生error包(CRC错误)
由于光模块没插好或光模块、光纤有问题导致电压较低或不稳定,出现一定概率的传输出错。从微观角度上看,就比如是某一高电平被识别成低电平(传输的是0,被识别成1)。而数据包实际上就是很多的0和1组成的。数据包传输过程中只要有一位出错了,整个数据包的CRC较验就出错,从而被丢弃。
3.延迟过大导致icmp reply到达时已超过时间
这种情况比较少出现,因为linux系统ping的默认超时时间为1s,而从华南ping到东北的延迟正常情况下也在100ms以内。但也不是完全不会出现,比如跨国的ping。或者ping的不是主机,而是路由器/交换机(比如华为的设备一般会有一些保护,有可能会延迟响应导致时间超过1s)
4.交换机/路由器设置了限速或过滤策略。
这种情况比较少出现,极少数情况下机房会设置。(误设置)
5.出现环路
由于运营商路由设置出问题导致环路,可以通过traceroute命令看到有几跳一直重复出现。
6. 交换机/路由器设备性能瓶颈
三、ping参数的影响
1.-i参数 包间隔
如果是ping服务器,那么当带宽足够大时-i参数不会影响丢包率。
如果ping交换机/路由器,由于部分设备做了防护,ping的频率高时就不响应,会影响丢包率。目前我们ping服务器的间隔一般为0.01s,而ping交换机/路由器 (准备确地说是mtr)间隔为0.1s
注:mtr和ping还是有区别的,mtr是利用数据包的ttl值减到0时返回数据。
2.-s参数 包大小
从第二点提到的几种丢包情况看,
(1)在网络持续拥塞情况下,大包和小包的丢包率应该是差不多的。但如果是轻度拥塞,则有可能大包的丢包率大于小包,因为ping同样数量的包,大包要占用的带宽大于小包占用的带宽。
(2)在有CRC错误的情况下,假设每传输第十万位就有一位出错,那么连续ping一百个1024字节的大包出现错误的个数:
1024*8*100/100000
而连续ping一百个64字节的小包出现的错误的个数:
64*8*100/100000
也即可以看出在有CRC错误的情况下,丢包率和包大小成正比。
(3)延迟过大的丢包,包大小不影响丢包率。
(4)限速的情况下,和上面的情况(1)类似。
(5)出现环路,丢包率一般都是100%,除非是有多条链路负载。但包大小不影响丢包率。
(6)交换机/路由器设备瓶颈导致丢包,包大小不影响丢包率。
另外,正如前面所说的很多路交器/交换机做了icmp包保,对ping大包不做影响或产分响应,会导致丢包率高于小包。
原文出自:
http://blog.too2.net/?p=287
转载请注明转自:辛碌力成【http://blog.too2.net】
发表评论