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

news2024/9/21 4:38:46

问题背景

来自于朋友分享的一个案例,某某客户反馈电脑应用软件使用时打开很慢,并提供了一个慢时所捕获的数据包文件以及服务端 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 两条流的现象,可以判断问题的根因出现在客户端自身,或是系统问题或是应用问题,需要进一步在客户端上查找原因。

问题总结

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

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

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

相关文章

Redis集合[持续更新]

Redis(全称:Remote Dictionary Server 远程字典服务)是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。 数据结构 1. string 字符串 字符串类型是 Redis 最…

云知识库怎么搭建才适合中小企业?用这几个工具很轻松

当我们想到知识库时,可能会联想到庞大的公司和复杂的系统,但实际上,随着技术的发展,中小企业也可以利用各种工具来建立自己的云知识库。这样不仅能够提升企业的知识管理效率,还能优化客户服务流程。这篇文章会介绍三款…

【QT+QGIS跨平台编译】182:【QGIS+Qt跨平台编译】(一套代码、一套框架,跨平台编译)

文章目录 一、qgis模块介绍二、QGIS下载三、文件分析四、pro文件五、编译实践一、qgis模块介绍 qgis模块作为QGIS启动模块,集成底层所有的模块。 二、QGIS下载 QGIS网址: QGIS Source Download 获取qgis.tar.bz2文件。 三、文件分析 解压缩qgis.tar.bz2文件,进入到qgis\…

编写Spark独立应用程序

执行本文之前,先搭建好spark的开发环境,我目前只搭建了standalone模式,参考链接 : Spark Standalone模式部署-CSDN博客 1. 安装sbt 1)下载sbt 网址:https://www.scala-sbt.org/download.html &#xff0c…

# Win10 打不开【本地组策略编辑器】解决方案

Win10 打不开【本地组策略编辑器】解决方案 段子手168 问题描述: 当在 WIN R 打开【运行】输入:gpedit.msc 打开【本地组策略编辑器】时,出现错误时, 或者在【计算机管理】中 没有【本地用户和组】这一项。 可以试一下以下方…

8.MMD ray渲染主流常用插件介绍

导入一个场景,做好基础操作 导入控制器、天空盒、材质 1. AutoLuminous4 自发光的插件 ![[Pasted image 20240421103420.png]] 拖进去以后可以让场景中的自发光材质发光 也可以让不发光的材质强行发光 打开MME,找到AL_EmitterRT 展开场景&#x…

解线性方程组——直接解法:LU分解、PLU分解(类似列主元消去法) | 北太天元

L: lower triangular 下三角 U: upper triangular 上三角 LU 分解,顾名思义,为 把一个 矩阵 分成 一个下三角矩阵 乘上一个上三角矩阵的形式。 Example 为什么可以这样 几个基本的初等行变换,可以自己验算一下,等式的左边与右边…

spring高级篇(二)

1、Aware和InitializingBean Aware和InitializingBean都与Bean的生命周期管理相关。 Aware接口: 概念: Aware接口是Spring框架中的一个标记接口,它表示一个类能够感知到(aware of)Spring容器的存在及其特定的环境。Spring框架提供了多个Awar…

一周学会Django5 Python Web开发-Django5模型数据修改

锋哥原创的Python Web开发 Django5视频教程: 2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~共计47条视频,包括:2024版 Django5 Python we…

小图标还不会设计!

ICON图标设计 hello,我是小索奇 image-20230805225451447 你有好奇过这样的图标如何设计的吗? 其实非常简单,仅需要一行代码即可完成,本篇文章就带伙伴们使用,每天看一篇,简单易懂,日久技长~…

5 款免费数据恢复工具,用于恢复误删数据

数据恢复工具是通过组装幸存的片段、从剩余的片段重建或使用备份来重新获得对因存储损坏、人为错误或意外中断而丢失的文件的访问权限的行为。它是将丢失、损坏、意外擦除或以其他方式无法访问的数据恢复到服务器、计算机、手机或存储设备的过程。 在大多数情况下,数…

kaggle 泰坦尼克使用xgboost 得分0.73684

流程 导入所要使用的包引入kaggle的数据集csv文件查看数据集有无空值填充这些空值提取特征分离训练集和测试集调用模型 导入需要的包 import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns import warnings warnings.filterwarni…

人人都能玩赚数字人操作员 数字人直播搭建/多路开播/选品技巧/0-1开播流程

课程目录 01 数字人工业化直播车间打造 02 数字人直播规则及防封技巧 03 数字人直播间搭建步骤流程 04 数字人直播行业应用盘点 05 数字人直播多平台多路开播 06 数字人高成交循环话术运营 07 数字人直播选品及组品技I5 08 数字人直播0-1流程 09 工业化直播0-1流程 网…

Axure中的样式

样式 首先说一下Axure里面的原点位置 如下图: 还有一个办法是我们选中我们的按钮,如上图,然后打开右边的样式,可以看按钮的x,y属性,类似于游戏中unity软件的x,y属性,类似于html中…

【JVM系列】关于静态块、静态属性、构造块、构造方法的执行顺序

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

数字时代的智慧演奏

数字化时代,工业不再是孤独的机器运转,而是演绎着一场智能与数据的华丽交响。无数智能节点的联动,数据的涌动,成为工业的新活力,同时也是创新的源泉。 工业互联网将每个机器、设备连接在一起,打破了原本独立…

【数据结构练习题】堆——top-k问题

♥♥♥♥♥个人主页♥♥♥♥♥ ♥♥♥♥♥数据结构练习题总结专栏♥♥♥♥♥ ♥♥♥♥♥上一章:【数据结构练习题】二叉树(1)——1.相同的树2.另一颗树的子树3.翻转二叉树4.平衡二叉树5.对称二叉树♥♥♥♥♥ 文章目录 1.top-k问题1.1问题描述1.2思路分析1.3绘图分析…

simulink中怎么使用solve函数?

🏆本文收录于「Bug调优」专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&…

Sulley入门教学——简介、安装(Win7、VMware)

1、简介 Sulley 是由 Pedram Amini 和 Aaron Portnoy 开发的开源工具。它以 Python 编写,可以轻松地在不同平台上部署和使用。Sulley 提供了一个灵活且功能强大的框架,允许用户定义协议消息的结构、字段类型、边界条件和模糊测试策略。用户可以使用 Sul…

第三方应用类---Phpmyadmin 后台 Getshell 操作

免责声明:本节仅做技术交流学习. 目录 什么是Phpmyadmin? getshell前提条件: 详细步骤: 1-搜集到开放phpmyadmin的web,然后访问进去 2-执行SQL命令查看是否开启了读写权限 3-开启了读写权限-->继续 没有开读写权限--->鸡鸡 4-有读写权限之后,执行SQL语句导出文件…