Computer Network

[컴퓨터 네트워크] TCP 혼잡 제어(Congestion Control)

JunsuKim 2022. 11. 1.
728x90

혼잡 제어 개념

네트워크 혼잡

  • 트래픽 증가로 인해 라우터/스위치 버퍼의 큐잉 지연시간 증가 및 오버플로우 발생

TCP의 네트워크 혼잡 인식

  • 심각한 혼잡: Timeout 발생
  • 경미한 혼잡: 중복 ACK 발생(3번 중복 ACK)

TCP의 혼잡 제어 원리

  • 세그먼트 전송률 축소 조정(네트워크로 유입되는 트래픽 감축)

흐름제어를 위한 TCP 전송률 제어

  • 마지막 송신바이트 번호 - 마지막 수신확인바이트 번호 ≤ 수신윈도우
    (LastByteSent - LastByteAcked ≤ rwnd)

혼잡제어를 위한 TCP 전송률 제어

  • 마지막 송신바이트 번호 - 마지막 수신확인바이트 번호 ≤ min(수신윈도우, 혼잡윈도우)
    (LastByteSent - LastByteAcked ≤ min(rwnd, cwnd)

TCP 혼잡 제어 기법

  • 슬로우 스타트(Slow Start)
  • 혼잡 회피(Congestion Avoidance)
  • 빠른 복구(Fast Recovery)

슬로우 스타트(Slow Start)

  • 연결 시작 또는 혼잡 발생 시에 혼잡윈도우(cwnd)를 최소값(ex. 1MSS)부터 전송률을 낮게(천천히) 시작
  • ACK가 수신될 때마다 혼잡윈도우를 1씩 증가
  • (ACK 수신 → cwnd = cwnd + 1)
  • RTT마다 혼잡윈도우를 2배씩 증가(지수적 증가)
  • 즉, ACK 기준으로는 1씩 증가, RTT 기준으로는 2배(지수적)으로 증가한다.

혼잡윈도우 변화

혼잡 회피(Congestion Avoidance)

  • 슬로우 스타트 구간에서 혼잡 윈도우는 지수적으로 증가
  • 혼잡윈도우가 임계치에 도달하거나 넘어가면 선형적으로 증가하도록 증가 속도를 조정하는 알고리즘
  • RTT마다 혼잡윈도우를 1씩 증가
  • ACK가 수신될 때마다 혼잡윈도우를 (1/cwnd)씩 증가
    (ACK 수신 → cwnd = cwnd + (1/cnwd))

빠른 복구(Fast Recovery)

  • 3개의 중복 ACK에 의한 빠른 재전송 시에 적용 → 경미한 혼잡 상황
  • 정상 ACK가 수신되어  오류 복구가 완료되면 슬로우 스타트 구간을 건너뛰고 혼잡 회피 단계로 진입

알고리즘

  1. 임계치를 현재 혼잡 윈도우의 1/2로 설정(sstrhresh = cnwd / 2)
  2. 손실된 세그먼트 재전송
  3. 혼잡 윈도우를 임계치 + 3으로 설정(cnwd = sstrhresh + 3)
  4. 여전히 중복 ACK를 수신하면 cwnd = cwnd + 1, 새로운 세그먼트 추가 전송 가능
  5. 정상 ACK를 수신하면 cwnd = ssthresh, 혼잡 회피 단계로 진입

빠른 복구 예제

  1. 혼잡윈도우가 6인 상태에서 3번째 중복 ACK 수신 후 송신자는 임계치를 현재 혼잡윈도우의 1/2로 설정(6 / 2 = 3), 손실 패킷(pkt5) 재전송, 혼잡윈도우를 임계치 + 3(3 + 3 = 6)으로 설정
  2. 2개의 중복 ACK 추가 수신으로 혼잡윈도우는 8로 증가(6 + 2 = 8), 현재 5~10까지 6개의 패킷만 전송했으므로 2개 패킷 추가 전송 가능(pkt11, 12)
  3. 새로운 ACK11을 수신하면 빠른 복구를 종료하고, 혼잡 윈도우는 임계치로 설정한 다음(ssthresh = 3), 혼잡 회피 단계로 진입

TCP 혼잡 제어 알고리즘: TCP Tahoe 버전

혼잡 인식

  • Timeout과 3 duplicate ACK(3개 중복 ACK)를 동일하게 처리한다.

알고리즘

  1. 임계치를 현재 혼잡 윈도우의 1 / 2로 설정(ssthresh = cnwd / 2)
  2. 슬로우 스타트 개시
  3. 혼잡 윈도우가 임계치에 도달하거나 넘어가면 혼잡 회피 수행

TCP 혼잡 제어 알고리즘: TCP Reno 버전

혼잡 인식

  • Timeout, 3개 중복 ACK 다르게 처리

알고리즘

  1. Timeout 발생 시 Taho 버전과 동일하게 동작
  2. 3개 중복 ACK 발생 시 빠른 회복 알고리즘 적용

TCP 혼잡 제어: AIMD

  • 혼잡 상황 발생 -> 혼잡 윈도우의 크기를 1 또는 절반으로 줄임 -> 슬로우 스타트 또는 혼잡 회피로 혼잡 윈도우 천천히 늘림.
  • AIMD(Additive Increase Multiplicative Decrease)
728x90

댓글