继续以一个实际案例来说下 TCP 握手问题,该数据包仍然来自于 Wireshark sharkfest 2017,一些简短但有趣的 TCP 跟踪文件中的又一个。当然产生 TCP 握手异常的原因会有很多,一方面限于自己所掌握的知识程度,某些方面的知识点掌握和理解上还是会有所欠缺,分析自然会不到位,另外一方面也是老生常谈的问题,大多数的实际案例并不是亲身经历,缺少基础环境以及进一步分析可能需要的资源,像是多点捕获的对比、正常和异常现象的对比、模拟测试复现异常验证等等,所以有时候我不得不成为一个“猜测”的工程师,模糊根因。
数据包跟踪文件基本信息如下:
λ capinfos Sample02.pcapng
File name: Sample02.pcapng
File type: Wireshark/... - pcapng
File encapsulation: Ethernet
File timestamp precision: microseconds (6)
Packet size limit: file hdr: (not set)
Number of packets: 6
File size: 836 bytes
Data size: 350 bytes
Capture duration: 2.965008 seconds
First packet time: 2013-11-18 18:21:28.059918
Last packet time: 2013-11-18 18:21:31.024926
Data byte rate: 118 bytes/s
Data bit rate: 944 bits/s
Average packet size: 58.33 bytes
Average packet rate: 2 packets/s
SHA256: 00339945b951259fe0656842cda513f40dc412c816bda66578d4d06ce350314b
RIPEMD160: c4bfddc2f23c078def1ad98153b56d41d20b012a
SHA1: dd148ec87dc6b9714fc6dac5c583e4ffcc2ea4e5
Strict time order: True
Capture application: Sanitized by TraceWrangler v0.6.4 build 806
Number of interfaces in file: 1
Interface #0 info:
Name = \Device\NPF_{C09F8401-EC02-4BA6-9EA3-C9B992ECC7CF}
Encapsulation = Ethernet (1 - ether)
Capture length = 65535
Time precision = microseconds (6)
Time ticks per second = 1000000
Time resolution = 0x06
Operating system = Windows XP Service Pack 3, build 2600
Number of stat entries = 0
Number of packets = 6
数据包数量并不多,仅有 6 个,捕获持续时间为约 3 秒,平均速率 944 bits/s,在 Win XP 上通过 Wireshark 捕获,并经过 TraceWrangler 匿名化软件所处理,其他并没有什么特别的地方。
关于 TraceWrangler 匿名化软件简介,可以查看之前的文章《Wireshark 提示和技巧 | 如何匿名化数据包》
专家信息如下,同样因数据包很少,也没有些特别的提示,仅仅有一条 Warning RST 信息。

展开完整的数据包文件信息,如下

数据包 No.1-2

关于如何判断捕获点的说明,请查看之前的文章《Wireshark 提示和技巧 | 捕获点之 TCP 三次握手》。
数据包 No.3-6

综上所述,这个不成功连接的案例,并不只是一个不稳定的连接,包括客户端和服务器双方面都会有一些不同寻常的现象。
当然一方面是真的有问题,另一方面可能是不同系统内核实现不一样,进而产生的一些附加现象。甚至说在协议栈测试工具以及数据包编辑工具的存在下,这是否是一个真实的案例也说不好。
仅仅是 6 个数据包,带给我们的思考却很多很多。