Wireshark TS | 再谈应用传输缓慢问题

问题背景

来自于朋友分享的一个案例,某某客户反馈电脑应用软件使用时打开很慢,并提供了一个慢时所捕获的数据包文件以及服务端 IP。以前也说过,所谓的慢有很多种现象,也会有很多原因引起,在没有更多输入条件的情况下,拿到一个数据包捕获文件,如何判断分析,包括一些个人的习惯或者经验,就此简单记录下。

问题信息

数据包跟踪文件信息主要如下:

λ capinfos 0918.pcapng
File name:           0918.pcapng
File type:           Wireshark/... - pcapng
File encapsulation:  Ethernet
File timestamp precision:  microseconds (6)
Packet size limit:   file hdr: (not set)
Number of packets:   8976
File size:           7217 kB
Data size:           6913 kB
Capture duration:    246.083460 seconds
First packet time:   2023-xx-xx 11:06:48.091668
Last packet time:    2023-xx-xx 11:10:54.175128
Data byte rate:      28 kBps
Data bit rate:       224 kbps
Average packet size: 770.19 bytes
Average packet rate: 36 packets/s
SHA256:              xxxxx
RIPEMD160:           xxx
SHA1:                xxx
Strict time order:   True
Capture hardware:    Intel(R) Pentium(R) CPU G3260 xxx
Capture oper-sys:    64-bit Windows 7 Service Pack 1, build xxx
Capture application: Dumpcap (Wireshark) 3.0.0 (v3.0.0-0-g937e33de)
Number of interfaces in file: 1
Interface #0 info:
                     Name = \Device\NPF_xxxxx
                     Description = 本地连接
                     Encapsulation = Ethernet (1 - ether)
                     Capture length = 262144
                     Time precision = microseconds (6)
                     Time ticks per second = 1000000
                     Time resolution = 0x06
                     Operating system = 64-bit Windows 7 Service Pack 1, build xxx
                     Number of stat entries = 1
                     Number of packets = 8976

客户端为 win 7 64 位系统(相当的老。。硬件也老),通过 Wireshark 捕获数据包,捕获时长 246s,数据包数量 8976,文件大小 6913kB,平均速率约 224kbps,总体上来说速率很低。

根据 Wireshark 统计功能,可以关注下协议分层和会话等信息。其中协议方面 IPv6 占到 73.1%,IPv4 中 TCP 占 20.6%,具体到 TCP 通讯会话,可以看到 TCP 会话数量 88 算是很多了。

image.png

image.png

题外话,如果不是说用户提供了服务器 IP,在这些茫茫多的数据包中是很难找到真正想要的信息,这也扯到常见的话题,在复杂的客户端流量情况下,如何有效地进行捕获过滤。

之前提到过复杂的客户端流量,关于捕获上的使用错误,说的是需要避免无效流量。作为服务器端自然不用说,流量更多是来自于实际业务,而客户端就比较有讲究了,更多针对的是办公电脑客户端场景,这种情况下由于自身多应用程序的运行,会产生很多的无效流量,干扰后期的分析。

虽然说分析时可以通过显示过滤表达式过滤,但与其这样,在捕获时保持一个纯粹的故障测试环境,岂不是更好,该关的程序能关则关。

专家信息中也是同样的问题,在客户端复杂流量的情况下,专家信息极其繁杂,并不能很好的辅助判断分析。

image.png

因此在类似复杂客户端流量的情况下所捕获的数据包文件,可以通过显示过滤表达式过滤掉部分数据包,格式大同小异,如下可参考

tcp
tcp or icmp or icmpv6

!(eth.dst.ig == 1) and !(arp or dns or ntp)
!(arp or stp or dns or ntp)
not arp && not stp && not dns

问题分析

过滤

根据提供的服务器 IP,构建会话 IPv4 过滤表达式。

ip.addr eq 192.168.1.1 and ip.addr eq 100.1.1.1

这样精准过滤后,统计中协议分层和会话信息缩减如下,TCP 数据包 367 个,服务端口 7001 的会话共 4 个,分别为 TCP Stream 1, 47, 78, 81。

image.png

image.png

image.png

此时可以直接在会话上点击右键,根据 TCP Stream ID 进行过滤,也就是一般所说的跟踪流,具体查看有什么问题。

image.png

分析

在上述统计信息 TCP 会话中,可见 TCP 4 条流,其中 Stream 78 和 81 的数据包数量分别为 10 和 7 ,明显偏少,可以大概估计并没有数据传输。

根据 TCP 跟踪流显示具体数据包,确实组成简单,基本为 TCP 三次握手以及 TCP 四次挥手阶段数据包。

image.png

image.png

剩余 TCP Stream 1 和 47,进行依次分析,首先是 TCP Stream 1 ,其中在 Packet Details 中 TCP 会话完整性信息为 Complete, WITH_DATA(47) ,这说明 tcp.completeness 字段值为 47,如下:

  • 1 : SYN
  • 2 : SYN-ACK
  • 4 : ACK
  • 8 : DATA
  • 16 : FIN
  • 32 : RST

1 + 2 + 4 + 8 + 32 = 47 ,也就是 SYN + SYN-ACK + ACK + DATA + RST 的值,说明 TCP Stream 1 是一个带有 Data 的完整 TCP 会话,从 TCP 三次握手,到中间数据传输,再到最后的 TCP RST 结束连接,虽然没有 FIN ,稍显突兀,但并无大碍。

关于 TCP 会话完整性分析介绍 以及 tcp.completeness 的显示过滤表达式使用方法,可见之前的文章 《Wireshark 提示和技巧 | TCP 会话完整性分析》

image.png

接着可以简单看下专家信息,是否有一些错误提示,但实际上并无啥特殊信息。

image.png

因为反馈的现象是应用使用慢,一般所谓的慢,一种常见的情况是由于数据包出现丢包或超时造成重传,会看到超时重传或者是快速重传,以及其它像是 DUP ACK 等等问题。既然上述专家信息中没有类似现象,那可以通过增加 frame.time_delta_displayed 信息列来辅助分析,检查每个数据包的间隔时间有什么特殊问题。

注:0.096143s,即为 No.42 SYN/ACK 与 No.41 SYN 之间的时间间隔,也就是 0.358735 - 0.262592 = 0.096143。

image.png

点击 Time Delta 列,从大小到排列,相邻数据包间隔时间较大的就出现在最上面了。

image.png

较大的有三个,第一个 RST 间隔 29 秒,这个比较好理解,在数据传输过程当中,No.180 客户端对服务器传输的数据分段全部 ACK 确认之后,间隔了 29 秒没有任何交互,客户端达到了一种应用超时时间,直接 RST 断开连接,虽然没用 FIN 不太标准,但此处的 29 秒并不是直接导致应用慢的原因。

image.png

第二个 2.97 秒就有点问题了,这里在 No.115 客户端 ACK 确认完服务器传输的数据分段后,No.149 客户端自身再发数据的间隔出现了 2.97 秒的延迟,这个慢的问题出现在客户端自身。

image.png

第三个 1.04 秒同样,发生在 TLS 握手起始,TCP 完成三次握手后,客户端又产生了一个自身的延迟,在 1.04 秒之后才发起 TLS 协商。

image.png

此外间隔较大的时间基本都在 100-200ms 之间,相较于 2.97 秒和 1.04 秒虽然并不夸张,但累积的数量如果较多,在某些情况下也是应用传输慢的原因,此处不展开过多分析,直接再去检查下 TCP Stream 47。

TCP Stream 47 基本与 TCP Stream 1 类似,同样的 TCP 会话完整性值 47(以 RST 结束),无丢包重传等异常信息,以及可见的客户端起始 Client Hello 1.02 秒的延迟。

image.png

image.png

在经过同样的点击 Time Delta 列,按从大小到排列,问题就显而易见了,排名前 6 的延迟全部来自于客户端自身,除了起始的 Client Hello 之外,在数据传输阶段,客户端自身的问题带来了 5 次较大的延迟。以 48 秒和 25 秒两处为例 ,客户端停顿了很长一段时间之后才有反应。

image.png

image.png

image.png

结合 TCP Stream 1 和 TCP Stream 47 两条流的现象,可以判断问题的根因出现在客户端自身,或是系统问题或是应用问题,需要进一步在客户端上查找原因。

问题总结

数据包不说谎,根据朋友反馈,最终客户在更换了电脑之后,应用慢问题得以解决。

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

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

相关文章

vscode中运行js

vscode中运行js 目前vscode插件运行js都是基于node环境,vscode控制台打印有些数据不方便等缺点。 每次调试在浏览器中运行js,需要创建html模板、插入js。期望能够直接运行js可以打开浏览器运行js,在vscode插件市场找到一款插件可以做到。 插…

从汇编代码理解数组越界访问漏洞

数组越界访问漏洞是 C/C 语言中常见的缺陷,它发生在程序尝试访问数组元素时未正确验证索引是否在有效范围内。通常情况下,数组的索引从0开始,到数组长度减1结束。如果程序尝试访问小于0或大于等于数组长度的索引位置,就会导致数组…

SpringBoot之JWT令牌校验

SpringBoot之JWT令牌校验 本文根据黑马b站springboot3vue3课程 JWT (JSON Web Token)是一种开放标准(RFC 7519),用于在不同实体之间安全地传输信息。它由三个部分组成:头部(Header)…

Python实现BOA蝴蝶优化算法优化LightGBM回归模型(LGBMRegressor算法)项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 蝴蝶优化算法(butterfly optimization algorithm, BOA)是Arora 等人于2019年提出的一种元启发式智能算…

Zabbix监控Windows

1.在虚拟机中安装zabbix 安装系统一直托不进虚拟机中;因为没安装Tools组件 点击虚拟机,选择安装VMware Tools 2.配置zabbix

SQLite的PRAGMA 声明(二十三)

返回:SQLite—系列文章目录 上一篇:SQLite从出生到现在(发布历史记录)(二十二) 下一篇:用于 SQLite 的异步 I/O 模块(二十四) PRAGMA 语句是特定于 SQLite 的 SQL 扩…

