cs/데이터통신

Congestion control

Nytro 2024. 11. 30. 17:34

혼잡 제어: 너무 많은 소스에서 너무 많은 데이터들을 너무 빠르게 보내는 것을 방지하도록 제어하는 것

<->흐름제어: 흐름제어는 1대1 통신에서 윈도우 버퍼가 오버플로우 되지 않도록 흐름을 제어하는 것이고,

<->혼잡제어: 라우터에서 큐잉 딜레이와 패킷 로스를 방지하기 위해 다수의 sender가 너무 빠르게 데이터를 전송하지 않도록 조절하는 것이다

 

AIMD

TCP에서는 sender가 혼잡한 정도를 추측한다. AIMD(Additive Increase Multiplicative Decrease) 방식을 사용하는데

쉽게 말해 패킷 로스가 발생할 때까지 전송 비율을 증가시키다가 패킷 로스가 발생하면 전송 비율을 반으로 줄여 다시 늘리는 방식이다. 

1. 전송 비율을 매 RTT마다 증가시킴

2. 패킷 loss 발생 시 전송 비율을 반으로 감소

3. 3개의 duplicate ACK 발생 시 절반 사이즈로 줄여 다시 늘려 나감.(TCP Reno 버전부터)

4. 만약 timeout이 발생하면 1MSS 사이즈로 줄여 다시 늘려 나감.(TCP Tahoe 버전부터)

*MSS(maximum segment size)는 한 번에 TCP에서 보낼 수 있는 최대 메시지 크기로 단위라고 보면 된다. 

 

TCP 혼잡 제어는 흐름 제어처럼 cwnd의 unACKed로 제어된다.

네트워크 혼잡에 따라 cwnd를 조절한다.

기본적으로 TCP sender는 위에서 lastbyteSent - LastByteAcked <= cwnd 로 전송 비율을 제한한다.

TCP rate(초당 전송비율)은 다음과 같다.

1RTT 동안 cwnd 크기 만큼의 전송이 가능하다는 의미이다. 

TCP slow start

네트워크의 혼잡 상태를 확인하기 위해 송신 속도를 점진적으로 증가시키는 알고리즘

첫 번째 패킷 로스 event가 발생할 때까지 cwnd=1MSS로 시작하여 매 RTT마다 cwnd*=2 한다.

ACK 단위로 보았을 때 도착하는 ACK 하나 당 cwnd를 한 개 씩 증가시키고 있다. 

Conjestion Avoidance

매 RTT마다 cwnd = cwnd + 1 MSS로 증가한다. (*2배)

ssthresh는 이전에 패킷 loss가 발생한 지점/2 인데, 따라서 ssthresh부터는 패킷 loss가 발생할 확률이 높기 때문에 cwnd가 다시 선형적으로 증가한다.

패킷 loss가 발생하면 TCP Tahoe는 다시 1MSS부터, TCP Reno는 ssthresh 지점으로 돌아와 다시 증가시킨다.

slow start는 지수적 증가, congestion avoidance는 선형적 증가

slow start는 각 ACK마다 1MSS를 증가시켜 총 두배 씩 증가시킨다.

congestion avoidance는 cwnd(혼잡윈도우)가 각 RTT마다 1MSS씩 증가시키므로 각 ACK마다 1/cwnd만큼 증가시킨다.

(cwnd = 5라면, 다음 전송은 cwnd + 1/cwnd * cwnd = cwnd + 1 로 6만큼 보낸다 즉, 총 5개의 cwnd가 다음 전송에서 각각 1/5씩 더 전송해서 총 6개만큼 보낸다고 이해하면 편할듯?)

 

TCP Congestion control Statement

앞전의 TCP의 statement와 기본적인 구조는 같다.

점선(ㅡㅡㅡ)은 위는 상태 변화를 발생시키는 event를, 아래는 상태가 변화하면서 바뀌는 다른 변수들의 상태를 뜻한다.

 

위에서 fast recovery 로 갈 때 cwnd = ssthresh + 3MSS로 설정하는 이유는 네트워크 혼잡을 완화하면서 네트워크 속도를 유지하려는 설계 때문이다. cwnd가 ssthresh에 도달했다는 것이 네트워크가 혼잡 상태에 도달했다는 의미이고, dupACK을 세 개 받았다는 것은 ACK delay가 있었다는 것이므로 ssthresh로 보내는 것이다.

'cs > 데이터통신' 카테고리의 다른 글

IP Datagram format  (0) 2024.11.30
Network layer (1)  (0) 2024.11.30
TCP State transition diagram  (0) 2024.11.30
TCP RTT(Round Trip Time)과 3-way handshake  (0) 2024.11.30
Transport layer  (0) 2024.11.30