Wireshark TS | 异常 ACK 数据包处理

问题背景

来自于学习群里群友讨论的一个数据包跟踪文件,在其中涉及到两处数据包异常现象,而产生这些现象的实际原因是数据包乱序。由于这两处数据包异常,都有点特别,本篇也就其中一个异常现象单独展开说明。

问题信息

数据包跟踪文件基本信息如下:

λ capinfos test0609.pcapng
File name:           test0609.pcapng
File type:           Wireshark/... - pcapng
File encapsulation:  Ethernet
File timestamp precision:  microseconds (6)
Packet size limit:   file hdr: (not set)
Packet size limit:   inferred: 66 bytes
Number of packets:   44
File size:           5096 bytes
Data size:           4010 bytes
Capture duration:    0.959479 seconds
First packet time:   2024-06-03 19:32:20.136281
Last packet time:    2024-06-03 19:32:21.095760
Data byte rate:      4179 bytes/s
Data bit rate:       33 kbps
Average packet size: 91.14 bytes
Average packet rate: 45 packets/s
SHA256:              6d472bd621d89b2330ceb61a9b14756c7991e157b1e9e8960580379129275bf8
SHA1:                c849b01ccdbe4ed131a3c67ac4bb768f7ac680fc
Strict time order:   True
Capture application: Editcap (Wireshark) 4.2.5 (v4.2.5-0-g4aa814ac25a1)
Capture comment:     Sanitized by TraceWrangler v0.6.8 build 949
Number of interfaces in file: 1
Interface #0 info:Encapsulation = Ethernet (1 - ether)Capture length = 262144Time precision = microseconds (6)Time ticks per second = 1000000Time resolution = 0x06Number of stat entries = 0Number of packets = 44

数据包文件根据 IP 通讯对做过一定过滤,按 66 字节长度做了截断,并且经过 TraceWrangler 匿名化软件处理。捕获总时长 0.95 秒,数据包数量 44 个,速率 33 kbps 。

关于 TraceWrangler 匿名化软件简介,可以查看之前的文章《Wireshark 提示和技巧 | 如何匿名化数据包》。

专家信息如下,仅有一个 Dup ACK 信息,需要进一步分析。

问题分析

数据包跟踪文件展开详细信息如下,粗看下来,除了 TCP Dup ACK ,感觉没有其他什么问题。

什么是 TCP Dup ACK ,简单看下 Wireshark 官方文档对此的定义如下:

  • TCP 段大小为 0
  • 窗口大小非零且没有改变,或者有有效的 SACK 数据
  • Next Seq Num 和最后一次看到的 ACK Num 是非 0 的(即连接已经建立)
  • 没有设置 SYN、FIN、RST
Set when all of the following are true:The segment size is zero.
The window size is non-zero and hasn’t changed, or there is valid SACK data.
The next expected sequence number and last-seen acknowledgment number are non-zero (i.e., the connection has been established).
SYN, FIN, and RST are not set.

明白了什么是 TCP Dup ACK 之后,我们继续研究为什么会产生 TCP Dup ACK ,先简单的就数据包展开说明:

  1. No.10 和 No.11 为服务器端所发送的数据包,其中 No.10 为数据段,Seq Num 70 + Len 12,No.11 为纯 ACK;
  2. No.12 为客户端对接收到的 No.10 数据包做出的 ACK 响应,ACK Num 为 82;
  3. 但 No.13 ACK 数据包是什么为什么会被触发出来?同样的 ACK Num 82 表明并没有确认新数据,而且从上面服务器端发包来看,实际也没有其他数据,所以这个 ACK 符合了 TCP Dup ACK 代码的判断,因此标识。

难道 No.13 是对 No.11 ACK 数据包的 ACK ,也就是 ACK 了一个纯 ACK??? 从常理上来说是不可能的。但为什么会产生这样反常的现象呢,合理还是不合理。

探究 No.13 的由来,就得去找触发的原因,首先还是问题背景章节中提到的数据包乱序,在这里服务器端所发送的 No.10 和 No.11,在客户端接收时已经是乱序了。两个地方说明,一是标准的 Seq Num,如果正常的顺序,No.11 ACK 的 Seq Num 应该为 82 ,但实际为 70 ,说明应该出现在 No.10 之前;二是 ip.id 辅助判断,理论是顺序递增的,而 No.11 的 4916 反而小于 No.10 4917,也说明发生了乱序。

乱序比较常见,但一个纯 ACK 在前,一个数据段在后,单独两者之间出现乱序,确实比较少见,这也是之后触发生成 No.13 比较少见的原因。