软件项目管理 - PERT 图

文章目录 1 概述1.1 PERT 图1.2 基础概念 2 相关计算2.1 最早时刻2.2 最迟时刻2.3 关键路径2.4 松弛时间 1 概述 1.1 PERT 图 PERT:Program Evaluation and Review Technique(项目评估与评审技术) PERT 图是一个有向图,图中的箭…

为什么还有人再问鸿蒙开发有必要学吗?

前言 学习鸿蒙开发,这事儿真的挺有必要的。鸿蒙操作系统,它厉害就厉害在高性能、可扩展,还特智能。现在智能设备和物联网火得不行,鸿蒙就是要成为这个时代的领头羊。它可不是来跟安卓抢饭碗的,它的眼光可远了&#xf…

切换plesk面板语言

近期购入了Hostease的Windows虚拟主机产品,由于进入他们主机Plesk面板后查看全都是英文的,对于英文也不是很懂,尤其是像这种专业 词汇的更不明白。因此这边咨询了Hostease的技术支持,寻求帮助了解到可以Plesk面板可以切换语言的&a…

STM32无刷电机全套开发资料(源码、原理图、PCB工程及说明文档)

目录 1、原理图、PCB、BOOM表 2、设计描述 2.1 前言 2.2 设计电路规范 3、代码 4、资料清单 资料下载地址:STM32无刷电机全套开发资料(源码、原理图、PCB工程及说明文档) 1、原理图、PCB、BOOM表 2、设计描述 2.1 前言 经过一个星期的画PCB,今…

【微信小程序】分包

整个小程序所有分包大小不超过 20M(开通虚拟支付后的小游戏不超过30M) 单个分包/主包大小不能超过 2M在小程序启动时,默认会下载主包并启动主包内页面,当用户进入分包内某个页面时,客户端会把对应分包下载下来&#xf…

Windows版MySQL5.7解压直用(免安装-绿色-项目打包直接使用)

windows下mysql分类 MySQL分为 安装版和解压版 安装版: 安装方便,下一步------下一步就OK了,但重装系统更换环境又要重新来一遍,会特别麻烦解压版(推荐): 这种方式(项目打包特别方便&#xf…

网红泡泡机单片机方案开发定制

酷得(i-coder)是一家专业的技术服务公司,致力于为各类智能硬件提供高效、稳定、安全的底层驱动解决方案。我们拥有一支经验丰富、技术精湛的团队,能够为客户提供全方位的底层驱动开发服务。 下面是酷得的开发流程: 1…

NH2-PEG-Silane 氨基聚乙二醇硅烷 生物材料表面修饰

NH2-PEG-Silane 氨基聚乙二醇硅烷 生物材料表面修饰 【中文名称】氨基聚乙二醇硅烷 【英文名称】Silane-PEG-NH2 【结 构】 【品 牌】碳水科技(Tanshtech) 【纯 度】95%以上 【保 存】-20 【规 格】500mg,1g,5g,10g 【产品特性】 生…

NLP基础—jieba分词

jieba分词 支持四种分词模式 精确模式 试图将句子最精确地切开,适合文本分析;全模式 把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义;搜索引擎模式 在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。paddle模式 利用Paddle…

MATLAB 体素滤波(62)

MATLAB 体素滤波(62) 一、算法介绍二、算法实现1.代码(已验证,直接运行)一、算法介绍 这里的代码完成文件读入,体素滤波,效果显示,结果输出的操作,下面是效果截图,后面是代码。 体素滤波(Voxel Filtering)是一种用于三维点云数据处理的方法,其原理类似于二维图像…

Nginx内存池相关源码剖析(三)小块内存分配逻辑

在Nginx中,小块内存通常指的是那些大小相对较小、分配和释放频率较高的内存块。这些内存块由于数量众多、管理复杂,因此需要使用一种高效的内存管理机制来减少内存管理的开销和内存碎片的产生。 Nginx内存池通过一种预分配和复用的方式来管理小块内存。当…

Reka团队打造前沿多模态语言模型,展现卓越性能

eka,一家新兴的人工智能公司,近期推出了一系列强大的多模态语言模型 - Reka Core、Reka Flash和Reka Edge。这些模型不仅能处理和推理文本,还能够灵活应对图像、视频和音频等多种输入,在各项测试中表现出色,在某些指标…

AI光芯登上Science,开启算力新纪元

智能光芯片“太极”:清华大学的科技壮举,开启算力新纪元 在科技的浩瀚星海中,每一次创新都是对未知世界的探索和征服。近日,清华大学电子工程系与自动化系的联合团队,凭借其深厚的科研实力和创新精神,研发出…

OpenCV4.10使用形态运算提取水平线和垂直线

返回:OpenCV系列文章目录(持续更新中......) 上一篇:OpenCV的查找命中或未命中 下一篇:OpenCV4.9图像金字塔-CSDN博客 目标 在本教程中,您将学习如何: 应用两个非常常见的形态运算符(即膨胀和…