题目背景
仍然是来自于朋侪分享的一个案例,实际案例不难,原因也就是互联网线路丢包产生的重传题目。但从一开始只看到数据包截图的判断结果,和最后拿到实际数据包的分析结果,却不是一个结论,方向有点跑偏,以是记载下本篇。
题目信息
开局的数据包截图大概就如下,一堆超时重传信息,题目是什么,不熟悉的可能直接就说是丢包了,像我稍微熟悉的,一眼感觉就像是互联网常见的 MTU 题目,客户端发送的数据包 Len 2760 也就是 2 个 MSS 1380 的大小,在中间传输过程中碰到了 MTU 题目, 以至于 1380 大小的数据包被抛弃,因此产生了浩繁超时重传。

基于以上截图,初始结论就是互联网线路题目,根因是 MTU 。但总有不测的事发生,等我拿到了实际数据包仔细分析,固然还是互联网线路产生的丢包题目,但根因却不是 MTU 了,初始结论错误。
数据包跟踪文件信息重要如下:
- λ capinfos 1220.pcapng
- File name: 1220.pcapng
- File type: Wireshark/... - pcapng
- File encapsulation: Ethernet
- File timestamp precision: microseconds (6)
- Packet size limit: file hdr: (not set)
- Packet size limit: inferred: 54 bytes
- Number of packets: 40
- File size: 4264 bytes
- Data size: 37 kB
- Capture duration: 14.583142 seconds
- First packet time: 2023-12-18 07:35:28.365933
- Last packet time: 2023-12-18 07:35:42.949075
- Data byte rate: 2553 bytes/s
- Data bit rate: 20 kbps
- Average packet size: 931.10 bytes
- Average packet rate: 2 packets/s
- SHA256: 096e0919a13f8ff2c0b8b4691ff638c14345df621ecd9157daa3b3ce3447b88c
- SHA1: 3267274c4fce576dde3446d001372b9b34f15717
- Strict time order: True
- Capture application: Editcap (Wireshark) 4.2.0 (v4.2.0-0-g54eedfc63953)
- 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 = 262144
- Time precision = microseconds (6)
- Time ticks per second = 1000000
- Time resolution = 0x06
- Number of stat entries = 0
- Number of packets = 40
复制代码 客户端通过 Wireshark 捕捉数据包,捕捉时长 14.58s,数据包数目 40 个,文件大小 4.264 字节,匀称速率约 20kbps,总体上来说速率很低。数据包颠末 Editcap 编辑和 TraceWrangler 处理惩罚,一方面是改了文件格式,另一方面就是重要的匿名。
关于 TraceWrangler 匿名化软件简介,可以检察之前的文章《Wireshark 提示和技巧 | 如何匿名化数据包》
专家书息如下,数据包总数 40 的情况下,疑似重传数据包数目就有 12 个,该 TCP 连接的质量可想而知。

题目分析
首先是 TCP 三次握手,客户端和服务器各自所通告的 MSS 为 1460 和 1380 ,两者取小为 1380 ,以是最后传输遵照的最大 TCP 分段就是 1380。另 IRTT 0.027269 秒,同时支持 SACK 和 WS 。
客户端 192.168.38.134 所发送的数据,在直到产生题目的 No.18 Len 2760 之前,数据包长度还是小分段 213、129、105、737 等,这也确实容易第一眼给人错觉,像是 No.18 之后 MSS 1380 的数据分段发生了 MTU 题目造成丢包重传。

我们将数据包分成三段,No.1-3 TCP 三次握手,No.4-16 正常数据交互,No.17 以及之后为题目点,重点分析。

分析全过程如下:
- No.17-22 均为客户所发送的数据分段,除了 No.17 Len 683 较小分段外,其他均为 1 或 2 个 MSS 1380 分段;
- 颠末一个 RTT 时间,服务器端返回的 No.23 ACK Num 969 仅仅确认了 No.17 ,紧接着的 No.24 即判断为 TCP Dup ACK,因为它的 ACK Num 仍为 969,并携带有 SACK 标识 SLE 7869,SRE=9249。此处关键,代表说明确认收到了客户端所发送的 Seq Num 969 之前以及 Seq Num 7869-9249 之间的数据,意味着服务器端还是收到了一个 9249-7869=1380 MSS 大小的数据分段,以是并不是初始结论,超出了中间路径 MTU 大小而造成所有 MSS 1380 大小的数据包被抛弃;
- 但题目还是中间互联网线路中间发生了丢包,哪些数据分段丢失了?No.18-20 , Seq Num 969 - 7869 之间的数据。 由于客户端收到了 No.24 SACK ,以是紧接着进行了 No.25-26、No.28-29 的快速重传,思量到拥塞窗口减小的缘故,只重传了 Seq Num 969 - 6489 的数据,而 Seq Num 6489 - 7869 并未发送。期间也收到了一个客户端 No.27 SACK,确认又收到了一个 Seq Num 9249 - 10629 =1380 MSS 大小的数据分段;
- 不幸的是,颠末一个 RTT 时间,服务器端返回的 No.30 SACK 仅确认了 Seq Num 2349 之间的数据,也就是相较之前,只多确认收到了一个 MSS 1380 的数据分段,而 SLE,SRE 没有任何变化,说明之前重传的数据包又发生了丢包;
- 此时拥塞窗口继续减小,客户端仅发送了一个 No.31 的新数据分段,以及再次重传了 No.32 Seq Num 为 2349 的数据分段,因为 No.30 代表缺失了 Seq Num 2349 - 7869 之间的数据;
- 服务器返回的 No.33 SACK 继续仅多确认了一个 MSS 1380 大小的数据,ACK Num 为 3729,客户端再次重传 No.34-35;
- 之后 No.34 - No.40 ,客户端进行了多次超时重传,超时时间明显不停翻倍,此时不管是中间互联网线路持续丢包,还是服务器端因长时间等候已释放连接,总之不再有确认返回。
题目总结
整个分析过程中因为多出了 SLE SRE 的缘故,判断出的题目根因也发生了变化,并非 MTU 题目。而最终经朋侪反馈,应用传输丢包题目的原因就是运营商线路丢包,符合实际数据包征象(丢失的数据分段无规律可言),毕竟数据包从不说谎。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |