一个ping大包不通问题的解决过程

时间:2018-11-22 01:24:08   收藏:0   阅读:690

一、问题描述

存在问题: 深圳的采集机MQ程序无法与应用服务器进行通讯,表现为:获取小数据时正常,获取大数据时超时

场景图如下

技术分享图片

存在问题:

二、数据下载测试

使用SCP工具和FTP工具进行数据下载测试,主要是想排除采集机上MQ与应用服务器上应用的问题

1、在深圳采集机1上执行命令从应用服务器取数据

数据走向:应用服务器->深圳采集机1

结果:失败

技术分享图片

2、在深圳采集机2上执行命令从应用服务器取数据

数据走向:应用服务器->深圳采集机2

结果:失败

技术分享图片

3、在河源采集机上执行命令从应用服务器取数据

数据走向:应用服务器->河源采集机

结果:成功

技术分享图片

4、在深圳采集机1上执行命令把数据传到应用服务器

数据走向:深圳采集机1->应用服务器

结果:成功

技术分享图片

5、在深圳采集机1上执行命令从河源采集机取数据

数据走向:河源采集机->深圳采集机1

结果:成功

技术分享图片

分析:

从以上得出结论

通过这些测试,感觉到是中间网络的问题,但是仔细想想,又好像不对,应用服务器->深圳采集机方向就有问题,深圳采集机->应用服务器就没问题,结合出现问题的现象:获取小数据时正常,获取大数据时超时,于是接下来进行ping大包数据测试

三、ping测试

同时,我也发现一个现象,从深圳采集机1上去ping应用服务器大包,超过1468byte后就不通了,在别的十多个地市采集机测试,同样的包大小都能通,于是我尝试在深圳和河源两个地市进行ping然后在两端抓包分析,进行对比

1、在深圳采集机上发起大包ping--超过1486byte就ping不成功

发起一个2000Byte字节大小的包测试。注:此处的120.83.3.10是应用服务器的另一个IP地址

ping -s 2000 120.83.3.10 -c 1

在深圳采集机上1的抓包结果为如下:有三个帧,两个为去的,一个为返回的,有一个途中丢失了(结合下面在应用服务器收到了两个帧,可分析出一个帧从应用服务器到采集机的途中丢失了)

技术分享图片

上图解析:

注:因为链路层的MTU值为1500,所以包要拆分为两个帧,MTU为1500的时候对应的length为1514

技术分享图片

在应用服务器上的抓包结果为:收到了深圳采集机过来的2个帧

技术分享图片

仔细分析应用服务器到采集机这个包的内容:里面的一个字段为flags为:0x02(Don’t Fragment),引起了我的注意

技术分享图片

2、在河源采集机上发起大包ping--可以ping成功

河源采集机上的抓包结果为(这里有4个数据包,两个为去的,两个为返回的)

技术分享图片

应用服务器这边的抓包结果为:成功收到采集机发过来的两个帧

技术分享图片

也仔细分析应用服务器到河源采集机这两个包的内容:里面的一个字段为flags:分别是0X03和0X02

技术分享图片

技术分享图片

上网查找tcp/ip的协议的相关细节,原来这这个字段的值和含义如下:

用于标识数据帧分片是否发送完成,0X01代表“别着急,后面还有!”;0X00表示“好了,我是最后一个帧,所有帧都到齐了,你可以进行组装了”。除此 之外,Flags字段还有一种可能就是0X02,表示该IP数据包不允许进行拆分,这时如果IP数据包长度大于链路MTU值,就会直接丢包。还有一种情况为0X03,表示不允许拆分,后面还有分片

1和2的分析汇总

结论分析:

为了进一步验证是不是这样,从应用服务器发起对深圳采集机和河源采集机的ping情况

3、应用服务器发起对深圳采集机和河源采集机的ping大包--都能ping成功

还是2000byte的测试包

深圳采集机的抓包结果:注意此处,到深圳采集机竟然分成了三个帧?为什么

技术分享图片

应用服务器抓包结果

技术分享图片

河源采集机的抓包结果,注意此处,到河源采集机两个帧

技术分享图片

应用服务器抓包结果

技术分享图片

再进一步情况汇总:

结论分析:

回到那个scp传输数据有误的问题,进行抓包,发现各个数据包中的flags字段为0X02,也是不允许进行拆分包,所以传输有问题。

技术分享图片

三、最终原因分析

所以出现ping大包不通现象,同时也是导致采集程序无法与应用服务器通讯的原因。

四、解决方法

有三种解决方法

1、修改操作系统的限制,允许分片

2、排查应用服务器至深圳采集机服务器通过的mpls网络节点路径的进出端口,修改这些接口的MTU值为1508以上

3、修改应用服务器的网卡的MTU值为1492(因为中间多了8Byte的数据,从源端分片的时候预留这8Byte就行啦,目前采用了这种解决方法)

存在风险: 对于一个基于网络的应用来讲,如果应用穿过网络的MTU与网络上的最小MTU相等,那么应用穿过网络的效率最高,原因是有效的避免了分片和重组。MTU从1500降到1492,在数据传输的效率上会有影响,但很小。

原文:https://www.cnblogs.com/fuqu/p/9998461.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!