본문 바로가기
개발/TIL

[네트워크] Flow Control && Congestion Control

by candosh 2024. 1. 6.

TCP 흐름 제어(Flow Control)

흐름 제어는 송신측과 수신측 사이의 데이터 전송 속도를 조절하여, 수신측이 처리할 수 있는 범위를 넘어서 데이터가 전송되는 것을 방지합니다.

대표적인 흐름 제어 방법:

  1. 슬라이딩 윈도우(Sliding Window)
    • 수신측이 처리할 수 있는 데이터의 양을 나타내는 윈도우를 통해 전송을 조절합니다.
    • 수신측에서는 현재 처리 가능한 데이터 양(수신 윈도우)을 송신측에 알립니다.
    • 송신측은 이 정보를 기반으로 수신측의 버퍼를 고려하여 데이터를 전송합니다.
  2. 흐름 제어 프로토콜(Flow Control Protocols)
    • 멈추고 기다리기 (Stop-and-Wait)
      • 각각의 메시지에 대해 확인 응답을 받은 후에 다음 메시지를 전송합니다.
    • 연속적인 스트림 (Continuous Stream)
      • 여러 메시지를 연속적으로 전송하고, 개별적으로 확인을 받습니다.

TCP 혼잡 제어(Congestion Control)

너무 많은 출발지(네트워크 장비)에서 네트워크가 감당하기에는 너무 많은 데이터를 너무 빠르게 전송하여 발생하는 네트워크 혼잡 현상이다. 혼잡 제어는 네트워크 내의 데이터 전송률을 조절하여, 네트워크 혼잡을 피하고 전체적인 네트워크 성능을 개선합니다.

대표적인 혼잡 제어 방법:

  1. 느린 시작(Slow Start)
    • 연결 초기에 전송률을 점진적으로 늘려 혼잡을 예방합니다.
    • 혼잡 윈도우(cwnd)를 소규모에서 시작하여 데이터 세그먼트를 성공적으로 전송할 때마다 크기를 두 배로 증가시킵니다.
  2. 혼잡 회피(Congestion Avoidance)
    • 혼잡 윈도우의 성장을 선형적으로 줄여 혼잡 발생 가능성을 낮춥니다.
    • 패킷 손실이 감지될 때까지 혼잡 윈도우를 점차적으로 증가시킵니다.
  3. 빠른 회복(Fast Recovery)
    • 패킷 손실이 감지되면 혼잡 윈도우의 크기를 반으로 줄이고 선형 증가를 시작합니다.
    • 이를 통해 네트워크가 빠르게 안정적인 상태로 회복할 수 있도록 합니다.
  4. 빠른 재전송(Fast Retransmit)
    • 같은 패킷에 대한 중복 확인 응답을 여러 번 받으면, 해당 패킷을 즉시 재전송합니다.
    • 이는 패킷 손실을 빠르게 감지하고 대응하기 위한 기법입니다.

흐름 제어와 혼잡 제어의 비교

흐름 제어와 혼잡 제어는 모두 데이터 전송 속도를 조절하지만, 그 목적과 작동 방식에 차이가 있습니다. 흐름 제어는 수신측의 데이터 처리 능력에 초점을 맞추어 작동하는 반면, 혼잡 제어는 네트워크의 전반적인 트래픽 상태를 모니터링하고 조절합니다. 흐름 제어는 주로 수신측의 버퍼 용량에 의해 제한되는 반면, 혼잡 제어는 네트워크의 혼잡 정도에 따라 제한됩니다. 간단히 말해, 흐름 제어는 "수신할 준비가 되었는가?"에 대한 대답이며, 혼잡 제어는 "네트워크가 전송할 준비가 되었는가?"에 대한 대답입니다.