본문 바로가기
네트워크

혼잡 제어

by SpearZero 2024. 2. 19.

혼잡 제어의 원리

혼잡의 원인과 비용

혼잡 제어가 발생하는 세 가지 시나리오

시나리오1 : 2개의 송신자와 무한 버퍼를 갖는 하나의 라우터

라우터는 무한대의 버퍼를 가지고 있으며, 재전송이 없다고 가정한다.

각 호스트는 최대 출력량을 R/2 만큼 가질 수 있다.

 

전송률이 R/2를 초과할 때, 라우터 안에 큐잉된 패킷의 평균 개수는 제한되지 않고 출발지와 목적지 사이의 평균 지연이 무제한이 된다.(오른쪽 그림)

 

즉, 패킷 도착률이 링크 용량에 근접함에 따라 큐잉 지연이 커진다.

시나리오2 : 2개의 송신자, 유한 버퍼를 가진 하나의 라우터

라우터의 버퍼는 유한하며, 패킷이 재전송 될 수 있다고 가정한다.

  • 호스트가 라우터의 빈공간이 있는지 알 수 있는 경우(현실적이지 않지만 이상적인 상황)
    • 데이터를 송신하면 처리량이 선형적으로 증가한다.

  • 패킷이 손실된 것을 알았을 때만 송신자가 패킷을 재전송하는 경우
    • 송신자는 버퍼 오버플로 때문에 버려진 패킷을 보상하기 위해 재전송을 수행해야 한다.

  • 타임아웃이 일찍 되어서 패킷이 손실되지 않았지만 큐에서 지연되고 있는 패킷을 재전송하는 경우
    • 데이터 패킷과 재전송 패킷 둘 다 수신자에게 도착한다. 수신자는 재전송 패킷을 버린다.
    • 커다란 지연으로 인한 송신자의 불필요한 재전송은 라우터가 패킷의 불필요한 복사본들을 전송하는 데 링크 대역폭을 사용하는 원인이 된다.

시나리오 3 : 4개의 송신자와 유한 버퍼를 갖는 라우터, 그리고 멀티홉 경로

두 번째 홉 라우터에서 패킷이 버려지면, 첫 번쨰 홉 라우터에서 두 번째 라우터에 전달한 패킷의 작업은 헛수고가 된다.

 

패킷이 경로상에서 버려질 떄, 버려지는 지점까지 패킷을 전송하는 데 사용된 상위 라우터에서 사용된 전송 용량은 낭비된다.

혼잡 제어에 대한 접근법

혼잡 제어를 수행하는 두 가지 광범위한 접근 방식

  • 종단 간의 혼잡 제어
    • 네트워크 계층은 혼잡 제어 목적을 위해 트랜스포트 계층에게 어떠한 직접적인 자원도 제공하지 않음
    • 관찰된 네트워크 동작(패킷 손실 및 지연)에 기반하여 종단 시스템이 추측해야 한다.
    • TCP는 혼잡 제어를 위한 종단 간의 접근 방식을 취함
  • 네트워크 지원 혼잡 제어
    • 라우터들은 네트워크 안에서 혼잡 상태와 관련하여 송신자나 수신자 모두에게 직접적인 피드백을 제공한다.
    • TCP ECN, ATM, DECbit protocols등이 있음

TCP 혼잡 제어

전통적인 TCP의 혼잡 제어

TCP는 송신자가 자신의 목적지 간의 경로에서 혼잡이 없음을 감지하면 송신율을 높인다. 반면에 경로 사이에 혼잡을 감지하면 송신율을 줄인다. 이것은 세 가지 의문을 제기한다.

  • TCP 송신자는 자신의 연결에 송신자 전송 트래픽 전송률을 어떻게 제한하는가?
    • TCP 혼잡 제어 메커니즘은 추가적인 변수인 혼잡 윈도(congestion window)를 추적한다. cwnd로 표시되는 혼잡 윈도는 TCP 송신자가 네트워크로 트래픽을 전송할 수 있는 속도에 제약을 가한다.
  • TCP 송신자는 자신의 목적지 사이 경로의 혼잡을 어떻게 감지하는가?
    • 타임아웃 또는 3개의 중복된 ACK 수신을 통해 알 수 있다.
  • 송신자는 종단 간의 혼잡을 감지함에 따라 송신율을 변화시키기 위해 어떤 알고리즘을 사용해야 하는가?
    • TCP 송신자로 하여금 손실 이벤트가 발생할 때까지는 ACK가 도착함에 따라 전송률을 증가시키게 하고, 손실 이벤트가 발생한 시점까지 전송률을 줄인다.

