TCP 제어 흐름

rwnd와 cwnd를 분리해 재전송 원인을 찾기

흐름 제어와 혼잡 제어는 둘 다 전송량을 줄이지만 이유가 다르다. 수신 버퍼가 좁은지, 네트워크가 막혔는지, ACK 패턴이 어떤지를 따로 본다.

01

전송 가능량

송신자는 rwnd와 cwnd 중 더 작은 값을 기준으로 outstanding 데이터를 제한한다.

min(rwnd, cwnd)
02

ACK 수신

정상 ACK가 오면 전송 가능 범위가 이동하고 혼잡 윈도우가 조정된다.

슬라이딩 윈도우
03

손실 감지

timeout은 강한 혼잡 신호, duplicate ACK는 일부 패킷 손실 신호로 본다.

반응 강도 차이
04

재전송

손실로 추정된 세그먼트를 다시 보내고 cwnd와 임계값을 조정한다.

원인별 회복
흐름 제어
수신자 보호 수신 버퍼가 부족하면 rwnd가 줄어 송신자가 속도를 낮춘다.
끝단 문제
혼잡 제어
네트워크 보호 손실과 지연이 늘면 cwnd를 낮춰 경로에 쌓이는 패킷을 줄인다.
경로 문제
Timeout
ACK가 너무 늦음 재전송 타이머가 만료되면 손실로 보고 더 보수적으로 줄인다.
지연 급증 신호
Dup ACK
뒤 패킷은 도착했지만 중간이 비었음 빠른 재전송으로 timeout을 기다리지 않고 손실 구간을 복구한다.
부분 손실

버퍼 병목 · 경로 병목 · 처리량 계산 점검

버퍼 병목 수신 애플리케이션이 느리면 네트워크가 좋아도 rwnd가 작아질 수 있다.
경로 병목 손실과 RTT 증가가 함께 보이면 cwnd 감소와 혼잡 회복을 본다.
처리량 계산 윈도우 크기와 RTT를 함께 봐야 실제 전송률을 설명할 수 있다.