[CS Study] 4주차(3) - TCP의 혼잡 제어와 흐름 제어

bagt13·2025년 4월 28일
0

CS

목록 보기
23/27

🟢 TCP의 흐름 제어 (Flow Control)

수신자가 감당할 수 있는 만큼만 데이터를 보내어, 수신자의 버퍼 초과를 방지하기 위함이다.

방법

  • 수신자가 매번 송신자에게 남아있는 버퍼 사이즈(Window Size)를 알려준다.

  • 송신자는 이 윈도우 크기를 보고, 수신자가 받을 수 있을 만큼만 데이터를 전송한다.



🟢 TCP의 혼잡 제어 (Congestion Control)

중간 라우터나 네트워크 경로의 과부하로 인한 네트워크 자체가 터지는 걸 방지하기 위함이다.

방법

  • 송신자가 네트워크 상태를 추측해서 적절히 데이터 보내는 전략을 사용한다.

  • 윈도우 크기를 동적으로 조정하여 문제가 생기면 사이즈를 줄인다.


🛠️ 혼잡 제어의 주요 알고리즘 (Slow Start, AIMD)

  1. Slow Start (느린 시작)

  2. AIMD (Additive Increase, Multiplicative Decrease)


📚 1. Slow Start

  • 초기엔 아주 조심스럽게 시작한다.

  • 처음 연결하면 윈도우 크기(cwnd) 를 1로 시작.

  • 매번 ACK 받을때마다 윈도우 크기를 두 배로 증가시킨다.

하지만, 어느 순간 임계치(ssthresh)를 넘으면 slow start 모드를 종료하고, 그 다음부터는 AIMD 모드로 넘어간다.


📚 2. AIMD (Additive Increase, Multiplicative Decrease)

Slow Start 이후에 사용되는 동작 방식이다.

Additive Increase (선형 증가)

  • ACK를 받을 때마다 윈도우 크기를 1씩 늘린다. (천천히 증가)

Multiplicative Decrease (곱셈 감소)

  • 만약 패킷 손실이 감지되면(timeout or 3 중복 ACK) 윈도우 크기를 반으로 줄인다.

즉, AIMD는 다음과 같은 특징을 가진다.

  • 평소엔 천천히 윈도우 사이즈를 키운다.

  • 문제가 생기면 과감히 윈도우를 줄인다.

-> 이렇게 네트워크가 막히지 않게(혼잡 제어) 조절해서 전송한다.

profile
백엔드 개발자입니다😄

0개의 댓글