혼잡 제어(Congestion Control)란?

혼잡 제어(Congestion Control)

  • 혼잡 상황이 발생하면 네트워크 자원이 낭비되므로 혼잡 상황을 최소화 하기 위한 기법

    • 데이터의 양이 라우터가 처리할 수 있는 양을 초과하면 초과된 데이터는 라우터가 처리하지 못한다. 송신측에서 라우터가 처리하지 못한 데이터를 손실 데이터로 간주하고 계속 재전송하게 되므로 네트워크는 더욱 더 혼잡하게 된다.
  • 흐름 제어

    • 송신측과 수신측의 데이터 처리 속도 차이를 해결하기 위한 기법
    • 송신측의 데이터 전송량 제어
  • 혼잡 제어

    • 송신측의 데이터 전달과 네트워크 상의 데이터 처리 속도 차이를 해결하기 위한 기법
    • 송신측의 데이터 전송 속도 제어

혼잡 제어 방법

Untitled - 2021-12-18T133859 551

AIMD (Additive Increase / Multiplicative Decrease)

  • 합 증가 / 곱 감소 방식.
  • 처음에 패킷을 하나씩 보내고 문제없이 도착하면 윈도우의 크기(단위 시간 내에 보내는 패킷의 수)를 1씩 증가시켜가며 전송한다.
  • 만약 전송에 실패하면 윈도우 크기를 반으로 줄임.
  • 공평한 방식으로, 여러 호스트가 한 네트워크를 공유하고 있으면 나중에 집입하는 쪽이 처음에는 불리하지만, 시간이 흐르면 평형 상태로 수렴한다.
  • 윈도우 크기를 너무 조금씩 늘리기 때문에 모든 대역을 활용하여 제대로 된 속도로 통신하기까지 시간이 오래 걸린다.

Slow Start

  • 윈도우의 크기를 1, 2, 4, 8... 과 같이 2배씩 증가시킨다.
  • 혼잡이 감지되면 윈도우의 크기를 1로 줄여버림.
  • 시간이 지날수록 AIMD보다 빠르게 윈도우 크기를 증가시킨다.
  • 처음에는 네트워크 수용량을 예상할 수 있는 정보가 없지만, 한번 혼잡 현상이 발생하고 나면 네트워크 수용량을 어느 정도 예상할 수 있다.
  • 그러므로 혼잡 현상이 발생하였던 윈도우 크기의 절반까지는 이전처럼 지수 함수 꼴로 증가시키고 이후부터는 1씩 증가시킨다.

    • 이를 임계점(sshthresh, Slow Start Threshold)이라고 함. 이 임계점은 윈도우 사이즈가 기하급수적으로 증가하는 것을 방지하기 위해 설정하는 것으로 임계점부터 윈도우 크기는 1씩 증가한다.

Fast Retransmit(빠른 재전송)

Untitled - 2021-12-18T133902 669

  • Fast Restransmit은 TCP 혼잡 제어에 추가된 정책.
  • 먼저 도착해야 할 패킷이 도착하지 않고 다음 패킷이 도착한 경우에도 ACK 패킷을 보냄.
  • 순서대로 잘 도착한 마지막 패킷의 다음 순번을 ACK 패킷에 실어보내게 되므로 송신측에서는 순번이 중복된 것을 알게 됨.
  • 이것을 감지하여 중복된 순번의 패킷을 3개 받으면 타임아웃 전에 문제가 되는 순번의 패킷을 즉시 재전송해줌.
  • 이런 현상이 일어나면 혼잡 현상이 발생한 것이므로 윈도우 크기를 줄임.

Fast Recovery (빠른 회복)

  • 혼잡 상태가 되면 윈도우 크기를 1로 줄이지 않고 반으로 줄인 후 선형 증가
  • 혼잡 상태를 한 번 겪고 나서부터는 AIMD 방식으로 동작.

혼잡 제어 정책

TCP는 혼잡 제어를 위하여 다양한 기법을 혼합하여 사용하고 있으며 가장 오래되고 기본이 되는 2가지 방식이 있음.

TCP Tahoe

Untitled - 2021-12-18T133906 384

  • 처음에는 Slow Start 방식으로 사용하다가 임계점에 도달하면 AIMD 방식 사용
  • 그러다 3 ACK 순번 중복 (중간 패킷 유실) 이나 타임아웃이 발생하면 혼잡이라고 판단하여 임계점은 혼잡 발생한 윈도우 크기 절반으로, 윈도우 크기는 1로 줄임.
  • 혼잡 이후 Slow Start 구간에서 윈도우 크기를 키울 때 너무 오래걸림.

TCP Reno

  • Tahoe와 마찬가지로 Slow Start로 시작해서 임계점 이후에는 AIMD 방식으로 변경
  • 단, 3 ACK 중복과 타임아웃을 구분함.
  • 3 ACK 중복이 발생하면 Fast Recovery 방식을 사용

    • 윈도우 크기를 1로 줄이는 것이 아니라 반으로 줄인 후 윈도우 크기를 선형적으로 증가시킴
    • 임계점은 줄어든 윈도우 값으로 설정
  • 타임아웃이 발생하면 Tahoe와 마찬가지로 윈도우 1로 줄이고 Slow Start 진행

    • 임계점은 반으로 줄인다.