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_xxxxxDescription = 本地连接Encapsulation = Ethernet (1 - ether)Capture length = 262144Time precision = microseconds (6)Time ticks per second = 1000000Time resolution = 0x06Operating system = 64-bit Windows 7 Service Pack 1, build xxxNumber of stat entries = 1Number 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.mzph.cn/news/822867.shtml

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

相关文章

浅入浅出之nginx

目录 工作流程正向代理概念 反向代理概念 nginx反向代理配置文件介绍解释作用 参考文章Nginx 常用指令和操作启动 Nginx测试配置文件快速关闭 Nginx优雅关闭 Nginx重载配置文件查看版本查看编译时的参数查看进程配置用户访问日志配置错误日志设置 web 根目录配置 server 块配置…

LeetCode_1304.和为零的 N 个不同整数

题目: 题解: 题目说让我们返回一个由n个各不相同的整数组成的数组,相加为0。 这里的比较好的办法就是类似于 1 2 3 0 -3 -2 -1这样对称的数组。既满足要求,又好实现。 先calloc出一个容量为n的整型数组,定义两个变量…

解决java.lang.NoClassDefFoundError 问题

解决java.lang.NoClassDefFoundError 问题 一、背景二、分析三、解决 一、背景 项目运行成功之后,调用某个接口时报错,信息如下: 2024-04-17 14:59:23 [ERROR] --- [nio-8070-exec-1] c.c.c.e.LogExceptionHandleFilter : Handler dispatch failed; nest…

如何使用Git-Secrets防止将敏感信息意外上传至Git库

关于Git-Secrets Git-secrets是一款功能强大的开发安全工具,该工具可以防止开发人员意外将密码和其他敏感信息上传到Git库中。 Git-secrets首先会扫描提交的代码和说明,当与用户预先配置的正则表达式模式匹配时,便会阻止此次提交。该工具的优…

分布式光纤测温解决方案

安科瑞电气股份有限公司 祁洁 15000363176 一、方案介绍 分布式光纤测温(DTS)集光电信号检测、计算机技术等为一体,具有实时监测、测温精度高、测量距离长、可精确定位、采用光纤作为传感器和传输介质,具有抗电磁干扰、本征防…

项目文档维护(一) 快速生成项目结构图

IDEA快速生成项目树形结构图 1. 执行指令 在项目根目录下,进入cmd或terminal, 输入如下指令: tree . > tr.txt 只有文件夹 tree /f . > tr.txt 包括文件夹和文件注意尽量要使用idea, pycharm等ide, 其他工具需自己测试效果, 本人使用power …

详解网络通讯框架Netty原理,看这一篇就够了

NIO网络通信 网络通信BIONIOselectpollepollselect poll epoll对比 Netty原理Netty架构reactor响应式编程netty组件eventLoop 线程间交互Future接口Promise接口 Handler和PipelineByteBuf组成指针常用方法 网络通信 通过网络编程的基础可以知道,各设备通过I/O流写入…

如何阻止访问您的网站

本周有一个客户,购买Hostease的HK Basic Linux虚拟主机,询问我们的在线客服,如何阻止部分地区或IP段访问他的网站。我们为用户提供教程,用户很快完成了设置。在此,我们分享这个操作教程,希望可以对您有帮助…

Linux第88步_非阻塞IO实验

非阻塞IO是“应用程序”对“驱动设备”进行操作,若不能获取到设备资源,则非阻塞IO应用程序的线程不会被“挂起”,即线程不进入休眠,而是一直“轮询”,直到获取到设备资源为止,或者直接放弃。 非阻塞IO应用举…

本地部署运行大模型ollama

本地部署运行大模型ollama ollama模型下载地址 在我使用 vscode 开发时,使用 coplit 或 chatgpt 来辅助过于昂贵,于是我希望找到一个可以调用本地大模型的工具来辅助编程。 ollama 就是这样一个工具。 ollama使用 ollama 是一个可以将训练好的模型部署到…

1688店铺商品接口全攻略:一键获取商品信息,轻松玩转电商数据!

1688店铺所有商品接口技术详解 一、引言 随着电子商务的快速发展,越来越多的商家选择通过1688平台开展业务。为了方便商家获取店铺内所有商品的信息,1688平台提供了相应的API接口。本文将详细介绍如何使用这些接口获取店铺所有商品的信息,以…

GVRP协议与动态、静态vlan

一、GVRP协议使用场景 1、当实际组网复杂到网络管理员无法短时间内了解网络的拓扑结构,或者是整个网络的VLAN太多时,工作量会非常大,而且非常容易配置错误。在这种情况下,用户可以通过GVRP的VLAN自动注册功能完成VLAN的配置。 2、…

【快捷部署】020_Jenkins(2.60.3)

📣【快捷部署系列】020期信息 编号选型版本操作系统部署形式部署模式复检时间020Jenkins2.60.3Ubuntu 20.04Docker单机2024-04-17 一、快捷部署 #!/bin/bash ################################################################################# # 作者&#xff1…

BackTrader 中文文档(十二)

原文:www.backtrader.com/ Visual Chart 原文:www.backtrader.com/docu/live/vc/vc/ 与 Visual Chart 的集成支持两者: 实时数据提供 实时交易 Visual Chart是完整的交易解决方案: 在单个平台上集成图表、数据源和经纪功能 更多…

WebGl/Three 粒子系统 人物破碎及还原运动

粒子 首先,加载模型,这是万千粒子的前身,模型对象由很多面构成,这些面又是由各个点构成的,所以可以将模型的几何体对象geometry赋给粒子对象,粒子物体用Points方式渲染 bloader.load("obj/female02/Fe…

PyTorch深度学习入门-2

PyTorch深度学习快速入门教程(绝对通俗易懂!)【小土堆】_哔哩哔哩_bilibili 一、神经网络的基本骨架 --nn.Module Neutral network torch.nn — PyTorch 2.2 documentation * import torch from torch import nnclass xiaofan(nn.Module):…

GAN:对抗生成网络【通俗易懂】

一、概述 对抗生成网络(GAN)是一种深度学习模型,由两个神经网络组成:生成器G和判别器D。这两个网络被训练来协同工作,以生成接近真实数据的新样本。 生成器的任务是接收一个随机噪声向量,并将其转换为与真…

如何入行产品经理?

转产品经理第一点要先学基础理论知识,学了理论再去实践,转行,跳槽! 学理论比较好的就是去报NPDP的系统班,考后也会有面试指导课,跟职场晋升课程,对小白来说非常合适了~(可以去哔站找…

氟化氢冷凝回流反应瓶耐高温聚四氟烧瓶可灵活加工PTFE反应釜

四氟烧瓶又叫反应瓶、PTFE反应釜,常用于有HF或者冷凝回流反应等实验中,可作为接收瓶使用,可放入水浴器或油浴器里进行加热,平底稳定性好。相对于圆底烧瓶可直接放置,不需要铁架台等固定。 1.外观纯白不透明&#xff1b…

Jenkins打包app并通过openssh上传到服务器

1、下载安装openssh 网上很多教程,包括开端口的,可以搜下 2、配置openssh根目录 进入C:\ProgramData\ssh打开文件sshd_config,添加配置ChrootDirectory D:\wxs\soft,想改端口的也在这个文件 3、安装Jenkins 参考上一篇 4、新…