继续分析 No.13 TCP Dup ACK ,实际在一开始讨论时,我就表达了这个观点,这个 Dup ACK 的产生比较突兀,ACK 了纯 ACK,这个现象不合理,如果需要用 ACK 来确认 ACK ,那实际在 TCP 数据包中的交互上永远没有停止的时候了。

再之后仔细琢磨了下,确实不会,确实不会出现 ACK 一个 ACK,但这里有一个前提,后一个 ACK 得是正常的,或者说是有效的。而实际上 No.11 对于客户端上来说并不是有效的,因为先收到 No.10 之后,客户端接收窗口已经确认收到了 82 之前的所有数据了,而 No.11 Seq Num 70 小于 82,判断为异常,因此产生出一个 TCP Dup ACK

为了验证上述结论,通过 packetdrill 以下代码做了相关测试,结果也符合预期。

# cat dupack.pkt
0   socket(..., SOCK_STREAM, IPPROTO_TCP) = 3
+0  setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
+0  bind(3, ..., ...) = 0
+0  listen(3, 1) = 0+0  < S 0:0(0) win 10000 <mss 1460>
+0  > S. 0:0(0) ack 1 <...>
+0.01 < . 1:1(0) ack 1 win 10000
+0 accept(3, ..., ...) = 4+0.01 write(4, ..., 1000) = 1000
+0.01 < . 1:1(0) ack 1001 win 10000
+0.01 < P. 1:11(10) ack 1001 win 10000
+0 < . 1:1(0) ack 1001 win 10000+0 `sleep 10`

问题总结

存在即合理,数据包分析也会有这样的一个观点,不是嘛。

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

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

相关文章

【React】项目的搭建

create-react-app 搭建vite 搭建相关下载 在Vue中搭建项目的步骤&#xff1a;1.首先安装脚手架的环境&#xff0c;2.通过脚手架的指令创建项目 在React中有两种方式去搭建项目&#xff1a;1.和Vue一样&#xff0c;先安装脚手架然后通过脚手架指令搭建&#xff1b;2.npx create-…

深入浅出 NVIDIA CUDA 架构与并行计算技术

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《深度探秘&#xff1a;AI界的007》 &#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、引言 1、CUDA为何重要&#xff1a;并行计算的时代 2、NVIDIA在…

pytorch学习02

自动微分 自动微分模块torch.autograd负责自动计算张量操作的梯度&#xff0c;具有自动求导功能。自动微分模块是构成神经网络训练的必要模块&#xff0c;可以实现网络权重参数的更新&#xff0c;使得反向传播算法的实现变得简单而高效。 1. 基础概念 张量 Torch中一切皆为张…

Java虚拟机(JVM)平台无关?相关?

计算机的概念模型 计算机实际上就是实现了一个图灵机模型。即&#xff0c;输入参数&#xff0c;根据程序计算&#xff0c;输出结果。图灵机模型如图。 Tape是输入数据&#xff0c;Program是针对这些数据进行计算的程序&#xff0c;中间横着的方块表示的是机器的状态。 目前使…

satoken的奇奇怪怪的错误

发了 /user/getBrowseDetail和/user/getResponDetail&#xff0c;但为什么进入handle里面有三次&#xff1f;且第一次的handle类型是AbstractHandleMapping$PreFlightHttpRequestHandlerxxx,这一次进来的时候flag为false&#xff0c;StpUtils.checkLogin抛出了异常 第二次进来的…

【KWDB 创作者计划】_上位机知识篇---SDK

文章目录 前言一、SDK的核心组成API(应用程序接口)库文件(Libraries)开发工具文档与示例依赖项与环境配置二、SDK的作用简化开发流程确保兼容性与稳定性加速产品迭代功能扩展与定制三、SDK的典型应用场景硬件设备开发操作系统与平台云服务与API集成游戏与图形开发四、SDK与…

golang处理时间的包time一次性全面了解

本文旨在对官方time包有个全面学习了解。不钻抠细节&#xff0c;但又有全面了解&#xff0c;重点介绍常用的内容&#xff0c;一些低频的可能这辈子可能都用不上。主打一个花最少时间办最大事。 Duration对象: 两个time实例经过的时间,以长度为int64的纳秒来计数。 常见的durati…

PyCharm Flask 使用 Tailwind CSS 配置

使用 Tailwind CSS 步骤 1&#xff1a;初始化项目 在 PyCharm 终端运行&#xff1a;npm init -y安装 Tailwind CSS&#xff1a;npm install -D tailwindcss postcss autoprefixer初始化 Tailwind 配置文件&#xff1a;npx tailwindcss init这会生成 tailwind.config.js。 步…

【英语语法】基本句型

