dup ACK, SACK/DSACK, ACK 간격, 타이머, 송신 시각을 함께 본다. 패킷 캡처만으로 cwnd를 직접 알 수는 없다.
TCP 손실 처리는 “무엇을 증거로 보나”와 “어떻게 줄이나”를 분리한다
중복 ACK, SACK 블록, RTO, RACK/TLP는 손실을 추정하는 서로 다른 증거다. Fast Retransmit, SACK recovery, RTO recovery는 그 증거를 받은 송신자가 cwnd와 재전송을 조정하는 반응이다.
감지 신호에서 재전송 선택까지의 판단 단계
dup ACK는 gap 신호지만 손실 확정은 아니다. 경로 재정렬, ACK 손실, 지연도 같은 모양을 만들 수 있다.
Reno는 3 dup ACK, SACK recovery는 scoreboard, RACK은 시간 증거로 어떤 sequence를 재전송할지 고른다.
ACK clock이 살아 있으면 Fast Recovery로 복구하고, RTO면 더 보수적으로 cwnd를 loss window로 낮춘다.
S1만 빠지고 S2-S4가 도착한 경우: 중복 ACK와 SACK이 같이 보인다
송신자는 여러 세그먼트를 flight 상태로 네트워크에 보낸다.
S1이 손실되거나 크게 지연되고, 뒤 세그먼트가 먼저 도착한다.
수신자는 아직 S1을 기다리므로 누적 ACK 번호를 전진시키지 못한다.
SACK 옵션은 이미 도착한 뒤 블록을 알려 재전송 범위를 좁힌다.
송신자는 ACK clock을 유지한 채 빠진 구간부터 재전송한다.
S1이 도착하면 누적 ACK가 한 번에 S4 뒤까지 전진할 수 있다.
패킷 캡처에서 보이는 것
dup ACK, SACK/DSACK 블록, 재전송 시점, ACK 간격은 보인다. 하지만 송신자 내부 cwnd, ssthresh, 실제 RTO 값은 패킷에 직접 실리지 않는다.
송신자 상태가 필요할 때
ss -ti,
tcp_info, eBPF
tracepoint처럼 커널 상태를 보는 도구가 있어야 cwnd, rtt, rto,
retrans, delivery rate를 더 정확히 확인한다.
Reno 규칙을 모든 TCP에 일반화하지 않는다
CUBIC, BBR, OS별 SACK/RACK 구현은 세부 반응이 다르다. 본 그림은 학습용 기준 흐름과 현대 구현에서 추가되는 증거를 함께 보여준다.
진단 기준
손실 추정과 혼잡 제어 반응을 한 문장으로 섞지 않는다. dup ACK는 gap의 증거, SACK은 도착 블록의 증거, RTO는 ACK가 돌아오지 않은 시간의 증거, RACK/TLP는 송신 시각과 tail loss의 증거다. 그 다음에 송신자는 Fast Recovery, SACK recovery, RTO recovery 중 현재 ACK clock과 구현에 맞는 경로를 선택한다.