Wireshark TS | 应用传输缓慢问题

问题背景

沿用之前文章的开头说明,应用传输慢是一种比较常见的问题,慢在哪,为什么慢,有时候光从网络数据包分析方面很难回答的一清二楚,毕竟不同的技术方向专业性太强,全栈大佬只能仰望,而我们能做到的是在专注于自身的专业方向之外,尽量扩展知识面,学会找出问题的规律,并提出可能的解决建议。

本篇案例是一个应用开发团队提出的“缓慢”问题,分别在发送和接收端抓取了相关数据包,“SendSideFinal.pcap” 以及 “RcvSideFinal.pcap”,实际上部分场景下的数据包分析确实需要在多点捕获,包括发送端或者接收端,甚至于中间路径的多个节点,这样更有助于网络问题分析。

案例取自 SharkFest 2010《Wireshark in the Large Enterprise》

问题信息

跟踪文件基本信息如下:

λ capinfos SendSideFinal.pcap RcvSideFinal.pcap
File name:           SendSideFinal.pcap
File type:           Wireshark/tcpdump/... - pcap
File encapsulation:  Ethernet
File timestamp precision:  microseconds (6)
Packet size limit:   file hdr: 65535 bytes
Packet size limit:   inferred: 70 bytes
Number of packets:   220
File size:           18 kB
Data size:           46 kB
Capture duration:    95.639823 seconds
First packet time:   2009-09-11 05:24:51.255133
Last packet time:    2009-09-11 05:26:26.894956
Data byte rate:      485 bytes/s
Data bit rate:       3885 bits/s
Average packet size: 211.14 bytes
Average packet rate: 2 packets/s
SHA256:              104aeea149181060e3d3c744bb9ea4aea13c0be832e92e0852abf173df253f77
RIPEMD160:           3d5d768f175a949e818c9f1160688c8854234b59
SHA1:                1e117af53e4bbdd9b0cb3636117374a191c4ebf3
Strict time order:   True
Number of interfaces in file: 1
Interface #0 info:
                     Encapsulation = Ethernet (1 - ether)
                     Capture length = 65535
                     Time precision = microseconds (6)
                     Time ticks per second = 1000000
                     Number of stat entries = 0
                     Number of packets = 220

File name:           RcvSideFinal.pcap
File type:           Wireshark/tcpdump/... - pcap
File encapsulation:  Ethernet
File timestamp precision:  microseconds (6)
Packet size limit:   file hdr: 65535 bytes
Packet size limit:   inferred: 70 bytes
Number of packets:   213
File size:           18 kB
Data size:           45 kB
Capture duration:    91.744055 seconds
First packet time:   2009-09-11 05:24:55.248731
Last packet time:    2009-09-11 05:26:26.992786
Data byte rate:      492 bytes/s
Data bit rate:       3936 bits/s
Average packet size: 211.94 bytes
Average packet rate: 2 packets/s
SHA256:              15731bbc644d0e2c1a304ef955ec62052d7fae377d3d8a420fc566e5be819404
RIPEMD160:           d28207f0689fb74106d4d206c94cd305dd30cb2a
SHA1:                bf129e7e359676a3d2cb496a8fa7169344356c7d
Strict time order:   True
Number of interfaces in file: 1
Interface #0 info:
                     Encapsulation = Ethernet (1 - ether)
                     Capture length = 65535
                     Time precision = microseconds (6)
                     Time ticks per second = 1000000
                     Number of stat entries = 0
                     Number of packets = 213

数据包跟踪文件在 linux 上通过 tcpdump 所捕获,两端数据包数量分别为 220 和 213 个,长度截断为 70 字节。发送端文件数据大小 46k 字节,捕获时长 95.64 秒,平均速率 3885 bps,而接收端文件数据大小 45k 字节,捕获时长 91.74 秒,平均速率 3936 bps,总体来说两端信息基本匹配,确实速率很低。

专家信息如下,可以看到异常的简洁,没有 Warning 相关信息,可见传输缓慢的问题并不是常见的丢包导致重传所引起。

1.png

2.png


问题分析

首先从发送端 “SendSideFinal.pcap” 跟踪文件开始,展开数据包信息如下,可以看到数据包文件缺失 TCP 三次握手阶段的数据包,仅有数据传输 PSH/ACK 相关,最后以 RST 数据包结束。

3.png

其中 TCP 会话完整性分析中 tcp.completeness == 44 也说明了相关情况,44 = 4 + 8 + 32,其中 4 为 ACK,8 为 DATA,32 为 RST。

