Wireshark TS | 再谈虚假的 TCP Spurious Retransmission

前言

在之前的《虚假的 TCP Spurious Retransmission》文章中曾提到一个错误判断为 TCP Spurious Retransmission,实际为 TCP Out-Of-Order 的案例,本次继续探讨一个虚假的 TCP Spurious Retransmission 案例。

问题背景

TCP Spurious Retransmission ,Wireshark TCP 分析标志位的一种,文档定义如下:

Checks for a retransmission based on analysis data in the reverse direction. Set when all of the following are true:The SYN or FIN flag is set.
This is not a keepalive packet.
The segment length is greater than zero.
Data for this flow has been acknowledged. That is, the last-seen acknowledgment number has been set.
The next sequence number is less than or equal to the last-seen acknowledgment number.Supersedes “Fast Retransmission”, “Out-Of-Order”, and “Retransmission”.

简单来说,是在数据包跟踪文件中已经被 ACK 确认过的数据分段,又再一次被重传发送,那么这个重传的数据分段会被标记为 [TCP Spurious Retransmission]

本案例所说的虚假的 [TCP Spurious Retransmission],虽然也指的是 Wireshark 判断错误,但真实的问题并不是 Wireshark 所产生。

问题信息

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

λ capinfos "SR 02.pcapng"
File name:           SR 02.pcapng
File type:           Wireshark/... - pcapng
File encapsulation:  Ethernet
File timestamp precision:  nanoseconds (9)
Packet size limit:   file hdr: (not set)
Packet size limit:   inferred: 58 bytes
Number of packets:   20
File size:           2304 bytes
Data size:           15 kB
Capture duration:    0.135371488 seconds
First packet time:   2023-05-08 09:30:00.473685315
Last packet time:    2023-05-08 09:30:00.609056803
Data byte rate:      111 kBps
Data bit rate:       892 kbps
Average packet size: 755.00 bytes
Average packet rate: 147 packets/s
SHA256:              a57b14efacc0da4d119336110c39c193fb06d775632033e909cdae5c6c6b26e8
SHA1:                50b8444b92baaffcf5c29068717d258a99bc3893
Strict time order:   True
Capture application: Editcap (Wireshark) 4.0.5 (v4.0.5-0-ge556162d8da3)
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 = nanoseconds (9)Time ticks per second = 1000000000Time resolution = 0x09Number of stat entries = 0Number of packets = 20

数据包文件通过 NPM 回溯分析下载,并根据 IP 通讯对做过特定过滤,且经过 TraceWrangler 匿名化软件处理。由于是截取数据包原因,所以捕获总时长为 0.135 秒多,数据包数量 20 个 ,传输速率 892 kbps。

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

专家信息如下,因为数据包特定截取且数量较少,所以仅有虚假重传、重传、ACK确认未捕获的分段等几个常见问题。

问题分析

展开数据包跟踪文件实际信息如下:

首先 79.194.24.85 为发送端,116.115.175.186 为接收端,接收端 No.11 ACK Num 为 7087 ,确认了 Seq Num 7087 之前的所有数据分段,但实际上因为发送端 No.10 的 Seq Num 5322 + Len 1460 < 7087,所以 No.11 标识为 [TCP ACKed unseen segment] 表明确认了未看到的数据段。

继续往下看,由于 No.11 ACK Num 为 7087,所以 No.12 Seq Num 6782 + Len 305 = 7087,疑似又重传了一遍,因此符合判断条件,标识为 [TCP Spurious Retransmission]

好吧,一切看起来挺合理,但为什么又说是判断错误呢?想到上篇文章提到的凡事深想一层,干活多做一步,再瞅瞅 ip.id ,你会发现发送端的 ip.id 确实是顺序递增的,并没有出现上一个案例中发送端的数据段乱序情况。

但实际上更进一步的思考,你会发现不管是哪个抓包点(发送端、接收端或中间),又或是哪种乱序以及重传的场景,都不可能发生图示下的情况,ACK 确认数据分段在前,实际数据分段在后的情况。

那么问题是什么?实际问题仍是乱序,但仅仅是 No.11 和 No.12 两个数据包之间的乱序,修正后的数据包文件如下,可以看见一切恢复正常。

