TCP 수신 버퍼의 누락 구간과 SACK 블록을 나타낸 개념 이미지

TCP의 누적 확인응답(ACK)은 연속해서 받은 데이터 다음의 바이트 위치를 나타냅니다. 중간 누락 뒤의 데이터가 도착해도 누적 ACK만으로는 어느 후속 구간이 이미 수신됐는지 충분히 보이지 않을 수 있습니다. 선택 확인응답(SACK)은 비연속 수신 블록을 추가로 알려 송신자가 도착한 데이터를 불필요하게 다시 보내지 않도록 돕습니다. SACK는 손실 복구 정보를 보태지만 TCP의 재전송과 혼잡제어 전체를 대신하지는 않습니다.

협상과 누적 ACK의 차이

RFC 2018에 따르면 SACK를 받을 수 있는 TCP는 연결 설정 SYN에서 SACK-Permitted 옵션을 보낼 수 있습니다. 연결 뒤 수신자는 SACK 옵션에 비연속 시퀀스 범위의 양 끝을 실어 보냅니다. 누적 ACK 필드의 의미는 바뀌지 않습니다. ACK 번호는 연속해서 확인된 위치를 나타내고, SACK 블록은 구멍 때문에 누적 확인이 진행되지 않는 동안 이미 받은 뒤쪽 데이터 범위를 표시합니다.

예를 들어 구간 A가 빠지고 그 뒤 B와 C가 도착하면 누적 ACK는 A 앞에서 멈춰도 SACK는 B와 C를 알릴 수 있습니다. 송신자는 이를 전송 대기열과 대조해 수신된 범위를 기록합니다. TCP 옵션 공간은 제한되므로 모든 블록을 한 ACK에 담지 못할 수 있습니다. RFC는 최신 변화와 일부 이전 블록을 반복 보고하도록 권하지만 ACK 손실이나 공간 부족은 송신자의 상태 파악을 늦추거나 불완전하게 할 수 있습니다.

송신 점수판으로 재전송 후보를 구분한다

RFC 2018은 전송했지만 누적 확인되지 않은 세그먼트 큐를 두고 SACK로 받은 범위를 표시하는 한 구현 방식을 설명합니다. 이후 재전송을 고를 때 이미 SACK된 구간은 건너뛰고, 확인되지 않은 구간을 후보로 남길 수 있습니다. 이 내부 기록을 흔히 SACK 점수판이라고 부릅니다. 수신 측이 보고한 범위를 송신 측의 기록에 연결하는 것으로, 규격이 운영체제별 전체 알고리즘을 하나로 정하지는 않습니다.

한 전송 윈도우에서 여러 구간이 손실되면 누적 ACK만 이용할 때보다 수신된 데이터와 빈 구간을 더 구체적으로 구분할 수 있습니다. 그러면 이미 도착한 뒷부분을 반복 전송할 필요가 줄어들 수 있습니다. 그러나 재전송 시점과 빠른 복구의 동작은 손실 감지·혼잡제어 알고리즘과 구현에 달려 있습니다. SACK가 특정 손실 패턴의 복구 시간이나 처리량 향상을 보장하지 않습니다.

D-SACK는 중복 수신의 단서다

RFC 2883은 Duplicate SACK(D-SACK) 확장을 정의합니다. 수신자가 이미 받은 시퀀스 범위를 다시 받으면 첫 SACK 블록으로 중복 구간을 보고할 수 있습니다. 송신자는 이 단서와 자체 재전송 기록을 비교해 실제 손실 뒤의 재전송인지, 경로의 지연·복제 때문에 중복 도착했는지 판단하는 데 도움을 받습니다. D-SACK는 증거의 하나이지 네트워크 상태의 완전한 진단은 아닙니다.

해당 ACK가 손실되면 D-SACK 보고도 송신자에게 전달되지 않습니다. 송신자는 보고를 누적 ACK와 자신의 전송 이력에 비추어 해석해야 합니다. RFC 2883은 중복으로 보인 세그먼트가 이전 시퀀스 번호 공간 순환과 관련될 수도 있다고 주의를 줍니다. 그러므로 중복 블록 하나를 네트워크 복제의 확정 판정으로 보지 말고 재정렬과 재전송 맥락을 함께 살펴야 합니다.

SACK와 혼잡제어는 다른 일을 한다

SACK는 수신 상태를 더 자세히 전달하는 ACK 옵션입니다. 혼잡제어는 네트워크로 보내는 데이터 양과 속도를 조절하며, 타이머와 손실 감지는 복구를 언제 시작할지에 관여합니다. 여러 층이 함께 동작하므로 패킷 캡처에서 SACK가 보인다는 사실만으로 혼잡 윈도, 재전송 시점, 처리량을 단정할 수 없습니다. RFC 2018은 SACK를 조언적 정보라고 설명하며 이전에 보고된 데이터를 수신자가 나중에 버릴 수도 있다고 밝힙니다.

전문가 관점에서 캡처를 읽을 때는 SYN의 SACK 협상, 누적 ACK 이동, 반복 블록, 재전송 순서, 중복 보고를 분리합니다. 특정 구현을 진단하려면 운영체제와 버전, 혼잡제어 모듈, 타임스탬프와 캡처 위치가 더 필요합니다. 이 글은 두 IETF 문서의 옵션 의미와 예를 설명하며 모든 TCP 연결의 성능이나 보안을 판정하지 않습니다.

Sources