PcapSplitter 中的静默丢包:TCP 会话复用中的文件冲突缺陷
作者在处理大型 PCAP 文件时,使用了一个封装 tshark 的工具遇到了文件损坏问题。初始问题表现为 tshark 报错,指出大文件存在"Total Block Length"异常。在实现 PCAP 处理并行化后,文件损坏问题变得更加明显。复现实验显示,尽管 PcapSplitter 成功退出,但其报告的文件数和包数均多于磁盘上实际存在的数量。作者调查并排除了两个错误假设:文件描述符耗尽以及 PcapSplitter 并发文件处理中存在硬编码限制。根本原因被定位在 PcapSplitter 的 FiveTupleSplitter 组件,具体涉及 TCP 会话复用机制。当针对已跟踪的五元组(five-tuple)到达新的 SYN 包时,分割器错误地分配了新的文件编号,但仅依据 IP 地址和端口生成了相同的文件名。这导致文件被截断,或引发两个写入处理器之间的竞态条件。为此开发了一个修复方案,仅在发生实际文件名冲突时才为文件名添加后缀。该修复方案已测试并通过,已合并至 PcapSplitter 库。