Wireshark의 TCP SACK 및 DSACK: PCAP의 패킷 손실, sack_perm 옵션 및 재전송 진단

Wireshark PCAP의 TCP SACK, DSACK 및 sack_perm 옵션을 진단합니다. 선택적 승인, 패킷 손실 복구, 재정렬, 중복 ACK 및 허위 재전송을 다룹니다.

TCP 자루, dsack, 선택적 승인, 중복 자루, 패킷 손실, reordering, PCAP 분석

선택적 승인을 사용할 수 있으면 TCP 재전송 분석이 훨씬 더 정확해집니다. 추적에 중복된 ACK, 재전송 및 잘못된 패킷이 표시되지만 근본 원인이 불분명한 경우 사용자는 "TCP SACK pcap", "DSACK Wireshark", "duplicate SACK", "spurious retransmission", "TCP reordering vs packet loss" 및 "selective ACK packet Capture"를 검색합니다.

PCAP 수술은 SACK 증거가 TCP 옵션으로 전달되므로 유용합니다. 잘못된 패킷을 잘라내거나, 핸드셰이크를 잃거나, ACK를 데이터에서 분리하면 진단이 약해집니다.

SACK이 추가하는 것

기존 TCP ACK는 다음 예상 바이트를 승인합니다. 한 세그먼트가 누락되었지만 이후 세그먼트가 도착하는 경우 수신자는 간격에 대한 ACK만 계속 보낼 수 있습니다.

SACK은 수신자에게 다음과 같이 말합니다. "이전 범위는 아직 누락되었지만 이후 범위는 수신되었습니다."

이는 다음을 구별하는 데 도움이 됩니다.

  • 실제 패킷 손실.
  • 주문 외 배송.
  • 패킷이 중복되었습니다.
  • 수신기 동작.
  • 보낸 사람 복구 동작.

SACK을 협상해야 합니다.

SACK 기능은 SYN 및 SYN-ACK에서 협상됩니다. 핸드셰이크 이후 캡처가 시작되면 SACK이 허용되었는지 여부를 알 수 없습니다.

항상 보존:

  • SYN.
  • SYN-ACK.
  • SACK 허용 옵션.
  • 창 크기 옵션.
  • 타임스탬프 옵션이 있는 경우.

이것이 "재전송 주변의 작은 pcap"이 충분하지 않은 이유입니다.

SACK 블록이 포함된 중복 ACK

중복 ACK가 모두 같은 의미는 아닙니다. SACK 블록이 포함된 중복 ACK는 이후에 어떤 바이트 범위가 도착했는지 정확하게 발신자에게 알려줄 수 있습니다.

검사할 증거:

  • ACK 번호.
  • SACK 왼쪽 가장자리와 오른쪽 가장자리.
  • SACK 블록이 반복됩니다.
  • 새로운 SACK 정보.
  • 누락된 데이터가 나중에 표시되는지 여부.
  • 재전송으로 공백을 메울지 여부입니다.

이는 단순히 중복 ACK를 계산하는 것보다 훨씬 더 강력합니다.

패킷 손실과 재정렬 비교

세그먼트가 늦게 도착했지만 손실되지 않은 경우 SACK은 나중에 데이터가 이미 수신되었음을 표시할 수 있습니다. 보낸 사람이 재전송한 다음 원래 패킷도 도착할 수 있습니다. 지저분해 보일 수 있습니다.

질문:

  • 원래 구간이 늦게 도착했나요?
  • 재전송이 먼저 도착했나요?
  • DSACK이 나중에 중복 데이터를 보고했습니까?
  • 패킷을 재정렬하는 경로가 있습니까?
  • 버스트가 여러 링크, 터널 또는 로드 밸런싱된 경로를 통과하고 있습니까?

PCAP 수술은 정확한 시퀀스 범위를 분리하고 패킷 순서를 비교하는 데 도움이 될 수 있습니다.

DSACK의 의미

Duplicate SACK은 중복 데이터가 수신되었음을 보고할 수 있습니다. 이는 허위 재전송이나 재정렬을 식별하는 데 유용합니다.

DSACK 증거는 다음을 암시할 수 있습니다.

  • 발신자가 불필요하게 재전송했습니다.
  • 네트워크는 원본 데이터를 늦게 전달했습니다.
  • 점령 지점이 중복되었습니다.
  • 수신자는 원본 바이트와 재전송된 바이트를 모두 받았습니다.
  • 미들박스 중복 패킷.

이는 "패킷이 손실되었습니다."와는 다른 결론입니다.

가짜 재전송

재전송이 항상 손실의 증거는 아닙니다. 다음과 같은 요인으로 인해 발생할 수 있습니다.

  • Reordering.
  • 지연된 ACK 동작.
  • 오프로드 아티팩트를 캡처합니다.
  • 재전송 시간 초과가 너무 작습니다.
  • ACK 압축.
  • 가상화 타이밍.
  • 경로 비대칭.

SACK 및 DSACK은 데이터가 실제로 누락되었는지 또는 지연되었는지 여부를 입증하는 데 도움이 됩니다.

점령 지점이 중요합니다

pcap이 일방적이거나 NAT 뒤에 있는 경우 SACK 해석이 까다로울 수 있습니다. 패킷이 캡처 지점에는 없지만 수신자에는 있을 수 있습니다.

유용한 연습:

  • 송신측 캡처와 수신측 캡처를 비교합니다.
  • 타임스탬프를 동기화된 상태로 유지하세요.
  • 시퀀스 번호를 유지합니다.
  • ACK 전용 패킷을 잘라내지 마십시오.
  • 오프로드 및 캡처 위치를 기록합니다.

ACK 패킷이 없는 SACK 분석은 분석이 아닙니다.

디버그 체크리스트

다음 워크플로를 사용하세요.

  1. TCP 핸드셰이크를 유지하세요.
  2. SACK이 허용되는지 확인하세요.
  3. 첫 번째 중복 ACK를 찾습니다.
  4. SACK 블록을 디코딩합니다.
  5. SACK 범위를 데이터 패킷에 매핑합니다.
  6. 재전송된 시퀀스 범위를 식별합니다.
  7. DSACK을 확인하세요.
  8. 재주문으로 인한 손실을 분리하세요.
  9. 캡처 지점을 확인하고 컨텍스트를 오프로드하세요.
  10. 복구 이벤트 전후의 패킷을 보존합니다.

최종 진단

TCP SACK 및 DSACK은 패킷 손실, 재정렬, 중복 전달 및 허위 재전송에 대한 정확한 증거를 제공합니다. 핵심은 핸드셰이크 옵션, ACK 전용 패킷, SACK 블록 및 재전송된 시퀀스 범위를 보존하는 것입니다.

PCAP 수술은 증거를 그대로 유지하여 TCP 손실 분석이 일반적인 중복 ACK 수를 넘어설 수 있도록 도와줍니다.