TCP 혼잡 제어에 대해서

Dmori_2562·2022년 12월 5일
0

전송 계층(Transport-Layer)


End-to-end 혼잡 제어

송신자는 손실이 발생할 때까지 사용 가능한 대역폭을 탐색하여 전송 속도(전송 크기)를 증가시킵니다.

  • congestion window - cwnd로 표기

  • additive 증가: 손실이 감지될 때까지 RTT마다 1MSS씩 cwnd 증가

  • multiplicative 감소: 손실이 감지된 뒤, cwnd를 절반으로 감소


혼잡 제어: 원리

송신자에서 작동하는 TCP 혼잡 제어 메커니즘은 congestion window(cwnd)라는 추가 변수를 추적한다.

cwnd: TCP 송신자가 네트워크로 트래픽을 보낼 수 있는 속도에 제약을 가한다.


특히, 송신자의 unacked 데이터 양은 최소 cwnd 및 rwnd를 초과할 수 없다.

LastByteSent - LastByteAcked <= min(cwnd, rwnd)

하지만 우리는 rwnd는 고려하지 않고, cwnd의 값에만 집중하기로 한다!


혼잡 제어: 세부사항


송신자는 전송을 제한한다.

TCP의 전송 속도: cwnd/RTT (bytes/sec)

  • cwnd 바이트만큼 전송하고, RTT시간동안 ACK를 기다린다.
  • 그 후, 바이트를 더 보낸다.

TCP 혼잡 제어 알고리즘은 3가지 요소가 존재한다.

  • slow start(느린 시작)

  • congestion avoidance(혼잡 회피)

  • fast recovery(빠른 회복)


1. TCP Slow Start

연결을 시작했을 때, 손실이 발생하기 전까지 기하급수적으로 속도를 증가시킨다.

  • 처음 cwnd: 1 MSS

  • RTT마다 cwnd를 2배로 늘린다.

  • 수신된 모든 ACK에 대해 cwnd를 증가시킴으로써 수행된다.

초기 속도는 느리지만 기하급수적으로 빠르게 증가한다!


2. Congestion Avoidance


혼잡 방지(congestion-avoidance) 상태로 진입할 때,

  • cwnd의 값은 정체가 마지막으로 발생했을 때의 값의 약 절반이다.

  • TCP는 RTT마다 cwnd 값을 두 배로 증가시키는 것보다 더 보수적인 접근 방식을 채택하고 RTT마다 단 하나의 MSS만큼 cwnd 값을 증가시킨다.


3. Fast Recovery

  • 손실이 발생했을 때, cwnd의 값을 절반으로 감소시킨 뒤, +3한 값을 cwnd로 설정한다.

  • fast recovery에서 cwnd의 값은 중복 ACK마다 1MSS씩 증가한다.

  • 추천되지만, 요구사항은 아니다!

총 정리


TCP Fairness

목적

K개의 TCP 세션이 대역폭 R의 동일한 bottleneck(병목 링크)를 공유하는 경우, 각 세션은 평균 R/K 속도를 가져야 한다.


방법

두 개의 경쟁 세션이 있을 때,

  • Additive increase는 전체적으로 증가함에 따라 기울기가 1이 된다.
  • Multiplicative decrease는 처리량을 비례적으로 감소시킨다.

Network-assisted 혼잡 제어

Explicit Congestion Notification(ECN)

이름만 알아두고 넘어갑시다~

profile
어제보다 더 나은 오늘의 나를 위해 달려나가는 중입니다!

0개의 댓글