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 = 65535Time precision = microseconds (6)Time ticks per second = 1000000Number of stat entries = 0Number of packets = 220File 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 = 65535Time precision = microseconds (6)Time ticks per second = 1000000Number of stat entries = 0Number 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.mzph.cn/news/149147.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows RS485\USB转换接头,连接modbus温度传感器接线方法

文章目录 背景接线方式安装RS485\USB转换接头的驱动程序查看COM口号(Communication Port(通讯端口))测试modbus数据传输 背景 买了个rs485 modbus协议的温度传感器,因为想接到windows上,用传感器厂家提供的…

Polygon Miden VM中的哈希函数对比

1. 引言 在Polygon Miden VM中,使用了多个不同的哈希函数: 1)“传统”哈希函数,如BLAKE3:对STARK之外的性能进行了优化。2)algebraic哈希函数,如Rescue Prime:对STARK内部优化&…

APP软件外包开发流程

APP外包开发的流程可以根据具体项目的特点和需求有所变化,但一般而言,以下是一个通用的APP外包开发流程,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。 1.明确需求和目标&…

asp.net校园二手交易平台系统VS开发sqlserver数据库web结构c#编程计算机网页

一、源码特点 asp.net校园二手交易平台系统 是一套完善的web设计管理系统,系统采用mvc模式(BLLDALENTITY)系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为 vs2010,数据库为sqlserver2008&a…

Kotlin学习(一)

Kotlin学习&#xff08;一&#xff09; 1.使用IDEA构建Kotlin项目 新建工程即可 我这里选择的Build System是IntelliJ&#xff0c;虽然我没用过但是这是Kotlin基础学习应该不会用到其他依赖 2.Hello World package com.simonfun main(args:Array<String>){println(&q…

UASRT(2)

UASRT参数配置 数据发送过程 1.双缓冲 当要发送三个数据 且是连续发送 第一个数据写入TDR寄存器 然后到移位寄存器发送&#xff08;一个一个bit的发送&#xff09;在第一个数据在移位寄存器发送的时候第二个数据就已经被写入TDR寄存器了等到第一个数据发送完第二个数据就进入…

jetbrains ai 提示该地区不可用的百分百解决方案,亲测有效

问题 申请 jetbrains 的 ai assistant 白名单已经通过&#xff0c;但是在使用 ai assistant 的过程中提示 The usage of the service is not permitted in your location ,我所在的地区是中国&#xff0c;目前该插件是对中国大陆关闭的。 刚开始我怀疑是代理的问题&#xff…

【STL】string类 (上) <vector>和<list>的简单使用

目录 一&#xff0c;什么是 STL 二&#xff0c;STL 的六大组件 三&#xff0c;标准库中的 string 类 1&#xff0c;string 类 2&#xff0c;string 类的常用接口 1&#xff0c;string类对象的常见构造 2&#xff0c;string&#xff08;const string& str&#xff…

OTP语音芯片 NV080D在智能空气检测仪的应用

随着人们对健康和环保的关注度不断提高&#xff0c;人们对看不见的家居环境也越来越重视。智能空气检测仪的市场需求也在不断增长中&#xff0c;呈现稳中向好的趋势。智能空气检测仪能够检测室内空气中的PM2.5、甲醛、TVOC等有害物质&#xff0c;同时还可以检测温湿度、空气质量…

5g路由器赋能园区无人配送车联网应用方案

随着人工智能、无人驾驶技术和自动化技术的不断进步&#xff0c;无人配送技术得到了极大的发展。园区内的物流配送任务通常是繁琐的&#xff0c;需要大量的人力资源和时间。无人配送技术能够提高配送效率并减少人力成本。无人配送车辆和机器人能够根据预定的路线和计划自动完成…

Rapid chain

这篇文章中提到 Elastico 运行6个epoch就会退化到公式失败率高达 0.97 omnileger 在第一个epoch需要一个初始化的随机种子&#xff0c;来初始化 VRF。这需要 O ( n 2 ) O(n^2) O(n2) 的复杂度&#xff0c;并且OminLedger 需要通过轻节点驱动枷锁和解锁的过程&#xff0c;这户家…

主键问题以及分布式 id

分布式 id 需要处理的问题主要是同一时间在多台机器中保证生成的 id 唯一&#xff0c;为了这么做我们可以这么做&#xff1a; 分布式 id 生成策略 先说几个已经被淘汰的策略引出分布式 id 的问题 1&#xff0c;UUID&#xff1a;UUID 随机并且唯一&#xff0c;在单一的数据库…

Android问题笔记四十六:解决open failed: EACCES (Permission denied) 问题

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列点击跳转>ChatGPT和AIGC &#x1f449;关于作者 专…

[算法学习笔记](超全)概率与期望

引子 先来讲个故事 话说在神奇的OI大陆上&#xff0c;有一只paper mouse 有一天&#xff0c;它去商场购物&#xff0c;正好是11.11&#xff0c;商店有活动 它很荣幸被选上给1832抽奖 在抽奖箱里&#xff0c;有3个篮蓝球&#xff0c;12个红球 paper mouse能抽3次 蒟蒻的p…

Cascade-MVSNet论文笔记

Cascade-MVSNet论文笔记 摘要1 立体匹配&#xff08;Stereo Matching&#xff09;2 多视图立体视觉&#xff08;Multi-View Stereo&#xff09;3 立体视觉和立体视觉的高分辨率输出4 代价体表达方式&#xff08;Cost volume Formulation&#xff09;4.1 多视图立体视觉的3D代价…

RT-DETR优化改进:SEAM、MultiSEAM分割物与物相互遮挡、分割小目标性能

🚀🚀🚀本文改进:SEAM、MultiSEAM分割物体与物体相互遮挡性能 🚀🚀🚀SEAM、MultiSEAM分割物与物相互遮挡、分割小目标性能 🚀🚀🚀RT-DETR改进创新专栏:http://t.csdnimg.cn/vuQTz 学姐带你学习YOLOv8,从入门到创新,轻轻松松搞定科研; RT-DETR模型创新…

数字化时代,VR全景如何助力商企抢占市场份额?

随着5G技术的逐步落地&#xff0c;VR全景已经开始逐渐被应用到各行各业中了&#xff0c;VR餐饮、VR房产、VR景区、VR工厂、VR学校、VR博物馆等等&#xff0c;甚至大家所熟悉的汽车之家中的全景看车、贝壳和链接的全景看房等&#xff0c;所应用的都是VR全景的形式。 前几年电商对…

设计模式(二)-创建者模式(2)-工厂模式

一、为何需要工厂模式&#xff08;Factory Pattern&#xff09;? 由于简单工厂模式存在一个缺点&#xff0c;如果工厂类创建的对象过多&#xff0c;使得代码变得越来越臃肿。这样导致工厂类难以扩展新实例&#xff0c;以及难以维护代码逻辑。于是在简单工厂模式的基础上&…

HTML易忽略的角落【目录】

目前已有文章 **** 篇 本专栏是汇集了一些HTML常常被遗忘的知识&#xff0c;这里算是温故而知新&#xff0c;往往这些零碎的知识点&#xff0c;在你开发中能起到炸惊效果。我们每个人都没有过目不忘&#xff0c;过久不忘的本事&#xff0c;就让这一点点知识慢慢渗透你的脑海。 …

用js切割文字,超出省略

因为项目需要,当人员超过两个事则进行超出省略,如将一个 “张三,李四,王五”,这样的字串切割成"张三,李四…" 效果: 主要用的是基础的切割法 isOutlier(text) {if (!text || text "") return;const parts text.split(","); // 使用逗号将字…