77~

다시 돌아온 TCP! TCP의 혼잡 제어 메커니즘 알아보자.

IP 계층은 종단에게 아무런 직접적 피드백이 없으니 전통적인 TCP는 네트워크 지원 혼잡 제어보다는 종단 간의 혼잡 제어를 사용한다.

3.7.1 전통적인 TCP 혼잡 제어

  • TCP 취한 접근 방식은 네트웍 혼잡에 따라 연결에 트래픽이 보내는 전송률을 각 송신자가 제한하도록 하는 것
    • 혼잡이 없다 판단하면, 송신자는 송신률 높인다.
  • 의문이 떠올라야 되는데 3가지다!
      1. TCP 송신자는 어떻게 자기의 전송 트래픽 전송률을 제한하나?
      1. TCP 송신자는 어떻게 목적지간의 혼잡을 감지하나?
      1. TCP 송신자는 송신율 변화시키기 위해 어떤 알고리즘을 써야하나?

전송률 제한 방법

  • 송신 측에서 동작하는 TCP 혼잡 제어 메커니즘은 추가적 변수인 **혼잡 윈도(congestion window)**를 추적한다.
  • cwnd 로 표시됨
  • LastByteSent - LastByteAcked <= min(cwnd, rwnd)

혼잡 존재 감지하는 방법

  • 과도한 혼잡 발생 시 경로에 있는 하나 이상의 라우터 버퍼들이 오버플로되고, 그 결과(TCP가 포함된) 데이터그램이 버려짐
  • 이 버려진걸로 손실 이벤트가 발생되니, 이걸로 혼잡 발생을 알아차림
  • TCP는 확인응답을 혼잡 윈도 크기를 증가를 유발하는 트리거 or 클록 으로 쓴다.

TCP 송신자들은 가용한 대역폭 모두 쓰면서 네트워크를 혼잡시키지 않는 전송률을 어떻게 결정할 수 있을까?

  • 손실된 세그먼트 == 혼잡, 따라서 TCP 전송률은 한 세그먼트를 손실했을 때 줄여야한다.
  • 확인응답된 세그먼트는 수신자까지 성공적으로 도달했고 네트워크는 혼잡하지 않다는, 즉 모든 것이 좋다는 묵시적 표시로 받아들여진다. 따라서 혼잡 윈도 크기가 증가할 수 있다.
  • 대역폭 탐색. TCP 송신자는 혼잡 발생하는 시점까지 전송률 증가시키고(전송률 탐색) 그 시점 이후 부터는 줄인뒤, 다시 혼잡이 되는지 보기위한 탐색을 시작한다.
  • 네트워크에 의한 혼잡 상태는 어떠한 명시적 신호도 없다. ACK와 손실 이벤트는 묵시적 신호.

혼잡 제어 알고리즘은 다음과 같은 3가지 중요한 요소 갖는다.

  1. 슬로 스타트
  2. 혼잡 회피(congestion avoidance)
  3. 빠른 회복(fast recovery)

1,2는 필수다.

슬로 스타트

  • 슬로 스타트 단계에서 전송률은 지수적으로 상승
  • 이 지수적 상승은 언제 멈추나?
      1. 타임아웃으로 표시되는 손실 이벤트(즉, 혼잡)이 있을 경우 cwnd를 1로 설정하고 다시 슬로스타트 시작
      1. cwnd값이 ssthresh와 같으면 슬로 스타트 끝나고 TCP는 혼잡 회피 모드로 간다
      1. 3개의 중복 ACK가 검출되면 빠른 재전송을 수행하여 빠른 회복 상태로 들어간다.

혼잡 회피

  • 혼잡 회피로 들어가는 시점에서 cwnd의 값은 대략 혼잡이 마지막으로 발견된 시점에서 값의 반이 된다.

빠른 회복

  • cwnd값을 손실된 세그먼트(TCP를 빠른 회복 상태로 들어가게 했던 세그먼트)에 대해 수신된 모든 중복된 ACK에 대해 1 MSS씩 증가시킨다.

TCP 혼잡 제어: 복습

TCP 큐빅

  • TCP 리노의 혼잡 제어에 대한 가법적 증가, 승법적 감소 접근 방식 고려할때 이것이 패킷 손실 발생 임계값보다 바로 아래의 패킷 전송 속도를 탐색하는게 좋은 방법인지 자연스럽게 궁금해할 수 있다.

  • 패킷 손실이 발생한 혼잡한 링크의 상태가 많이 변경되지 않은경우 정송 속도 빨리 높여 손실 전 전송 속도에 근접한 다음 대역폭을 신중히 조사하는게 좋을것. 이게 TCP 큐빅으로 알려진 TCP의 특징

  • 큐빅은 널리 쓰인다.

  • 최근 50%넘는 점유율(현재는 더 클 듯)

  • 리눅스의 기본 TCP 버전

TCP 리노 처리율의 거시적 설명

3.7.2 네트워크 지원 명시적 혼잡 알림과 지연 기반 혼잡 제어

비교적 최근 네트워크가 TCP 송신자, 수신자에게 명시적으로 혼잡 신호 호낼 수 있도록 IP 및 TCP에대한 확장이 제안, 구현, 배포됨.

명시적 혼잡 알림

ECN 비트 등장

지역 기반 혼잡 제어

3.7.3 공평성

89~

공평성과 UDP

공평성과 병렬 TCP 연결