但是为什么会出现这样的情况,乱序的数据段出现在了 ACK 确认之后。之后仍是在数据包文件中发现的端倪,发送端和接收端两个方向的 Vlan ID 不一致,该 Vlan ID 是通过镜像在 TAP 上标记,由此推断出可能造成乱序的原因是由于取自两个镜像会话,再经过 TAP 采集,最终到真正数据包被捕获时,数据包到达的顺序可能就会发生一定乱序,当然时间差距会看起来很小,本案例也就在1微秒左右。

问题总结

所以仅仅是捕获数据包的问题,实际的生产交互完全不会有这样的问题,因此类似这样的案例学习了解原因即可,也就完全没必要在 Wireshark 中手动修改该重传数据包为乱序,没有意义。

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

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

相关文章

Redis常用的五种数据结构详解

一、Redis 数据库介绍 Redis 是一种键值&#xff08;Key-Value&#xff09;数据库。相对于关系型数据库&#xff08;比如 MySQL&#xff09;&#xff0c;Redis 也被叫作非关系型数据库。 像 MySQL 这样的关系型数据库&#xff0c;表的结构比较复杂&#xff0c;会包含很多字段&…

Effective Objective-C 2.0 读书笔记——内存管理(上)

Effective Objective-C 2.0 读书笔记——内存管理&#xff08;上&#xff09; 文章目录 Effective Objective-C 2.0 读书笔记——内存管理&#xff08;上&#xff09;引用计数属性存取方法中的内存管理autorelease保留环 ARCARC必须遵循的方法命名原则ARC 的自动优化&#xff1…

PyTorch 混合精度训练中的警告处理与代码适配指南

在最近的 PyTorch 项目开发中&#xff0c;遇到了两个与混合精度训练相关的警告信息。这些警告主要涉及 torch.cuda.amp 模块的部分 API 已被标记为弃用&#xff08;deprecated&#xff09;。本文将详细介绍这些警告的原因、解决方法以及最佳实践。 警告内容 警告 1: torch.cud…

STM32自学记录(九)

STM32自学记录 文章目录 STM32自学记录前言一、DMA杂记二、实验1.学习视频2.复现代码 总结 前言 DMA 一、DMA杂记 DMA&#xff08;Direct Memory Access&#xff09;直接存储器存取 DMA可以提供外设和存储器或者存储器和存储器之间的高速数据传输&#xff0c;无须CPU干预&…

鸿蒙Harmony-UIAbility内状态-LocalStorage详细介绍

鸿蒙Harmony-UIAbility内状态-LocalStorage详细介绍 1.1 Localstorage的概念 LocalStorage是页面级的UI状态存储&#xff0c;通过Entry装饰器接收的参数可以在页面内共享同一个LocalStorage实例&#xff0c;LocalStorage也可以在UIAbility内&#xff0c;页面间共享状态 1.2 Lo…

SiliconCloud 支持deepseek,送2000w token

SiliconCloud SiliconCloud 邀请奖励持续进行&#xff0c;2000 万 Tokens 送不停&#xff01; 邀请好友赚 2000 万 Tokens&#xff1a;每成功邀请一位新用户通过手机号码注册&#xff0c;您将获得 2000 万 Tokens&#xff1b;注册即送 2000 万 Tokens&#xff1a;受邀好友作为…

ubuntu服务器部署

关闭欢迎消息 服务器安装好 ubuntu 系统后&#xff0c;进行终端登录&#xff0c;会显示出很多的欢迎消息 通过在用户的根目录下执行 touch .hushlogin 命令&#xff0c;再次登录终端就不会出现欢迎消息 修改hostname显示 修改 /etc/hostname 文件内容为主机名&#xff0c;保…

排序算法——人无完人

没有哪一个排序方法是完美的&#xff0c;对于不同的需求&#xff0c;排序算法各有自己的优势。金无足赤&#xff0c;人无完人。 &#xff08;这里不再重复所讲排序算法的实现&#xff0c;网上已有很多好的教学。&#xff09; 排序方法除了依靠时间复杂度和空间复杂度来区分&am…

3D模型可视化引擎HOOPS Visualize在桌面端的支持有哪些特点?

在数字化转型日益加速的今天&#xff0c;工业和工程领域的专业人员面临着越来越复杂的设计和数据分析需求。3D模型可视化技术应运而生&#xff0c;并成为了加速设计和制造流程的关键工具。作为业界领先的3D可视化引擎之一&#xff0c;HOOPS Visualize提供了一系列强大的桌面端支…