TCP 혼잡 제어 알고리즘(TCP congestion-control algorithm)은 세 가지 구성요소를 갖는다.

  • 슬로 스타트(slow start)
  • 혼잡 회피(congestion avoidance)
  • 빠른 회복(fast recoevery)

슬로 스타트

TCP 연결이 시작될 때, cwnd의 값을 1MSS로 초기화 한다.

응답이 올 때마다 cwnd의 값을 두 배씩 증가시킨다.

 

cwnd의 지수적 증가가 끝나는 경우

  • 타임아웃으로 표시되는 손실 이벤트가 있을 경우
    • TCP 송신자는 cwnd를 1MSS로 설정하고 새로운 슬로 스타트를 시작한다.
    • 또한 ssthresh(슬로 스타트 임곗값)의 값을 cwnd/2로 정한다.
  • cwnd 값이 ssthresh와 같은 경우
    • 슬로 스타트가 종료되고 TCP 혼잡 회피 모드로 전환한다.
    • 이 경우의 ssthresh의 값은 혼잡이 마지막으로 검출된 시점에서의 cwnd의 반 값이다.

혼잡 회피

혼잡 회피 상태로 들어가는 시점에서 cwnd의 값은 대략 혼잡이 마지막으로 발견된 시점에서의 값의 반이 된다. 그러므로 RTT마다 cwnd의 값을 두 배로 하기보다는 TCP는 좀더 보수적인 접근법을 채택하여 RTT마다 하나의 MSS만큼 cwnd값을 증가시킨다.

 

혼잡 회피의 선형 증가(RTT당 1MSS)의 증가가 끝나는 경우

  • 타임아웃이 발생할 경우
    • 슬로 스타트의 경우와 같이 동작한다.
    • cwnd의 값은 1MSS로 설정되고, sshtresh의 값은 cwnd의 반 값이 된다.
  • 3개의 중복된 ACK를 수신하는 경우
    • cwnd값을 반으로 줄이고 3MSS를 더한다.(3개의 중복 ACK를 설명하기 위해) 그리고 sshtresh의 값을 cwnd의 반으로 기록한다. 그후 빠른 회복 상태로 들어간다.

빠른 회복

빠른 회복에서는 cwnd 값을 손실된 세그먼트에 대해 수신된 모든 중복된 ACK에 대해 1 MSS만큼씩 증가시킨다. 손실된 세그먼트에 대한 ACK가 도착하면 TCP는 cwnd 혼잡 회피 상태로 들어간다.

 

만약 타임아웃 이벤트가 발생한다면 빠른 회복은 슬로 스타트 및 혼잡 회피에서와 같은 동작을 수행한 후 슬로 스타트로 전이한다.(cwnd 값을 1MSS로 설정하고, ssthresh 값을 cwnd의 반으로 설정)

 

빠른 회복은 TCP의 구성요소로 권고사항이지만 필수는 아니다.

 

TCP 타호와 리노 비교

  • TCP 타호(TCP Tahoe)
    • 타임아웃으로 표시되거나 3개의 중복 ACK로 표시되는 손실이 발생하면 무조건 혼잡 윈도를 1MSS로 줄이고 슬로 스타트 단계로 들어간다.
  • TCP 리노(TCP Reno)
    • 빠른 회복을 채택했다.
    • 타임아웃이 발생했을 때는 Tahoe처럼 동작한다.
    • 3개의 중복 ACK가 발생하면 cwnd는 반 값으로 줄이고 3MSS를 더한다. ssthresh는 반 값으로 줄인다. 그 후 cwnd의 값은 선형적으로 증가함.

그림에서 8번째 송신 후에 3개의 중복된 ACK가 발생했을 때, Tahoe와 Reno의 차이점에 대해 보여주고 있다.

 

Tahoe는 cwnd를 1MSS로 설정하고, sshtresh의 값이 cwnd의 반이 되었다. Reno는 cwnd를 cwnd의 반 + 3MSS로 설정한다.(12 / 2 + 3)

'네트워크' 카테고리의 다른 글

인터넷 프로토콜(IP) : IPv4, 주소체계, IPv6  (0) 2024.03.04
네트워크 계층 개요  (0) 2024.02.23
연결지향형 트랜스포트 : TCP  (1) 2024.02.14
신뢰적인 데이터 전송의 원리  (0) 2024.02.01
UDP  (0) 2024.01.29