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 相关信息,可见传输缓慢的问题并不是常见的丢包导致重传所引起。
问题分析
首先从发送端 “SendSideFinal.pcap” 跟踪文件开始,展开数据包信息如下,可以看到数据包文件缺失 TCP 三次握手阶段的数据包,仅有数据传输 PSH/ACK 相关,最后以 RST 数据包结束。
其中 TCP 会话完整性分析中 tcp.completeness == 44
也说明了相关情况,44 = 4 + 8 + 32,其中 4 为 ACK,8 为 DATA,32 为 RST。
TCP 会话完整性分析说明详见《 Wieshark 提示和技巧 | TCP 会话完整性分析》
另从上面数据包交互来看,两端实际都有数据分段在传输,如果不是数据包文件的名字 “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 ;
- “SendSideFinal.pcap” 中 ACK 间隔时间,ACK 对于数据分段的确认,譬如 No.5 确认 No.4 ,以及 No.2 确认 No.1,No.11 确认 No.10,间隔时间都极短,0.1-0.2ms,相对于中间网络传输的时间很小,而如果反过来判断,很多数据包交互时间都无法说通,所以也可判断捕获点是在本地或是靠近本地侧,也就是 192.168.1.1。
也有同学也会注意 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 的一组数据帧做为结束。(当然由于未捕获到最起初的数据包,此一组数据帧也可能为起始)
找到 “SendSideFinal.pcap” 数据包传输的规律后,同时再结合“RcvSideFinal.pcap”对比分析,就比较容易识别出缓慢的问题所在,慢在哪。
- 通过数据包的 ip.id 字段,可以找到两个数据包跟踪文件中的数据包对应关系,如下;
- 左图 No.7 请求和 No.8 响应间隔 200ms,一部分来自于 RTT,一部分来自于响应,具体是多少?通过右图对比,可以得知响应时长极短,不到 1ms,而 RTT 近乎 200ms;此后服务器端 192.168.1.1 No.9 带来第一个慢的地方,ACK 的时长为 106ms,初步判断可能是延迟确认的时间,略长。
以下仍以之前总结的数据交互规律,说明如下:
- 以客户端 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 左右的时间几乎都可以忽略不计了。
相关文章:

Wireshark TS | 应用传输缓慢问题
问题背景 沿用之前文章的开头说明,应用传输慢是一种比较常见的问题,慢在哪,为什么慢,有时候光从网络数据包分析方面很难回答的一清二楚,毕竟不同的技术方向专业性太强,全栈大佬只能仰望,而我们…...
邦芒支招:求职自荐的五条技巧
求职自荐的技巧有哪些,在职场中,求职是很讲究技巧的,因为每个人都想自己的在面试的时候能取得好的结果,那么求职自荐的技巧有哪些呢?下面就跟小邦一起来了解一下吧。 第一、要积极主动。求职自荐是求职者的…...

受电诱骗快充取电芯片XSP08:PD+QC+华为+三星多种协议9V12V15V20V
目前市面上很多家的快充充电器,都有自己的私有快充协议,如PD协议、QC协议、华为快充协议、三星快充协议、OPPO快充协议等待,为了让它们都能输出快充电压,就需要在受电端也增加快充协议取电芯片XSP08,它可以和充电器通讯…...
课程32:.Net Core Web API部署IIS
这里写目录标题 🚀前言前言一、服务器环境配置1.1 安装 ASP.NET Core模块/托管捆绑包1.2 检查是否安装成功二、项目发布2.1 选择发布方式2.2 发布配置2.3 发布三、服务器部署3.1 IIS添加网站3.2 数据库链接配置3.3 让IIS支持.NET Web Api3.4 验证四、最后🚀前言 本文是《.…...

