TCP 혼잡제어란 네트워크 내의 데이터를 조절하여 오버플로우 현상을 방지하는 기술이다.
네트워크 내에서 전송을 하면서 네트워크 환경은 항상 잔잔한 상태는 아니다.
어떤 때에는 데이터의 수가 과도하게 증가하기도 하고 데이터가 유실되기도 한다.
이러한 상황을 혼잡(Congestion) 상황이라고 한다.
그리고 TCP는 이 혼잡 상황을 방지하거나 해결하는 혼잡제어 기능을 제공한다.
TCP는 혼잡이 발생하기 전과 발생한 후의 제어방식이 각기 다르다.
혼잡이 발생하기 전에는 Slow Start 와 Additive Increase 방식을 사용한다.
혼잡이 발생한 후에는 Multiplicative Decrease 방식으로 혼잡 상황을 해결한다.
TCP가 혼잡상황을 인식하는 경우는 다음과 같다.
1) 데이터를 송신하고 타임아웃이 되어 재전송해야 할 경우
2) 3개 이상의 중복된 ACK를 수신했을 경우
다음은 TCP가 혼잡 상황을 인식했을 때의 동작이다.
TCP는 세그먼트들을 Slow Start 방식으로 하나씩 전송하게 된다.
이때 cwnd의 값은 1이다.
1,2,4,8,.. 이런식으로 cwnd 의 값을 지수적 증가방식을 통해 세그먼트를 임계값까지 전송한다.
여기서 임계값은 Slow Start Threshold(ssthresh)라는 단어를 사용한다.
ssthresh 까지 cwnd 가 도달하게 되면 TCP는 혼잡 상황으로 갈 위험이 높다고 여기고
Additive increase 기법을 사용하여 혼잡을 회피한다.
Additive increase 기법을 사용하여 혼잡을 회피한다.
Additive increase 기법은 cwnd 를 하나씩 증가하면서 혼잡을 회피하게 되는데
결국 혼잡이 발생한 상황을 감지하게 되면 Multiplicative Decrease 방식을 수행한다.
Multiplicative Decrease 방식은 혼잡이 발생한 상황의 경우에 따라 다르게 동작한다.
1. 세그먼트 전송후 타임아웃 되어 재전송 해야 하는 상황
cwnd 는 1로 재설정 되어 그래프로 보는바와 같이 아래서부터 다시 시작되게 된다.
ssthresh 값은 기존 cwnd값에서 반값으로 줄어든다.
그리고 이후에는 Slow Start 와 Additive increase 기법을 계속해서 수행한다.
2) 3개 이상의 중복된 ACK를 수신한 경우
이러한 상황에서 수행되는 Multiplicative Decrease 방식은 ssthresh 값이 기존에서 반으로 축소되고
cwnd의 크기는 ssthresh와 같은 값으로 재설정된다.
그리고 이후에는 Additive increase 기법으로 혼잡 회피만 수행한다.
'네트워크' 카테고리의 다른 글
[네트워크] UDP (0) | 2022.10.11 |
---|---|
[네트워크] PORT (0) | 2022.10.10 |
[네트워크] TCP 흐름제어 - Sliding window (0) | 2022.10.06 |
[네트워크] ARQ (0) | 2022.10.05 |
[네트워크] 3-way handshake, 4-way handshake (0) | 2022.10.04 |