PcapSplitterにおけるサイレントパケットロス:TCPセッション再利用時のファイル衝突バグ
著者は、tsharkでラップされたツールを使用して大きなPCAPファイルを処理中にファイル破損の問題に遭遇しました。最初の問題は、tsharkのエラーで、大きなファイルにおける「Total Block Length」の問題を示していました。PCAP処理を並列化した後、ファイル破損がより顕著になりました。再現テストにより、PcapSplitterは正常終了したにもかかわらず、ディスク上に実際に存在するよりも多くのファイルとパケットを報告することが明らかになりました。ファイルディスクリプタの枯渇と、PcapSplitterの同時ファイル処理におけるハードコードされた制限という2つの誤った仮説が調査され、除外されました。真の原因はPcapSplitterのFiveTupleSplitter、特にTCPセッションの再利用に関する部分にあることが特定されました。既に追跡されているファイブタプルに対して新しいSYNパケットが到着した場合、スプリッターは誤って新しいファイル番号を割り当てましたが、IPとポートのみを使用して同じファイル名を生成しました。これにより、ファイルが切り捨てられるか、2つのライターハンドラ間で競合状態が発生しました。実際の衝突時にのみファイル名にサフィックスを追加する修正が開発されました。この修正はテストされ、PcapSplitterライブラリにマージされました。