wpf devexpress 绑定数据编辑器
定义视图模型 打开前一个项目 打开RegistrationViewModel.cs文件添加如下属性到RegistrationViewModel类 [POCOViewModel] public class RegistrationViewModel {public static RegistrationViewModel Create() {return ViewModelSource.Create(() > new RegistrationVie…...
状态模式-
定义:当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。 适用场景: 1、一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为。 2、条件、分支语句的代替者,且这些分支依赖于该对象…...

人机交互——自然语言生成
自然语言生成是让计算机自动或半自动地生成自然语言的文本。这个领域涉及到自然语言处理、语言学、计算机科学等多个领域的知识。 1.简介 自然语言生成系统可以分为基于规则的方法和基于统计的方法两大类。基于规则的方法主要依靠专家知识库和语言学规则来生成文本࿰…...

软考-高级-系统架构设计师教程(清华第2版)【第18章 安全架构设计理论与实践(P648~690)-思维导图】
软考-高级-系统架构设计师教程(清华第2版)【第18章 安全架构设计理论与实践(P648~690)-思维导图】 课本里章节里所有蓝色字体的思维导图...

Hive调优
1.参数配置优化 设定Hive参数有三种方式: (1)配置Hive文件 当修改配置Hive文件的设定后,对本机启动的所有Hive进程都有效,因此配置是全局性的。 一般地,Hive的配置文件包括两部分: aÿ…...

基于R语言平台Biomod2模型的物种分布建模与可视化分析
!](https://img-blog.csdnimg.cn/84e1cc8c7f9b4b6ab60903ffa17d82f0.jpeg#pic_center)...
Docker 安装一个本地的画图软件 —— 筑梦之路
画图是必不可少的,比如流程图、架构图等等,网上有很多画图软件是要收费的,使用起来很不方便,因此在内网部署一个免费开源的画图软件是有必要的。 如何部署 docker run -it --rm --name"drawio" -p 8080:8080 -p 8443:…...
【python】Conda强大的包/环境管理工具
Conda强大的包/环境管理工具 1. 简介2. 安装3. 指令 1. 简介 Conda是Anaconda中一个强大的包和环境管理工具,可以在Windows的Anaconda Prompt命令行使用,也可以在macOS或者Linux系统的终端窗口(terminal window)的命令行使用。2. 安装 [Linux平台安装教…...
常见面试题-Netty线程模型以及TCP粘包拆包
介绍一下 Netty 使用的线程模型? 答: Netty 主要基于主从 Reactor 多线程模型,其中主从 Reactor 多线程模型将 Reactor 分为两部分: mainReactor:监听 Server Socket,用来处理网络 IO 连接建立操作&…...

03.webpack中hash,chunkhash和contenthash 的区别
hash、contenthash 和 chunkhash 是通过散列函数处理之后,生成的一串字符,可用于区分文件。 作用:善用文件的哈希值,解决浏览器缓存导致的资源未及时更新的问题 1.文件名不带哈希值 const path require(path) const HtmlWebpac…...

OpenAI前CEO萨姆·阿尔特曼可能重返CEO职位;用LoRA微调LLM的实用技巧
🦉 AI新闻 🚀 OpenAI前CEO萨姆阿尔特曼可能重返CEO职位 摘要:据报道,OpenAI前CEO萨姆阿尔特曼有望重新担任CEO职位,并对公司董事会进行重大改变。微软等投资人正努力恢复阿尔特曼的职位,尽管董事会仍然是…...
修改docker默认数据目录
前言: docker默认数据目录是/var/lib/docker,根目录的存储空间有限,我们往往不能使用默认配置,需要创建空间相对较大的数据data目录 停止docker服务 systemctl stop docker 编辑配置文件 vi /etc/docker/daemon.json 增加选项 “graph”…...

wpf devexpress post 更改数据库
这个教程示范如何使用GridControl编辑数据,和保存更改到数据库。这个教程基于前一个篇。 Items Source Wizard 当 CRUD (Create, Read, Update, Delete) 启动选项时添加Post data功能 Items Source Wizard 生成如下代码: 1、设置 TableView.ShowUpdat…...
Ubuntu 18.04/20.04 LTS 操作系统设置静态DNS
1、nano /etc/systemd/resolved.conf 2、修改配置 使用DNS服务器:223.5.5.5 223.6.6.6 [Resolve] DNS223.5.5.5 223.6.6.6 3、重启服务 systemctl restart systemd-resolved.service 4、查看解析文件 cat /run/systemd/resolve/resolv.conf # This file is man…...
VSCode使用MinGW中的go并支持CGO
在Windows中,如果想使用Linux下的一些命令或者开发工具,可以安装Cygwin或者MinGW,MinGW相比Cygwin要轻量得多,笔者就安装的MinGW,但是安装MinGW后,如果把它加到Windows系统的PATH环境变量中,则可…...
tensor张量 ------ python特殊的数据结构
点赞收藏关注! 如需转载请注明出处! 张量与数组和矩阵非常相似。 在PyTorch中,使用张量来编码模型的输入和输出,以及模型的参数。 张量可以在GPU或其他硬件加速器上运行。 张量和NumPy数组通常可以共享相同的底层内存,…...

wordpress后台更新后 前端没变化的解决方法
使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...

idea大量爆红问题解决
问题描述 在学习和工作中,idea是程序员不可缺少的一个工具,但是突然在有些时候就会出现大量爆红的问题,发现无法跳转,无论是关机重启或者是替换root都无法解决 就是如上所展示的问题,但是程序依然可以启动。 问题解决…...

关于nvm与node.js
1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...

前端导出带有合并单元格的列表
// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...
大语言模型如何处理长文本?常用文本分割技术详解
为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...
【Go】3、Go语言进阶与依赖管理
前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes࿰…...
Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!
一、引言 在数据驱动的背景下,知识图谱凭借其高效的信息组织能力,正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合,探讨知识图谱开发的实现细节,帮助读者掌握该技术栈在实际项目中的落地方法。 …...

在WSL2的Ubuntu镜像中安装Docker
Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包: for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战
说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下,风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...