TCP 会话完整性分析说明详见《 Wieshark 提示和技巧 | TCP 会话完整性分析》

4.png

另从上面数据包交互来看,两端实际都有数据分段在传输,如果不是数据包文件的名字 “SendSideFinal.pcap” 以及 “RcvSideFinal.pcap”,也确实不好辨别哪个是发送端,哪个是接收端。从我个人的角度来说,定义出哪个是客户端,哪个是服务器端,以及两个文件的捕获点,可能会更加简单些。

首先因为是 TCP 传输,所以 TCP 端口 60301 和 7609 一般就可以分辨出,客户端 10.10.10.10,服务器 192.168.1.1。

其次如何判断这两个数据包跟踪文件分别是在哪里捕获的呢 ?可以通过两个字段值分析,一个 TTL,一个 ACK 间隔时间。

  • “SendSideFinal.pcap” 中 192.168.1.1 TTL 为 64,64 一般为 linux 系统的默认值,逐跳减 1 ,既然为 64,说明捕获点是在本地或是靠近本地侧(譬如上连接入交换机上),也就是在 192.168.1.1 ;

5.png

  • “SendSideFinal.pcap” 中 ACK 间隔时间,ACK 对于数据分段的确认,譬如 No.5 确认 No.4 ,以及 No.2 确认 No.1,No.11 确认 No.10,间隔时间都极短,0.1-0.2ms,相对于中间网络传输的时间很小,而如果反过来判断,很多数据包交互时间都无法说通,所以也可判断捕获点是在本地或是靠近本地侧,也就是 192.168.1.1。

6.png

也有同学也会注意 No.7 以及 No.9 的间隔时间,为什么同样是 192.168.1.1 也是 ACK,而不考虑在内?首先简单来说,就是上面提到的,如果反过来判断,现象不匹配;其次细想下,No.7 只是发送端发送数据间隔的时间,譬如像浏览网页,停顿几秒再去点击一次的间隔,综合判断下来的结论就是 “SendSideFinal.pcap” 是在服务器端 192.168.1.1 所捕获,而 “RcvSideFinal.pcap” 是在客户端 10.10.10.10 所捕获。而剩下来的一个 No.9 ,不同于绝大部分的正常传输规律,那么它就真的是属于有问题的那一个了。

“SendSideFinal.pcap” 中数据交互规律如下图,总结一番:

  • 服务器端 192.168.1.1,连续发送三次 Length 为 179 的数据帧后,再发送一个 Length 为162 的数据帧后,最后一个 ACK;(第一组未抓全)
  • 客户端 10.10.10.10,发送一次 Length 为 152 的数据帧后发送一个 ACK,连续三次后 ,再发送一个 Length 为 189 的数据帧;
  • 汇总以上,以客户端 10.10.10.10 发起,Length 为 152、179、66 的一组数据帧,连续交互三次后, 再以服务器端 192.168.1.1 所发起的 Length 162、189、66 的一组数据帧做为结束。(当然由于未捕获到最起初的数据包,此一组数据帧也可能为起始)

7.png

8.png

找到 “SendSideFinal.pcap” 数据包传输的规律后,同时再结合“RcvSideFinal.pcap”对比分析,就比较容易识别出缓慢的问题所在,慢在哪。

  • 通过数据包的 ip.id 字段,可以找到两个数据包跟踪文件中的数据包对应关系,如下;
  • 左图 No.7 请求和 No.8 响应间隔 200ms,一部分来自于 RTT,一部分来自于响应,具体是多少?通过右图对比,可以得知响应时长极短,不到 1ms,而 RTT 近乎 200ms;此后服务器端 192.168.1.1 No.9 带来第一个慢的地方,ACK 的时长为 106ms,初步判断可能是延迟确认的时间,略长。

9.png

以下仍以之前总结的数据交互规律,说明如下:

  • 以客户端 10.10.10.10 发起,Length 为 152、179、66 的一组数据帧,连续交互三次后, 再以服务器端 192.168.1.1 所发起的 Length 162、189、66 的一组数据帧做为结束;
  • 右图客户端 No.4 发起第一组 Length 为 152 的数据帧,经 RTT 后得到了服务器端 No.5 的 ACK 确认,但同样 No.6 约有 100ms 的 ACK 确认间隔,初步判断可能是延迟确认的时间,同样略长;
  • 之后第二组 Length 为 152 的 No.7 数据帧,就带来一次很大的间隔发送延迟,约 1.91s,之后同样有一个约 109ms 的 ACK 确认间隔;
  • 之后第三组 Length 为 152 的 No.10 数据帧,就又带来一次很大的间隔发送延迟,约 1.90s,之后同样有一个约 105ms 的 ACK 确认间隔;
  • 左图服务器端 No.19 最后发起 Length 为 162 的数据帧,经 RTT 后客户端收到后立马响应带有数据分段的数据帧,最后服务器端 No.21 约有 92ms 的 ACK 确认间隔。

