1、问题描述

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

场景图如下

2、数据下载测试

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

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

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

结果:失败

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

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

结果:失败

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

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

结果:成功

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

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

结果:成功

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

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

结果:成功

分析:

  • 应用服务器->深圳采集机,数据传输不正常,出现"stalled"情况
  • 应用服务器->河源采集机 数据传输正常,耗时1秒
  • 深圳采集机->应用服务器 数据传输正常,耗时10秒
  • 河源采集机->深圳采集机 数据传输正常,耗时4秒

从以上得出结论

  • 排除采集机MQ的问题----使用scp和ftp工具都出现相同的问题
  • 排除应用服务器应用的问题-----深圳采集机传输到应用服务器正常
  • 排除深圳采集机服务器问题----河源采集机传数据到深圳采集机正常

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

3、ping测试

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

3.1、在深圳采集机上对应用服务器发起大包ping--超过1486byte就ping不成功

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

ping -s 2000 120.83.3.10 -c 1

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

上图解析:

  • 采集机到达应用服务器的大包拆成了2个帧,分别是1514和562
  • 应用服务器按道理应该返回相同的数据量,但是只收到了一个562的帧,有一个1514的包在途中丢失了

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

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

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

3.2、在河源采集机上对应用服务器发起大包ping--可以ping成功

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

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

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

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

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

1和2的分析汇总

  • 当包大小超过1476byte的时候,会拆分为多个数据包发送出去
  • 应用服务器能收到两个地市传过来的ICMP请求数据包
  • 河源发起ping大包测试的时候收到应用服务器返回的数据包有两个
  • 深圳发起ping大包测试的时候收到应用服务器返回的数据包只有一个,有一个length为1514byte的包从应用服务器返回的途中丢失了

结论分析:

  • 应用服务器(solaris) 回应ping的request(即reply)的时候大包(2000byte)分成了两个数据包,数据包的flags字段不允许分段(0X02)
  • 中间的网络中的一个端口的MTU值小于1500,导致包(length为1514的包)直接丢失

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

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

还是2000byte的测试包

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

应用服务器抓包结果

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

应用服务器抓包结果

