969. 혼잡 윈도우 (Congestion Window) - 혼잡 제어 전송 데이터망 크기 조절 라우터 큐 패킷 드랍 억제 네트워크 과부하 글로벌 체증 감지 지표 제어
핵심 인사이트: 내 컴퓨터(송신)와 친구 폰(수신)은 둘 다 최고급이라 1초에 1,000개 패킷을 쏠 수 있다(967번 슬라이딩 윈도우 합의). 하지만 내 컴퓨터에서 출발한 택배가 친구 집에 가려면 '중간에 있는 낡은 동네 라우터(고속도로 톨게이트)'를 거쳐야 한다. 내가 신나서 1,000개를 쐈는데, 중간 라우터가 뻗어버려 패킷 500개가 허공에서 타서 증발했다(네트워크 과부하). "야! 내 친구 위장 크기만 믿고 막 쏘지 마! 대한민국 중간 도로 상황(톨게이트 막힘)이 널널한지 막히는지를 눈치채고, 도로 상황에 맞춰서 전송량을 확 줄여주는 숨겨진 창문, 혼잡 윈도우(CWND)의 눈치를 무조건 우선으로 봐라!" 개인주의를 넘어선 대의적 글로벌 흐름 제어, 혼잡 윈도우다.
Ⅰ. 흐름 제어와 혼잡 제어의 치명적 차이점 (시험 0순위) 🌟
- 흐름 제어 (Flow Control, 967번): 딱 **수신자(친구)**의 버퍼(그릇)가 터지지 않게 맞춰주는 1:1 개인적 조율입니다. (수신 윈도우,
rwnd) - 혼잡 제어 (Congestion Control) 🌟: 수신자가 아니라, 패킷이 거쳐 가는 **인터넷망 전체 라우터들의 버퍼(큐)**가 터져 통신 대란이 일어나는 걸 방지하는 '글로벌 네트워크 눈치 게임'입니다. 이때 쓰이는 창문 크기가 **혼잡 윈도우 (cwnd, Congestion Window)**입니다.
Ⅱ. 혼잡 윈도우(CWND)의 개념과 지배 룰 🌟
- 개념: "지금 당장 인터넷 고속도로 상태를 보니 한 번에 이만큼의 패킷만 쏴야 안전하겠군!" 하고 송신자 컴퓨터 스스로 짐작하여 맞춰둔 **가상의 송신 억제 한도(창문 크기)**입니다.
- 절대 지배 룰 (송신 크기 결정):
송신자가 실제로 허공에 쏠 수 있는 패킷의 연사 개수(최종 Window Size)는 어떻게 결정될까요?
$$ \text{실제 송신 창문} = \min (\text{수신 윈도우 rwnd}, \text{혼잡 윈도우 cwnd}) $$
- 즉, 친구가 "나 1,000개 받을 수 있어!(rwnd)"라고 자랑해도, 내가 고속도로 상태를 보고 "도로가 막혀서 10개밖에 못 지나가겠어(cwnd)"라고 판단하면, 무조건 더 작은 숫자인 10개만 찔끔 쏘게 목줄이 강제로 채워집니다.
Ⅲ. 도로 막힘(혼잡)을 어떻게 눈치채는가? (패킷 드랍의 역이용) 🌟
내 컴퓨터가 중간 라우터의 상태를 어떻게 알까요? 라우터가 카톡을 안 주는데?
- 대원칙: TCP의 창시자들은 "인터넷 세상에서 패킷이 증발해 에러(타임아웃)가 터졌다는 건, 랜선이 끊어져서가 아니라 무조건 중간 라우터 큐(톨게이트)가 꽉 차서 터졌기(혼잡) 때문이다!" 라고 가정해버렸습니다.
- 눈치채기: 내가 10개를 쐈는데 친구한테서 1개가 안 왔다는 답장(3 중복 ACK)이 오거나 답장 기한을 넘겨버렸습니다(타임아웃).
- 동작: 송신자 컴퓨터는 찰나의 순간에 "아뿔싸! 중간 도로(라우터) 터졌구나!" 직감하고, 혼잡 윈도우(CWND) 크기를 미친 듯이 확 쪼그라뜨려 전송량을 바닥으로 떨어뜨립니다. 고속도로에 차를 안 보내어 중간 라우터가 숨을 쉬고 체증을 풀 수 있게 기회를 주는 위대한 이타주의(백오프) 알고리즘입니다.
Ⅳ. 혼잡 윈도우 조절의 4대 콤보
이 창문 크기(CWND)를 넓히고 좁히는 파도타기 예술 4단계입니다.
- 슬로우 스타트 (Slow Start, 970번 문서): 처음엔 도로 상태를 모르니 1개만 쏘고, 문제없으면 2개, 4개, 8개로 미친 듯이 늘리며 간을 봅니다.
- 혼잡 회피 (Congestion Avoidance): 어느 정도 창문이 커지면 조심스럽게 1개씩만 살금살금 늘립니다.
- 빠른 재전송 / 빠른 회복: 에러 조짐이 보이면 창문을 절반으로 확 줄이고 타임아웃 전에 재빨리 재전송해 수습합니다.
📢 섹션 요약 비유: 인터넷 통신망은 서울에서 부산으로 가는 '경부고속도로'입니다. **수신 윈도우(rwnd)**는 부산에 있는 하역장 창고 크기입니다. 창고가 비어있다고 서울 물류센터(송신자)가 무작정 트럭 1만 대를 한 방에 풀어버리면, 중간에 있는 대전 톨게이트(라우터)가 꽉 막혀 고속도로에 차들이 다 갇혀서 기름이 떨어져 죽습니다(패킷 드랍 재앙). **혼잡 윈도우(CWND)**는 서울 물류센터장이 켜둔 '고속도로 실시간 CCTV'와 같습니다. 트럭이 제때 안 돌아오면(타임아웃 발생) 센터장은 0.1초 만에 "아! 대전 톨게이트가 터졌구나!" 눈치를 까고, 부산 창고가 텅텅 비어있든 말든(rwnd 무시) 톨게이트 상황이 정상화될 때까지 트럭 출발 대수를 10대로 확 줄여버려 목줄을 쥡니다. 내 친구의 뱃속이 아니라 전 지구적 고속도로의 교통체증(혼잡)을 스스로 걱정하고 자제해 주는 인터넷망 붕괴 방어의 1등 공신입니다.