问题总结

总结两个数据包跟踪文件的数据包交互规律以及时间分析,应用缓慢的问题主要出现在客户端 10.10.10.10 的数据请求阶段,每一次间隔基本都在 1.9s 左右,相对于如此大的延迟时间,两端基本都存在的延迟确认 100ms 左右的时间几乎都可以忽略不计了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/161285.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

前端JS 使用input完成文件上传操作,并对文件进行类型转换

使用input实现文件上传 // 定义一个用于文件上传的按钮<input type"file" name"upload1" />// accept属性用于定义允许上传的文件类型&#xff0c; onchange用于绑定文件上传之后的相应函数<input type"file" name"upload2"…

【0基础学Java第十课】-- 认识String类

10. 认识String类 10.1 String类的重要性10.2 常用方法10.2.1 字符串构造10.2.2 String对象的比较10.2.3 字符串查找10.2.4 转化10.2.5 字符串替换10.2.6 字符串拆分10.2.7 字符串截取10.2.8 字符串的不可变性10.2.9 字符串修改 10.3 StringBuilder和StringBuffer10.3.1 String…

cadence virtuoso寄生参数提取问题

问题描述&#xff1a; 寄生参数提取的最后一步出现问题 calibre View generation encountered a fatal Error.Please consult the logfile for messages. 解决办法&#xff1a; sudo gedit /etc/profile&#xff08;如果失败就切换到超级用户root&#xff0c;使用su root命令…

装修干货|卧室常见3个软装搭配问题。福州中宅装饰,福州装修

引言 作为一名软装设计师&#xff0c;我对卧室的家具及软装布置颇有心得&#xff0c;现在就给你们带来卧室装修设计一些小技巧&#xff1a; 1. 床&#xff1b;衣柜&#xff1b;床头柜的摆放 床的摆放位置非常重要&#xff0c;一般要放在离窗户稍远的地方&#xff0c;避免直接…

CV计算机视觉每日开源代码Paper with code速览-2023.11.14

点击CV计算机视觉&#xff0c;关注更多CV干货 论文已打包&#xff0c;点击进入—>下载界面 点击加入—>CV计算机视觉交流群 1.【基础网络架构&#xff1a;Transformer】Aggregate, Decompose, and Fine-Tune: A Simple Yet Effective Factor-Tuning Method for Vision…

场景交互与场景漫游-路径漫游(7)

路径漫游 按照指定的路径进行漫游对一个演示是非常重要的。在osgViewer中&#xff0c;当第一次按下小写字母“z”时&#xff0c;开始记录动画路径;待动画录制完毕&#xff0c;按下大写字母“Z”&#xff0c;保存动画路径文件;使用osgViewer读取该动画路径文件时&#xff0c;会回…

招聘小程序源码 人才招聘网源码

招聘小程序源码 人才招聘网源码 求职招聘小程序源码系统是一种基于微信小程序的招聘平台&#xff0c;它可以帮助企业和求职者快速、方便地进行招聘和求职操作。 该系统通常包括以下功能模块&#xff1a; 用户注册和登录&#xff1a;用户可以通过微信小程序注册和登录&#…

世微 降压恒流驱动IC 景观亮化洗墙灯舞台灯汽车灯LED照明 AP5199S

1. 特性 支持高辉调光&#xff0c;调光比 平均电流工作模式 高效率&#xff1a;最高可达 95% 输出电流可调范围 60mA~12A 最大工作频率 1MHz 恒流精度≤3% 支持 PWM 封装&#xff1a;SOP8 2. 应用领域 景观亮化洗墙灯 舞台调光效果灯 汽车照明 3. 说明 AP5199S…

安全框架springSecurity+Jwt+Vue-1(vue环境搭建、动态路由、动态标签页)

一、安装vue环境&#xff0c;并新建Vue项目 ①&#xff1a;安装node.js 官网(https://nodejs.org/zh-cn/) 2.安装完成之后检查下版本信息&#xff1a; ②&#xff1a;创建vue项目 1.接下来&#xff0c;我们安装vue的环境 # 安装淘宝npm npm install -g cnpm --registryhttps:/…