傅里叶变换推导

基本模型 假设在二维直角坐标系中&#xff0c;可以用相互垂直的基向量和表示&#xff1a; 假设&#xff1a; 假设在上的投影为&#xff0c;那么&#xff1a; 所以&#xff1a; 用公式表达&#xff1a; 但是在实际中&#xff0c;基向量和不一定长度都是1&#xff0c;重新推导一…

数据科学之数据管理|python for office

现如今&#xff0c;随着计算机的逐渐普及。现代化办公成为每个职场人必备的技能&#xff0c;本文档就来介绍&#xff0c;如何使用pytohn实现自动化办公。然而&#xff0c;自动化办公有时并不能减少工作量。自动化办公更适合批量处理文档。单一的文件&#xff0c;小金不建议使用…

【前端框架】Vue3 中 `setup` 函数的作用和使用方式

在 Vue 3 里&#xff0c;setup 函数是组合式 API 的核心入口&#xff0c;为开发者提供了更灵活、高效的组件逻辑组织方式。以下为你详细介绍其作用和使用方式&#xff1a; 作用 1. 初始化响应式数据 在 setup 函数中&#xff0c;我们能够使用 ref 和 reactive 等函数来创建响…

MySQL无法连接到本地localhost的解决办法2024.11.8

问题描述&#xff1a;我的MySQL可以远程连接服务器&#xff0c;但无法连接自己的localhost。 错误提示&#xff1a; 2003 - Cant connet to MySQL server on localhost(10061 "Unknown error")查找问题原因&#xff1a; 1. 检查环境变量是否正确&#xff1a;发现没…

STM32HAL库快速入门教程——常用外设学习(2)

目录 一、STM32HAL库开发&#xff08;8&#xff09;——CubeMX配置DMA 1.1、什么是DMA&#xff1f; 1.2、内存内存之间的传输&#xff08;单次&#xff09; ​编辑 1.3、内存外设之间的传输&#xff08;ADC&#xff09; 二、STM32HAL库开发&#xff08;9&#xff09;——…

LabVIEW与小众设备集成

在LabVIEW开发中&#xff0c;当面临控制如布鲁克OPUS红外光谱仪这类小众专业设备的需求&#xff0c;而厂家虽然提供了配套软件&#xff0c;但由于系统中还需要控制其他设备且不能使用厂商的软件时&#xff0c;必须依赖特定方法通过LabVIEW实现设备的控制。开发过程中&#xff0…

PyQt组态软件 拖拽设计界面测试

PyQt组态软件测试 最近在研究PyQt,尝试写个拖拽设计界面的组态软件&#xff0c;目前实现的功能如下&#xff1a; 支持拖入控件&#xff0c;鼠标拖动控件位置 拖动控件边缘修改控件大小支持属性编辑器&#xff0c;修改当前选中控件的属性 拖动框选控件&#xff0c;点选控件 控…

AI如何与DevOps集成,提升软件质量效能

随着技术的不断演进&#xff0c;DevOps和AI的融合成为推动软件开发质量提升的重要力量。传统的DevOps已经为软件交付速度和可靠性打下了坚实的基础&#xff0c;而随着AI技术的加入&#xff0c;DevOps流程不仅能提升效率&#xff0c;还能在质量保障、缺陷预测、自动化测试等方面…

Mac配置Flutter开发环境

1、访问 Flutter 官网&#xff0c;下载安装Flutter SDK 2、将 Flutter 添加到 PATH 环境变量 找到用户文件夹中的.zshrc隐藏文件&#xff08;隐藏文件显示方式&#xff1a;shiftcommand.&#xff09;&#xff0c;打开.zshrc文件&#xff0c;添加Flutter SDK路径&#xff0c;注…

Linux系统使用ollama本地安装部署DeepSeekR1 + open-webui

Linux系统使用ollama本地安装部署DeepSeekR1 open-webui 1. 首先&#xff0c;下载安装ollama #下载安装脚本并执行 curl -fsSL https://ollama.com/install.sh | sh #安装完成后查看ollama版本 ollama --version2. 使用ollama下载deepseek #不同的参数规格对硬件有不同的要…

【Kubernetes】常用命令全解析:从入门到实战(中)

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《Kubernetes航线图&#xff1a;从船长到K8s掌舵者》 &#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、引言 1、什么是k8s 2、K8s的核心功能 二、资…