흐름 제어와 혼잡 제어

기술노트

흐름 제어와 혼잡 제어

흐름 제어(Flow Control)혼잡 제어(Congestion Control)는 TCP(Transmission Control Protocol)와 같은 전송 계층 프로토콜에서 데이터 전송의 신뢰성과 효율성을 보장하기 위한 핵심 메커니즘입니다. 두 가지 모두 데이터 전송량을 조절하는 역할을 하지만, 그 목적과 대상이 다릅니다.


🌊 흐름 제어 (Flow Control)

  • 목적 : 송신 측의 데이터 전송 속도가 수신 측의 데이터 처리 속도보다 빨라, 수신 측의 버퍼 오버플로우(Buffer Overflow)를 방지하는 것입니다. 즉, 송신자와 수신자 간의 속도 차이를 조절합니다.
  • 주요 방식

> * 정지-대기 (Stop-and-Wait) : 송신 측이 하나의 패킷을 보내고, 수신 측으로부터 ACK를 받을 때까지 다음 패킷 전송을 중단합니다. (비효율적) > * 슬라이딩 윈도우 (Sliding Window) : 송신 측이 ACK를 기다리지 않고, 미리 정해진 '윈도우 크기'만큼의 패킷을 연속적으로 전송합니다. 수신 측은 버퍼의 여유 공간을 윈도우 크기로 송신 측에 알려주어 동적으로 조절합니다.

  • 작동 계층 : 주로 전송 계층 (TCP)

🚦 혼잡 제어 (Congestion Control)

  • 목적 : 네트워크 내의 패킷 수가 과도하게 증가하여 네트워크 성능이 저하되는 혼잡 현상(Congestion)을 방지하거나 해결하는 것입니다. 즉, 네트워크 전체의 혼잡을 조절합니다.
  • 혼잡 발생 원인

> * 네트워크 내의 라우터나 스위치 버퍼가 가득 차서 패킷 손실 발생. > * 패킷 손실로 인한 재전송 증가 → 네트워크 트래픽 증가 → 더 많은 혼잡 발생 (악순환).

  • 주요 방식 (TCP의 혼잡 제어 알고리즘)

> * 느린 시작 (Slow Start) : 연결 초기에는 윈도우 크기를 작게 시작하여, 혼잡이 발생하지 않는 한 윈도우 크기를 지수적으로 증가시킵니다. > * 혼잡 회피 (Congestion Avoidance) : 느린 시작 단계 이후, 윈도우 크기를 선형적으로 증가시킵니다. > * 혼잡 감지 (Congestion Detection) : 패킷 손실이 발생하면 혼잡으로 간주하고, 윈도우 크기를 줄여 혼잡을 완화합니다. (재전송 타임아웃, 3-ACK 등)

  • 작동 계층 : 주로 전송 계층 (TCP)

💡 개발자 핵심 Point

  • 흐름 제어 vs 혼잡 제어

> * 흐름 제어 : 송신자와 수신자 '양단 간'의 문제. (점대점, Point-to-Point) > * 혼잡 제어 : 네트워크 '전체'의 문제. (네트워크 내의 모든 호스트와 라우터)

  • TCP는 흐름 제어와 혼잡 제어를 모두 제공하여 신뢰성 있는 데이터 전송을 보장합니다. UDP는 이러한 제어 기능을 제공하지 않아 빠르지만, 데이터 손실의 위험이 있습니다.
  • 네트워크 성능 문제 발생 시, 흐름 제어와 혼잡 제어 메커니즘을 이해하는 것은 문제의 원인(수신자 버퍼 부족, 네트워크 혼잡 등)을 파악하고 해결하는 데 중요합니다.
  • 최근에는 BBR(Bottleneck Bandwidth and RTT)과 같은 새로운 혼잡 제어 알고리즘이 개발되어, 기존 TCP의 혼잡 제어 방식보다 더 높은 처리량과 낮은 지연 시간을 제공합니다.