问题描述
一、现网OSN3500设备ping测试结果:
1、EFT8----EFT8单板2M通道可以ping通64000的数据包
2、EFT8A----EFT8单板10M通道可以ping通22000的数据包
3、EFT8A----EFT8单板20M通道可以ping通25100的数据包
4、EFT8A----EFT8单板42M通道可以ping通36000的数据包
二、由于EFT8----EFT8单板2M通道可以ping通64000的数据包,而EFT8A----EFT8单板42M通道才能ping通36000的数据包,怀疑EFT8A单板的性能有问题。
处理过程
一、增加带宽ping测试
结果:
1、EFT8A----EFT8单板10M通道可以ping通22000的数据包
2、EFT8A----EFT8单板20M通道可以ping通25100的数据包
3、EFT8A----EFT8单板42M通道可以ping通36000的数据包
二、更换缓存更大的单板ping测试
结果:EFT8----EFT8单板2M通道可以ping通64000的数据包
根因
一、首先,分析PCping大包的过程,PC机最长能够ping65500字节,而PC的MTU值缺省为1500字节,所以ping超过1500的报文就需要分片,那么22000字节的包大概要分多少片呢?22000/1500=14.6,也就是说如果用PCping22000字节的报文,PC会把报文分成15份发出来。
二、使用IP地址为10.169.54.135的PCping另外一台IP为10.169.46.112的PC,在ping的过程中进行抓包,发现实际情况和上面计算结果是一致的,电脑一共发送了15分片,其中14个分片长度是1514(每个分片都需要包含包头内容),1个分片长度1322(切成15片后有一个分片不足1500长度)。
三、查看抓包结果中报文的发送时间,第一个分片发出的时间是2015-04-1420:03:48.251111,最后一个分片发出的时间是2015-04-1420:03:48.255325,时间差是0.004214秒,15个分片的数据量:1514*14+1322*1=22518(这里PC实际发出来的数据大于ping的22000是因为每个分片都需要加上包头,所以实际的数据就要比ping的大,而且包长越长分片就越多,多出来的数据越多。)
四、那么这个时间内pcping包的发送速率就可以计算出来了:22518*8/0.004214=42.748Mbit/s.可以看到ping大包造成的突发是很严重的,虽然仅仅只是ping了一个22000字节的包,但PC在4ms的时间就把这些分片全部发送出来,导致瞬间的突发流量就达到了42.7M左右,而此时我们的带宽只有10M,带宽远远小于突发流量,所以这时候需要把暂时发送不出去的数据放到单板的缓存稍后发送,如果单板缓存不足就可能导致丢包,表现出来的现象就是ping不通。
五、这种情况下要多大的缓存才够呢?从上面的数据可以知道,我们需要在0.004214秒内把22518*8=180,144bit数据转发出去,但是我们的带宽只有10Mbit/s,所以在0.004214秒内能转发出去的数据0.004214*10000000bit=42140bit,还剩下180144bit-42140bit=138,004bit=17.250KB。而我们的N2EFT8A单板的端口缓存只有20KB(N1EFT8缓存是64KB),所以刚好够22000的报文通过(实际测试此时也是刚好可以通过的,但是再大就不行了),如果报文长度进一步增加就可能导致缓存不够丢包。
解决方案
一、在传输对接的设备(交换机)上配置shaping流量整形功能,确保进入传输的流量平稳无突发。
二、更换缓存更大的单板、增加带宽(不推荐)。
建议与总结
一、数据单板都是刚性管道,没有任何弹性,任何时刻只要流量超过带宽就只能丢弃。而且传输就像高速公路主要是用于转发大流量数据,而不是存储,所以高速公路只会设计有限的应急停车道(缓存),所以遇到突发的问题需要从源头消除突发,而不是依靠不断加大传输缓存来解决问题。所以使用PCping大包的测试方法是不可靠的,要验证一个刚性管道是否能提供标称的带宽需要使用专业的仪表来验证(如仪表:SmartBits)。
二、在实际的网络中可能由于数据源的原因(比如发送大包),经过传输的大包被数据源分片,导致流量有较大波动形成突发导致瞬间流量超过传输带宽引起业务丢包,此时只要有一个分片丢失就会造成接收端整个大包无法重组,表现为ping大包不通。如果现网存在这种大包突发场景,建议在和传输对接的设备(交换机)上配置shaping流量整形功能,确保进入传输的流量平稳无突发,或者更换缓存更大的单板(不推荐)。