当前位置:网站首页>Wireshark TS | 快速重传和乱序之混淆
Wireshark TS | 快速重传和乱序之混淆
2022-07-01 10:15:00 【7ACE】
问题背景
网络数据包分析工作做久了,习惯性的就会存有一堆的跟踪文件,不及时整理的话,下次再看到有的跟踪文件就完全记不起来是什么情况了。 两眼墨黑
本次案例就是如此,跟踪文件名 client-fast-retrans.pcapng,乍看名字是关于快速重传的案例,准备分类重新存放的时候顺手打开了下,不瞅还好,一瞅还发现了一个 Wireshark TCP Analysis 的问题,故分享记录下。
问题信息
数据包跟踪文件基本信息如下:
$ capinfos client-fast-retrans.pcapng
File name: client-fast-retrans.pcapng
File type: Wireshark/... - pcapng
File encapsulation: Ethernet
File timestamp precision: microseconds (6)
Packet size limit: file hdr: (not set)
Number of packets: 27
File size: 17 kB
Data size: 17 kB
Capture duration: 0.311468 seconds
First packet time: 2015-06-02 22:11:59.655051
Last packet time: 2015-06-02 22:11:59.966519
Data byte rate: 54 kBps
Data bit rate: 436 kbps
Average packet size: 629.70 bytes
Average packet rate: 86 packets/s
SHA256: 6ee7b5061a54bc22b44fe5bdbd10d7f0fcc2fdb63dd45f9bbf3327eefb15a191
RIPEMD160: cd8614df4aa3316508290308c4b875459b9a9419
SHA1: 42704ab0674942a2cfcd77404784c7409b67283c
Strict time order: True
Capture application: Editcap 2.6.13
Number of interfaces in file: 1
Interface #0 info:
Encapsulation = Ethernet (1 - ether)
Capture length = 65535
Time precision = microseconds (6)
Time ticks per second = 1000000
Number of stat entries = 0
Number of packets = 27
- 文件应该为 tcpdump 所捕获,之后在 windows 上通过 editcap 所修改过;
- 数据包数量 27 个,平均速率 436 kbps;
- 从数据包捕获时间来看是在 2015-06-02 。( 说明该跟踪文件来自互联网收集)
因为跟踪文件数据包数量总共就 27 个,专家信息所显示的一些问题像是重传或是快速重传的数量也就只 1 个。

问题分析
实际数据包分析,TCP 三次握手主要如下


完整数据包信息如下

跟踪文件为一个 HTTP 交互,在 TCP 三次握手正常建立连接后,客户端进行了 HTTP GET 请求了一个大小为 100MB 的 bin 文件,服务器响应 HTTP 200 OK ,之后正常传输文件。
首先说到一个常谈的问题,如何判断该跟踪文件的捕获点是哪?
- IRTT,IRTT 为 0.103362s ,从 TCP 三次握手 SYN-SYN/ACK-ACK 的时间差值,初步判断捕获点为客户端或靠近客户端的地方;
- Length ,首先可以看的是纯 ACK 数据包的长度,但是因为客户端和服务器端通过 TCP 三次握手协商下来的结果是均支持 TCP OPT 时间戳,所以纯 ACK 数据包的长度并不是 54 字节,无法根据小于 60 字节的情况判断是在客户端上所捕获,辅助判断无效;
- TTL,其次查看 TTL ,客户端的 TTL 为 64 ,仍是一个 Linux 系统始发值,因为有可能在客户端所连接的二层接入交换机上所捕获(TTL 也是 64),所以辅助判断也无效。
该跟踪文件最后只能判断是在客户端或靠近客户端的二层交换环境上所捕获。
关于如何判断跟踪文件的捕获点,有兴趣的同学可以查看之前一篇完整的文章《捕获点之 TCP 三次握手》。
回到数据包快速重传问题,主要信息如下