目录 前言一&#xff1a;主谓二&#xff1a;主谓宾三&#xff1a;主系表四&#xff1a;主谓双宾五&#xff1a;主谓宾补 前言 英语基本句型是语法体系的基石&#xff0c;以下是英语五大基本句型。 一&#xff1a;主谓 结构&#xff1a;主语 不及物动词 例句&#xff1a; T…

隔离DCDC辅助电源解决方案与产品应用科普

**“隔离”与“非隔离的区别** 隔离&#xff1a; 1、AC-DC&#xff0c;也叫“一次电源”&#xff0c;人可能会碰到的应用场合&#xff0c;起安全保护作用&#xff1b; 2、为了抗干扰&#xff0c;通过隔离能有效隔绝干扰信号传输。 非隔离&#xff1a; 1、“安全特低电压&#…

DS-SLAM 运动一致性检测的源码解读

运动一致性检测是Frame.cc的Frame::ProcessMovingObject(const cv::Mat &imgray)函数。 对应DS-SLAM流程图Moving consistency check的部分 把这个函数单独摘出来&#xff0c;写了一下对两帧检测&#xff0c;查看效果的程序&#xff1a; #include <opencv2/opencv.hpp…

安全测试的全面知识体系及实现路径

以下是安全测试的全面知识体系及实现路径,结合最新工具和技术趋势(截至2025年): 一、安全测试核心类型与工具 1. 静态应用安全测试(SAST) 知识点: 通过分析源代码、字节码或二进制文件识别漏洞(如SQL注入、缓冲区溢出)支持早期漏洞发现,减少修复成本,适合白盒测试场…

GPT-4o Image Generation Capabilities: An Empirical Study

GPT-4o 图像生成能力:一项实证研究 目录 介绍研究背景方法论文本到图像生成图像到图像转换图像到 3D 能力主要优势局限性与挑战对比性能影响与未来方向结论介绍 近年来,图像生成领域发生了巨大的变化,从生成对抗网络 (GAN) 发展到扩散模型,再到可以处理多种模态的统一生成架…

Redis之全局唯一ID

全局ID生成器 文章目录 全局ID生成器一、全局ID生成器的定义定义核心作用 二、全局ID生成器需满足的特征1. 唯一性&#xff08;Uniqueness&#xff09;​2. 高性能&#xff08;High Performance&#xff09;​3. 可扩展性&#xff08;Scalability&#xff09;​4. 有序性&#…

nginx中的代理缓存

1.缓存存放路径 对key取哈希值之后&#xff0c;设置cache内容&#xff0c;然后得到的哈希值的倒数第一位作为第一个子目录&#xff0c;倒数第三位和倒数第二位组成的字符串作为第二个子目录&#xff0c;如图。 proxy_cache_path /xxxx/ levels1:2 2.文件名哈希值

静态时序分析STA——8.1 时序检查(建立时间检查)

文章目录 一、时序路径组二、建立时间检查1. 触发器到触发器路径1&#xff09;时钟单元UCKBUF0的延迟计算2&#xff09;时钟源延迟&#xff08;clock source latency&#xff09; 2. 输入到触发器路径1) 虚拟时钟的输入路径2) 具有实际时钟的输入路径 3. 触发器到输出路径4. 输…

了解高速设计的信号完整性仿真

高速设计需要精确的信号传输&#xff0c;以确保最佳性能。信号完整性差会导致关键应用中的误码、数据损坏甚至系统故障等问题。介电常数、损耗角正切和插入损耗等因素会显著影响信号质量。通过使用信号完整性仿真&#xff0c;您可以及早发现并解决这些挑战。这种主动方法有助于…

RAGFlowwindows本地pycharm运行

Python环境准备 1. 安装pipx。如已经安装&#xff0c;可跳过本步骤&#xff1a; python -m pip install --user pipxpython -m pipx ensurepath## 验证安装pipx --version2. 安装 uv。如已经安装&#xff0c;可跳过本步骤&#xff1a; pipx install uv ## 设置为阿里云 PyPI…

STM32-FreeRTOS的详细配置

配置FreeRTOS 原文链接&#xff1a;https://ydamooc.github.io/posts/c9defcd/ 1.1 下载FreeRTOS 打开FreeRTOS官网&#xff1a;https://www.freertos.org/ 点击下载&#xff0c;并且选择"FreeRTOS 202212.01"版本&#xff0c;再点击Download按钮下载官方的资源包…

Linux笔记---动静态库(原理篇)

1. ELF文件格式 动静态库文件的构成是什么样的呢&#xff1f;或者说二者的内容是什么&#xff1f; 实际上&#xff0c;可执行文件&#xff0c;目标文件&#xff0c;静态库文件&#xff0c;动态库文件都是使用ELF文件格式进行组织的。 ELF&#xff08;Executable and Linkable…