TCP의 큰 특징을 꼽으라하면 신뢰성 있는 프로토콜, 연결지향 프로토콜 그리고 네트워크 혼잡 제어이다.
이번엔 TCP가 혼잡을 제어하는 방식을 알아보자.
전통적인 혼잡 제어
앞선 글에서 살펴봤 듯이 전통적인 TCP는 네트워크의 지원없이 종단 간에(송신자와 수신자 끼리) 혼잡을 제어한다.
기본적으로 TCP는 혼잡이 발생하면 송신율을 낮추고, 혼잡이 없다면 송신율을 높인다.
혼잡 제어는 TCP의 흐름 제어와 유사하게 Congestion Window(혼잡 윈도우) 크기를 조절해가며 전송속도를 조절한다.
여기서 흐름제어는 수신 측 버퍼에서 패킷이 버려지지 않도록 송신자와 수신자가 속도를 맞추는 것이고 혼잡 제어는 네트워크 혼잡 비용을 줄이기 위한 것이다. 네트워크 혼잡 비용은 앞선 글에서 상세히 다뤘다.
혼잡을 어떻게 검출하나?
전송 속도 조절은 혼잡 윈도우를 통해 한다는 것을 알았다.
그렇다면 혼잡 자체를 TCP가 어떻게 감지하는가?
앞선 글에서도 언급했지만 3개의 중복 ACK, 타임아웃 을 혼잡의 징후로 파악한다.
수신자의 정상 ACK 응답이 잘 도착한다면 송신자는 혼잡 윈도우를 늘릴 것이며 정상 응답이 빠르다면 그만큼 빠르게 혼잡 윈도우를 늘려 전송률을 높일 것이다.
TCP의 전송 속도는 어떻게 결정하나?
TCP의 전송 속도는 트레이드 오프 관계에 놓여 있다.
속도가 빠르면 네트워크는 혼잡해질테고 속도가 느리다면 전송률이 낮아지고 네트워크 활용률도 떨어질 것이다.
TCP의 전송 속도 결정은 아래에서 상세히 설명한다.
Slow Start
TCP는 송신 수신자가 연결을 맺고 나서 1 MSS(Max Segment Size) 만큼 전송하고, 확인 응답을 받을 때 마다 지수적으로 증가한다.
1MSS -> 2MSS -> 4MSS -> 8MSS -> 16MSS ...
이렇게 계속해서 지수적인 증가만 할 수는 없다.
위에서 언급한 혼잡이 감지되면 TCP는 속도를 늦춘다.
- 3-Duplicated ACK : 삼중 반복 ACK인 경우 혼잡윈도우 크기를 1/2로 감소시킨다. (소심하게 감소)
- Timeout : 타임아웃인 경우 혼잡 윈도우 크기를 1로 줄인다. (과감하게 감소)
또한 TCP는 혼잡이 발생하면 혼잡이 발생한 지점의 전송량의 1/2 지점을 아래와 같이 기록해 놓는다.
혼잡 회피 (Congestion Avoidance)
TCP는 지수적 증가를 이어가다가 스레쉬홀드를 만나면 선형 증가하게 된다.
다시말해 이전 혼잡 지점을 넘어서면 조심스럽게 전송률을 올리는 것이다.
TCP 타호와 TCP 리노 방식의 차이
TCP 타호는 초기 TCP 버전으로 삼중 반복 ACK, 타임아웃이 발생하면 무조건 윈도우 사이즈를 1로 줄인다.
반면 TCP 리노는 빠른 회복을 택했기 때문에 삼중 반복 ACK의 경우엔 (1/2Threshold + 3)로 사이즈를 줄인다.
타임 아웃의 경우 동일하게 윈도우 사이즈를 1로 줄인다.
TCP CUBIC
TCP CUBIC은 TCP 리노 방식보다 좀 더 효율적인 혼잡 회피 단계가 추가됐다.
Wmax는 마지막으로 혼잡이 감지된 윈도우 크기다. 리노의 경우 절반정도로 전송률을 떨어뜨리고 선형증가를 이어가는 것을 반복한다.
하지만 큐빅의 경우 X^3 꼴의 함수로 전송률을 리노보다 빠르게 올리고 혼잡지점에 가까워지면 조심스럽게 증가시킨다.
하향식 네트워크 교재에 따르면 리눅스 운영체제에서 사용되는 TCP의 기본 버전이라고 한다.
네트워크 지원 혼잡 제어
명시적 혼잡 알림 ECN
명시적 혼잡 알림은 TCP가 IP 계층(네트워크)의 도움을 받는 방식을 말한다.
기본적으로 라우터는 IP계층까지만 존재하기 때문에 IP 패킷 헤더를 이용해 네트워크의 혼잡 상태를 제어할 수 있다.
IP 헤더 중 TypeOfService 헤더에 송신자가 마킹을하여 ECN을 사용할 수 있음을 라우터에게 알리고
혼잡이 발생하면 라우터는 이 TypeOfService 헤더에 마킹하여 혼잡을 알릴 수 있다.
송신자는 IP 헤더의 TypeOfService 헤더를 보고 네트워크 혼잡을 알게되면 TCP 헤더의 ECE(Explicity Congestion Notification Echo)헤더에 혼잡을 표시해 송신자가 전송률을 감소시키게 한다.(절반으로 감소)
지연 기반 혼잡 제어
TCP Vegas라 불리는 이 방식은 출발지에서 목적지까지 RTT를 측정하고 측정된 RTT중 최소값으로 윈도우 크기를 나눠 처리율을 계산한다.
이 값은 혼잡 하지 않을 때의 처리율이므로 속도를 선형증가 시키고, 이 값을 넘어서게 되면 전송 속도를 낮추게 된다.
공평성
하나의 라우터를 두고 두 TCP 연결이 존재할 경우 두 연결이 결국 공평한 처리율을 갖는다는 개념이다.
이는 TCP의 AIMD(승법 감소, 가법 증가)가 과연 공평한 지를 설명하는 좋은 그래프이다.
두 연결의 처리율 R보다 작은 경우 윈도우를 증가시킬 것이고 이는 R의 처리율을 넘게되는 결과를 가져온다.
다시 두 연결은 윈도우를 감소시킬 것이고 이게 반복되다보면 그래프의 y=-x 꼴 그래프에 다가가게된다.
'네트워크' 카테고리의 다른 글
네트워크 혼잡제어의 원리 (0) | 2024.11.30 |
---|