2020. 7. 1.

[Network] 3.7 TCP의 혼잡제어


*TCP congestion control

end-end control (network으로부터 지원은 없다)

sender의 전송량을 제한
LastbyteSend – LastbyteAcked ≤ CongWin (TCP 수신buffer가 충분히 큰경우 : 혼잡제어만 필요)
[≤ min{congWin, RcvWindow}] (혼잡제어) (흐름제어)
송신률
rate = CongWin / RTT (byte/sec)
// congwin : 센더의 윈도우 사이즈
CongWin netwok 혼잡도에 따라 동적으로 변한다.

Sender congestion에 대한 반응
  • 손실이 발생
    • timeout 또는 3번의 중복 ACK
    • 손실에 의한 재전송이 발생
// timeout 일때는 윈도우 사이즈를 가장 적게 줄인다. ex 보통 절반
// 3번의 중복으로인한 윈도우 사이즈 줄이는양보다 timeout 양이 많이 줄인다.
  • TCP sender는 손실이 발생하면 CongWin을 줄인다.

혼잡제어 알고리즘
  • AIMD
  • slow start
  • timeout event 대한 반응

*TCP AIMD

multiplicative decrease
loss event가 발생하면 CongWin size를 반으로 줄인다.
  • 1MSS 이하로 떨어지지는 않는다.

// 혼잡회피라고 불림
// aimd 천천히 늘려가는

additive increase
loss event가 없으면 매번 ACK를 확인 할때 각 RTT마다 congWin의 증가폭이 1MSS가 되도록 조금씩 confWin을 증가 시킨다.
-> 이러한 선형 증가를 혼잡 회피라고 한다.



*TCP Slow start

TCP연결이 시작될때 CongWin 크기는 1 MSS로 초기화 되고 초기 전송률은 MSS/RTT가 된다.
  • Ex
MSS(500byte), RTT(200ms)
init rate = 20kbps
500byte/200ms
= 4,000bit/0.2s = 20,000bps
=20kbps

사용가능한 대역폭은 MSS/RTT보다 매우 크다
  • 선형비률로 증가시키면 전송률이 적당한 수준에 오를때 까지 긴 지연이 초래된다.
첫번째 loss가 발생할 때 까지 각 ack를 확인할 때 마다 congWin 1MSS만큼 증가 시켜 각 RTT마다 congWin이 두배가 되도록 한다.

congWin의 증가치
AIMD : RTT마다 1MSS
SS : ACK마다 1MSS RTT마다 두배

접속이 되면 loss event가 발생할 때 까지 지수적으로 속도를 증가시킨다.
  • RTT마다 CongWin이 두배
  • 모든 ACK가 수신될때마다 CongWin을 증가 시킨다.
초기의 속도는 매우 느리지만 지수적으로 빠르게 증가하는 모델이다.


*Refinement

세번의 중복 ACK수신
  • CongWin은 반으로 줄어든다.
  • Congwin은 선형적으로 증가한다.
  • AIMD
그러나 timeout이 발생하면
  • CongWin 1MSS로 줄인다.
  • 지수적으로 CongWin을 증가시킨다.
  • threshold에 도달하면 다시 선형적으로 증가한다.
: 혼잡 회피에 들어간다.

threshold : CongWin의 절반

개념
- 세번 중복된 ACKs는 네트워크가 거의 대역폭 한계에 도달했다고 판단
- timeout는 삼중 ACK보다 심각하게 처리한다.

Q :언제 지수적인 증가가 일어나는가?
A : timeout에 의해 CongWin 1로 줄어든 이후에 threshold까지

구현
  • threshold는 가변적이다.
  • Loss event가 일어나면 threshold congWin 1/2 설정된다.



*TCP 혼잡제어 요약

CongWin threshold에 도달 할때 까지 slow-start방식으로 빠르게 증가한다.
CongWin threshold에 도달하면 혼잡회피를 위해 선형적으로 천천히 증가한다.
3번 중복된 ACK가 감지되면 CongWin threshold 까지 줄어들고 선형으로 증가한다.
Timeout이 발생하면 CongWin 1 MSS로 줄었다가 다시 threshold 도달 할 때 까지 빠르게 증가한다.



댓글 없음:

댓글 쓰기