再进一步情况汇总:

  • 从应用服务器上是可以ping通深圳采集机和河源采集机的(因为应用服务器的request包flags字段为0X01:允许分段
  • 通过在深圳采集机上和河源采集机上的抓包对比,也可以发现从应用服务器至河源采集机的包划分为了3个数据帧,最大的一个数据帧length为1506,很明显小于1514,少了8Byte,而且多了一个60Byte的帧

结论分析:

  • 应用服务器主动发起的包允许分段
  • 应用服务器->深圳采集机的包分成了三个数据帧,1514分成了1506和8,为什么拆分了8字节的数据出来,分析是中间经过一个MPLS网络,加了8字节的载荷
  • 从上一条结论延伸下:ICMP包的载荷是52(很明显60-8=52),IPv4包的载荷是24(很明显:1514-(2000-(562-52))=24),但是为什么一个2000字节的包切割为一个IPv4和一个ICMP的包?

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

4、最终原因分析

  • 服务器返回的包不允许分片是其中一个原因
  • 中间经过mpls组网架构的网络,会加上两个标签(8字节)的mpls包头。通过以上针对ping大包、scp数据下载不了的分析,刚开始判断路径中有一台设备的端口的MTU值为1492,后来深圳检查了深圳侧的设备,各个端口的MTU值为1500。我估计是我们设备通往深圳的的采集机路径中经过一个mpls组网架构的网络,在这个网络的的入口侧pe会给数据包打上两个标签(每个标签4字节),这样数据包的大小就会大过1500,端口直接把包给丢弃。

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

5、解决办法

有三种解决方法

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

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

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

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

转载于:https://www.cnblogs.com/fuqu/p/9998461.html

一个ping大包不通问题的解决过程相关推荐

  1. 一个图文混排问题的解决过程

    需求如所示:左边的是效果图,右边的是完成后的图                 具体需求描述:用户的回复一条就是一个cell,字数不定.当存在某种条件时,需要在文字(可能换行)的最后一个字后面添加一个 ...

  2. QQ可以上网 浏览器打不开网站 ping ip通,ping 域名不通,终极解决办法!

    昨天晚上用360杀毒,设置模式杀完毒自动关机,然后就和同事去了小酒馆,今天早上打开电脑,由于手头的工作比较棘手,首先打开QQ正常登陆,我没有在意,最近工作上想用个表格识别,我自己做的识别不能识别出表格 ...

  3. 查看网络情况 ping 大包 和 tracert 、 traceroute

    2019独角兽企业重金招聘Python工程师标准>>> 严禁Ping入侵作为大多数防火墙的一个基本功能提供给用户进行选择. Linux下Ping包的默认大小为64Byte,次数不限. ...

  4. 单向能ping通,反向不通故障解决过程

    一天,有同事反馈,她的测试机房的pc192.168.206.221无法ping通楼下办公区域的pc192.168.207.54,跨网段,回显time out,但楼下的207.54能ping通206.2 ...

  5. git 无法拉取项目,本地ping不通github的解决办法(详解)

    一.遇到的问题 本地在从github上拉取项目的时候,一直卡着,然后过个2分钟就报错,连接超时.问题是我前几天还能git pull项目呢,百思不得其解.后来本地浏览器访问github,得,连全世界最大 ...

  6. ping回显请求超时time out故障解决过程

    一天,一个新同事找来,说要跨网段调测一个sip注册语音设备,测试网络互通性发现不行,现象是公司局域网的205网段192.168.205.0/24的pc去ping209网段192.168.209.0/2 ...

  7. 虚拟接口+tx+linux,Linux使用笔记: 解决Xen虚拟机中VLAN接口不能ping大包的问题

    出于调试的需要,想在两个Xen虚拟机间使用VLAN相互访问.在Linux上启用VLAN非常简单,只需要使用命令vconfig配置一个VLAN接口就可以了: vconfig add eth0 3 ifc ...

  8. 超详细虚拟机与主机网络连接以及互Ping不通问题的解决

    关于虚拟机与主机网络连接以及互Ping不通问题的解决 一.问题 先说一下我之前遇到的问题有哪些 ①主机与虚拟机互ping不通: ②虚拟机无法连接网络:[注]虚拟机上我安装的CentOS 7 ③虚拟机可 ...

  9. 计算机ping不通dns,电脑不能上网但是可以Ping通和DNS解析解决办法是什么

    人们使用电脑时候最不想看到的事情之一就是上不了网了,无论是工作还是玩游戏时候都很不爽.有用户不能正常打开QQ,况且360 开机显示的时间也没出现,打开网页不能上网,换IP,换DNS,关机重启...能用 ...

最新文章

  1. 基于固态激光雷达Livox的建图与定位系统!提供Docker自测!
  2. 进程间数据传递:Queue,Pipe 进程间数据共享:Manager
  3. Android技术点增长 - 收藏集 - 掘金
  4. mysql 问号作用_什么是MySQL中的问号的意义“WHERE column =?”?
  5. ccna学习指南笔记9
  6. 多线程:了解一下ForkJoin、FutureTask、BlockingQueue
  7. java 模块化_Java模块化方法–模块,模块,模块
  8. 【剑指offer】_06 变态跳台阶
  9. 库存商品表html源码,JSP+Servlet+数据库的方式完成一个简易的库存商品管理系统...
  10. Android逆向笔记-使用Android Studio调试Smali代码(方式一)
  11. 《学习OpenCV》课后习题解答(第四章)(仅供参考)(不断更新)
  12. 【BZOJ2456】mode(主元素问题)
  13. presto 正则提取函数
  14. 网站性能提高之国外空间
  15. 现实感:找准定位,躬身前行
  16. 与商业经济有关的英语电影推荐:商学院学生必看的20部电影(图文)
  17. 阿里云服务器安装mongodb
  18. 一秒解决笔记本无法连接网络问题——解决笔记本插网线,显示未识别网络。
  19. 自动化冒烟测试:Unittest vs Pytest框架
  20. 互动媒体作业一——动态图形临摹

热门文章

  1. 获取视频位置信息的方法
  2. 在线监控机房内的UPS电源及运行环境,解决方案来了
  3. map集合转为JSON字符串
  4. 柜台无小事, 麒麟信安云高效保障金融服务
  5. 优雅地解决 WSL 开栈问题
  6. mac m1 sourcetree安装
  7. java 调用 libsvm_libsvm java 调用说明
  8. 5W2H法~让思维更缜密
  9. 关于链表,看这一篇就够了!(新手入门)
  10. hive 中的case when嵌套与if用法实战