PcapSplitter의 무음 패킷 손실: TCP 세션 재사용 시 파일 충돌 버그
저자는 대용량 PCAP 파일을 tshark 래핑 도구로 처리하는 동안 파일 손상 문제를 겪었습니다. 초기 문제에는 대용량 파일에서 "Total Block Length" 문제를 나타내는 tshark 오류가 포함되었습니다. PCAP 처리를 병렬화한 후 파일 손상이 더욱 명확해졌습니다. 재현 결과 PcapSplitter가 성공적으로 종료되었음에도 불구하고 디스크에 실제로 존재하는 것보다 더 많은 파일과 패킷을 보고했습니다. 파일 디스크립터 고갈과 PcapSplitter의 동시 파일 처리에서 하드코딩된 제한이라는 두 가지 잘못된 이론이 조사되었지만 배제되었습니다. 진정한 원인은 PcapSplitter의 FiveTupleSplitter, 특히 TCP 세션 재사용과 관련된 부분에서 확인되었습니다. 이미 추적 중인 다섯 개의 튜플에 대한 새로운 SYN 패킷이 도착했을 때, 스플리터는 잘못하여 새 파일 번호를 할당했지만 IP와 포트만 사용하여 동일한 파일 이름을 생성했습니다. 이로 인해 파일이 잘리거나 두 개의 작성자 핸들러 간의 경쟁 조건이 발생했습니다. 실제 충돌 시에만 파일 이름에 접미사를 붙이는 수정 사항이 개발되었습니다. 이 수정 사항은 테스트를 거쳐 PcapSplitter 라이브러리에 병합되었습니다.