初看下来好像和普通的快速重传现象没什么区别,初步分析过程:
- 服务器所发的数据包 No.20 前丢了一个 TCP 分段 Seq 9577 ,所以 No.20 标记为
TCP Previous segment not captured; - 客户端回应第一个 No.21 DUP ACK 确认还要 Seq 9577 分段(原 ACK 在 No.19);
- 服务器下一个数据包 No.22 仍不是 TCP 分段 Seq 9577;
- 因此客户端回应第二个 No.23 DUP ACK 确认继续要 Seq 9577 分段;
- 此时服务器像是因为 DUP ACK 的原因触发了快速重传,发送了 No.24 Seq 9577 数据包,因此 Wireshark 在此标记为
TCP Fast Retransmisson。
所以感觉像是 Wireshark 判断为快速重传确实合情合理,但是细细一琢磨,会发现里面有些问题:
- IRTT,IRTT 为 0.103362s ,说明客户端和服务器端 RTT 约为 103ms,如果捕获点在客户端,No.24 和 No.23 之间的时间差值仅为 71ns。试问从客户端发出 No.23 到服务器收到 No.23 之后触发快速重传,再到客户端所捕获,这个 71ns 的时间完全不符合现实;
- DUP ACK,DUP ACK 的数量仅为 2 个,根据 RFC 2581 描述,触发快速重传是需要三个 DUP ACK 的,而在此跟踪文件仅有 2 个 DUP ACK,并不符合条件。
但为什么 Wireshark 会判断为快速重传,这个自然是 Wireshark TCP 分析的逻辑,TCP Fast Retransmission 部分说明如下(有兴趣的同学也可以直接查看源代码)。在以下条件完全满足的情况下,Wireshark 会标记为快速重传,用以替代乱序或重传。
TCP Fast Retransmission
Set when all of the following are true:
This is not a keepalive packet.
In the forward direction, the segment size is greater than zero or the SYN or FIN is set.
The next expected sequence number is greater than the current sequence number.
We have more than two duplicate ACKs in the reverse direction.
The current sequence number equals the next expected acknowledgement number.
We saw the last acknowledgement less than 20ms ago.
Supersedes “Out-Of-Order” and “Retransmission”.
从以上条件来看,一是 Wireshark 没有考虑上下文数据包时间差值的问题,所以忽略了 RTT 问题;二是 Wireshark 考虑到可能有 DUP ACK 丢失的情况下出现,所以在 >=2 个 DUP ACK 的时候就会判断为成快速重传,但这个绝对不是真正的 TCP 快速重传实现(必须满足 3个 DUP ACK)。
那么 No.24 数据包不是快速重传的话,它到底是什么?肯定不会是超时重传,那么它就只能是乱序。拿着乱序的逻辑重新去梳理该交互过程,是完全正确的。
- 服务器所发的数据包 TCP 分段 Seq 9577 发生乱序,并未在 No.20 之前到达;
- 服务器所发的数据包 No.20 前因为没有 TCP 分段 Seq 9577 ,所以 No.20 标记为
TCP Previous segment not captured; - 客户端回应第一个 No.21 DUP ACK 确认要 Seq 9577 分段(原 ACK 在 No.19);
- 服务器下一个数据包 No.22 仍不是 TCP 分段 Seq 9577;
- 因此客户端回应第二个 No.23 DUP ACK 确认继续要 Seq 9577 分段;
- 此时服务器所发的数据包 TCP 分段 Seq 9577 乱序后姗姗来迟,因此 Wireshark 正确的判断应该在此标记为
TCP Out-Of-Order。
也可以利用 IP.ID 加以佐证,No.24 的 IP ID 为 49749 ,在 No.20 和 No.22 之前,因此乱序无疑。

再次看看科来分析器是如何判断的,准确的判断为 乱序 。 国产之光~

问题总结
目前 Wireshark 的使用版本为 Version 3.6.3 (v3.6.3-0-g6d348e4611e2) ,暂没有深究是否是一个 BUG,还是说可以提一个增强功能给 Wireshark,更或许 Wireshark 认为此 TCP 分析实现逻辑是有它自己的道理的。因为确实数据包的世界太多各种各样的现象,一切皆有可能。
感谢阅读,更多技术文章可关注个人公众号:Echo Reply ,谢谢。
边栏推荐
- This is the best flash popular science article I have ever seen!
- Centos 配置discuz 提示请检查 mysql 模块是否正确加载
- mysql截取_mysql截取字符串的方法[通俗易懂]
- 日本教授起诉英特尔FPGA与SoC产品侵犯一项设计专利
- How to understand JS promise
- IDEA运行报错Command line is too long. Shorten command line for...
- 7-Zip boycotted? The callers have committed "three crimes": pseudo open source, unsafe, and the author is from Russia!
- Graduation summary of actual combat camp
- Superscalar processor design yaoyongbin Chapter 4 branch prediction -- Excerpt from subsection 4.1
- How did the data center change from "Britney Spears" to "Mrs. cow"?
猜你喜欢

Apple amplification! It's done so well

This is the best flash popular science article I have ever seen!

I like two men...

Can you afford to buy a house in Beijing, Shanghai, Guangzhou and Shenzhen with an annual salary of 1million?

好高的佣金,《新程序员》合伙人计划来袭,人人皆可参与!

Common penetration tools -goby

零基础入行软件测试必看,10年测试老鸟的良心建议(共15条)

日本教授起诉英特尔FPGA与SoC产品侵犯一项设计专利

渗透常用工具-Goby

In the new database era, don't just learn Oracle and MySQL
随机推荐
【黑马早报】俞敏洪称从来不看新东方股价;恒驰5将于7月开启预售;奈雪虚拟股票或涉嫌非法集资;7月1日起冰墩墩停产...
CSDN's one-stop cloud service is open for internal testing, and new and old users are sincerely invited to grab the fresh
SQL optimization - in and not in, exist
缺少比较器,运放来救场!(运放当做比较器电路记录)
【论文阅读】Trajectory-guided Control Prediction for End-to-end Autonomous Driving: A Simple yet Strong Ba
Button button clear border
《天天数学》连载55:二月二十四日
Which securities company has a low, safe and reliable Commission for stock trading and account opening
Graduation summary of actual combat camp
程序员都想去国企?技术落后薪资低,躺平几年出来都找不到工作...
零基础入行软件测试必看,10年测试老鸟的良心建议(共15条)
Po mode deep encapsulation
建议收藏 | 在openGauss上遇到慢SQL该怎么办?
【Matytype】在CSDN博客中插入Mathtype行间与行内公式
mysql cdc能把能把op字段拿出来吗
SQLAchemy 常用操作
Sqlization is the first step in ETL incremental production. What are the core capabilities of such an architecture?
SQL 化是 ETL 增量生产的第一步,这样的架构的核心能力是什么?
数字藏品市场新局面
The programmer was beaten.