TCP/IP 흐름제어 & 혼잡 제어

Flow Control(흐름제어)

문제: 수신자가 느리게 읽으면 수신 버퍼가 가득 참.(송신자보다 느리면)

Receive Buffer overflow

이를 방지하기 위해 수신자는 자신의 ‘수신 버퍼 여유 공간’을 TCP 헤더의 Window Size 필드에 담아 송신자에게 보냄.

  • 수신 윈도우(Receiver Window)

    • 수신자는 TCP 헤더의 필드에 자신의 수신 버퍼의 남은 공간을 담아 송신자에게 보냄.

      Window Size
      
      Receive Buffer size = 10,000 bytes
      현재 사용 = 6,000 bytes
      남은 공간 = 4,000 bytes
      
      -> Window Size == 4000 -> 송신자는 4000바이트까지만 더 보낼 수 있음.

      “나는 지금 이만큼 더 받을 수 있음”

  • 송신자는 그럼 어떻게 하나?

    • 보낸 데이터 크기 - ACK 받은 데이터 크기 ≤ 수신 윈도우 크기

    • 를 유지하도록, 수신자가 감당 가능한 만큼만 데이터를 보냄

    → 이것이 Flow Control

  • 정리

    Sender                      Receiver
    -------------------------------------------------
    Send Buffer  →  Network  →  Receive Buffer
    
                        Window Size 통보
                        
    수신자는 자신의 버퍼 여유 공간을 Window Size로 광고하고,
    송신자는 그 범위 내에서만 데이터를 전송함.

혼잡제어

네트워크 내부의 라우터 버퍼가 가득 차 패킷 손실이 발생하는 사태.

TCP는 Congestion Window(cwnd)등을 사용해 송신자가 네트워크 혼잡 상태에 따라 전송 속도를 조절함

  • 특징

    • 수신자는 괜찮음

    • 하지만 중간 네트워크가 감당하지 못함

    • 패킷 드롭 발생

    • 지연 증가

    • 재전송 발생

  • 핵심 개념

    TCP는 아래의 두 값을 사용함

    • cwnd(Congestion Window)

      → 네트워크 상태를 고려한 전송 가능 데이터량

    • ssthresh(Slow Start Threshold)

      → Slow Start에서 Congestion Avoidance로 전환되는 기준값

  • 실제 전송 가능 데이터량

    실제 전송 가능 데이터량 = min(Receive Window, Congestion Window)

    • Receive Window → 수신자 한계

    • Congestion Window → 네트워크 한계

    둘 중 더 작은 값이 실제 전송량이 됨.

  • 정리

    혼잡 제어는 TCP가 네트워크 상태를 고려하여 Congestion Window를 조절하고, 패킷 손실을 신호로 전송 속도를 줄여 네트워크 과부하를 방지하는 매커니즘.

    → 즉, 패킷 손실과 같은 네트워크 과부하가 발생할때, 전송 속도를 줄여서 해결하는 방법.


Flow Control vs Congestion Control 차이

구분
Flow Control
Congestion Control

목적

수신자 보호

네트워크 보호

기준

Receive Window

Congestion Window

제어 주체

수신자

송신자

문제 원인

수신 처리 속도 부족

네트워크 과부화

  • Flow Control : 수신자의 버퍼를 보호하는 기능

  • Congestion Control: 네트워크 혼잡을 방지하는 기능

Last updated