Mybatis学习笔记-映射文件,标签,插件

目录 概述 mybatis做了什么 原生JDBC存在什么问题 MyBatis组成部分 Mybatis工作原理 mybatis和hibernate区别 使用mybatis&#xff08;springboot&#xff09; mybatis核心-sql映射文件 基础标签说明 1.namespace&#xff0c;命名空间 2.select&#xff0c;insert&a…

TensorFlow:GPU的使用

**引言** TensorFlow 是一个由 Google 开发的开源机器学习框架&#xff0c;它提供了丰富的工具和库&#xff0c;支持开发者构建和训练各种深度学习模型。而 GPU 作为一种高性能并行计算设备&#xff0c;能够显著提升训练深度学习模型的速度&#xff0c;从而加快模型迭代和优化…

CorelDRAW2024最新版本的图形设计软件

CorelDRAW2024是Corel公司推出的最新版本的图形设计软件。CorelDRAW是一款功能强大的矢量图形编辑工具&#xff0c;被广泛用于图形设计、插图、页面布局、照片编辑和网页设计等领域。 1. 新增的设计工具&#xff1a;CorelDRAW 2024引入了一些全新的设计工具&#xff0c;使用户能…

Web(5)Burpsuite之文件上传漏洞

1.搭建网站&#xff1a;为网站设置没有用过的端口号 2.中国蚁剑软件的使用 通过一句话木马获得权限 3.形象的比喻&#xff08;风筝&#xff09; 4.实验操作 参考文章&#xff1a; 文件上传之黑名单绕过_文件上传黑名单绕过_pigzlfa的博客-CSDN博客 后端验证特性 与 Window…

再也不用担心忘记密码了!如何在Windows 10或11中重置被遗忘的密码

​如果你忘记了Windows电脑的密码,不要惊慌。Windows 10和Windows 11都允许你重置忘记的密码,无论你使用的是Microsoft帐户还是本地帐户。你所要做的就是回答你的安全问题以重置密码。另一种选择是创建一个密码重置盘,你可以在任何U盘上进行。 除了使用密码之外,你还应该启…

【MySQL】索引与事务

作者主页&#xff1a;paper jie_博客 本文作者&#xff1a;大家好&#xff0c;我是paper jie&#xff0c;感谢你阅读本文&#xff0c;欢迎一建三连哦。 本文录入于《MySQL》专栏&#xff0c;本专栏是针对于大学生&#xff0c;编程小白精心打造的。笔者用重金(时间和精力)打造&a…

前端Vue拖拽功能

文章目录 安装使用 直接复制粘贴即可页面使用 直接复制粘贴即可小结&#xff08;带有效果图&#xff09; 安装 提示&#xff1a;首先您需要安装它&#xff0c;命令如下&#xff1a; npm install awe-dnd --save使用 直接复制粘贴即可 在mian.js文件中引入 //main.jsimport V…

【数据库】数据库连接池导致系统吞吐量上不去-复盘

在实际的开发中&#xff0c;我们会使用数据库连接池&#xff0c;但是如果不能很好的理解其中的含义&#xff0c;那么就可以出现生产事故。 HikariPool-1 - Connection is not available, request timed out after 30001ms.当系统的调用量上去&#xff0c;就出现大量这样的连接…

市级奖项+1,持安获「创业北京」创业创新大赛优秀奖!

2274个创业项目参赛 历经五个多月的激烈角逐 第六届“创业北京”创业创新大赛 终于圆满落下帷幕 持安科技在北京市总决赛中再创佳绩&#xff01; 荣获制造业赛道优秀奖 本次大赛由北京市人力资源和社会保障局、北京市发展和改革委员会等11家单位联合主办&#xff0c;以“创…

代码示例:基于JAX-WS和JAXB,其中http请求和响应的报文体都是xml数据

说明 基于JAX-WS编写了RESTful的web服务端点。 http请求和响应的报文体都是xml数据&#xff0c;服务端分别对应了用JAXB注解的请求和响应类。 只实现了服务端的代码示例 客户端使用了Postman 示例 要实现的目标&#xff1a;http请求和响应报文体的xml数据 http请求报文体的…

c语言免杀火绒

文章目录 前记c加载器补充知识 前记 pyinstaller pyinstaller目前已经被杀疯了&#xff0c;简单打包一个hello a"hello" print(a)#pyinstaller -F -w b.py -n HipsMain.exe考虑Nuitka pip uninstall nuitka pip install nuitka pip install nuitka1.8.5 这里最新…
最新文章