혼잡 제어(Congestion Control)
-
혼잡 상황이 발생하면 네트워크 자원이 낭비되므로 혼잡 상황을 최소화 하기 위한 기법
- 데이터의 양이 라우터가 처리할 수 있는 양을 초과하면 초과된 데이터는 라우터가 처리하지 못한다. 송신측에서 라우터가 처리하지 못한 데이터를 손실 데이터로 간주하고 계속 재전송하게 되므로 네트워크는 더욱 더 혼잡하게 된다.
-
흐름 제어
- 송신측과 수신측의 데이터 처리 속도 차이를 해결하기 위한 기법
- 송신측의 데이터 전송량 제어
-
혼잡 제어
- 송신측의 데이터 전달과 네트워크 상의 데이터 처리 속도 차이를 해결하기 위한 기법
- 송신측의 데이터 전송 속도 제어
혼잡 제어 방법
AIMD (Additive Increase / Multiplicative Decrease)
- 합 증가 / 곱 감소 방식.
- 처음에 패킷을 하나씩 보내고 문제없이 도착하면 윈도우의 크기(단위 시간 내에 보내는 패킷의 수)를 1씩 증가시켜가며 전송한다.
- 만약 전송에 실패하면 윈도우 크기를 반으로 줄임.
- 공평한 방식으로, 여러 호스트가 한 네트워크를 공유하고 있으면 나중에 집입하는 쪽이 처음에는 불리하지만, 시간이 흐르면 평형 상태로 수렴한다.
- 윈도우 크기를 너무 조금씩 늘리기 때문에 모든 대역을 활용하여 제대로 된 속도로 통신하기까지 시간이 오래 걸린다.
Slow Start
- 윈도우의 크기를 1, 2, 4, 8... 과 같이 2배씩 증가시킨다.
- 혼잡이 감지되면 윈도우의 크기를 1로 줄여버림.
- 시간이 지날수록 AIMD보다 빠르게 윈도우 크기를 증가시킨다.
- 처음에는 네트워크 수용량을 예상할 수 있는 정보가 없지만, 한번 혼잡 현상이 발생하고 나면 네트워크 수용량을 어느 정도 예상할 수 있다.
-
그러므로 혼잡 현상이 발생하였던 윈도우 크기의 절반까지는 이전처럼 지수 함수 꼴로 증가시키고 이후부터는 1씩 증가시킨다.
- 이를 임계점(sshthresh, Slow Start Threshold)이라고 함. 이 임계점은 윈도우 사이즈가 기하급수적으로 증가하는 것을 방지하기 위해 설정하는 것으로 임계점부터 윈도우 크기는 1씩 증가한다.
Fast Retransmit(빠른 재전송)
- Fast Restransmit은 TCP 혼잡 제어에 추가된 정책.
- 먼저 도착해야 할 패킷이 도착하지 않고 다음 패킷이 도착한 경우에도 ACK 패킷을 보냄.
- 순서대로 잘 도착한 마지막 패킷의 다음 순번을 ACK 패킷에 실어보내게 되므로 송신측에서는 순번이 중복된 것을 알게 됨.
- 이것을 감지하여 중복된 순번의 패킷을 3개 받으면 타임아웃 전에 문제가 되는 순번의 패킷을 즉시 재전송해줌.
- 이런 현상이 일어나면 혼잡 현상이 발생한 것이므로 윈도우 크기를 줄임.
Fast Recovery (빠른 회복)
- 혼잡 상태가 되면 윈도우 크기를 1로 줄이지 않고 반으로 줄인 후 선형 증가
- 혼잡 상태를 한 번 겪고 나서부터는 AIMD 방식으로 동작.
혼잡 제어 정책
TCP는 혼잡 제어를 위하여 다양한 기법을 혼합하여 사용하고 있으며 가장 오래되고 기본이 되는 2가지 방식이 있음.
TCP Tahoe
- 처음에는 Slow Start 방식으로 사용하다가 임계점에 도달하면 AIMD 방식 사용
- 그러다 3 ACK 순번 중복 (중간 패킷 유실) 이나 타임아웃이 발생하면 혼잡이라고 판단하여 임계점은 혼잡 발생한 윈도우 크기 절반으로, 윈도우 크기는 1로 줄임.
- 혼잡 이후 Slow Start 구간에서 윈도우 크기를 키울 때 너무 오래걸림.
TCP Reno
- Tahoe와 마찬가지로 Slow Start로 시작해서 임계점 이후에는 AIMD 방식으로 변경
- 단, 3 ACK 중복과 타임아웃을 구분함.
-
3 ACK 중복이 발생하면 Fast Recovery 방식을 사용
- 윈도우 크기를 1로 줄이는 것이 아니라 반으로 줄인 후 윈도우 크기를 선형적으로 증가시킴
- 임계점은 줄어든 윈도우 값으로 설정
-
타임아웃이 발생하면 Tahoe와 마찬가지로 윈도우 1로 줄이고 Slow Start 진행
- 임계점은 반으로 줄인다.