TCP Congestion Control

Shinny·2022년 6월 23일
0

컴퓨터 네트워크

목록 보기
1/1

네트워크의 혼잡 원인을 해결하기 위해서는 네트워크의 혼잡을 일으키는 송신자를 억제하는 매커니즘이 필요하다.
네트워크의 혼잡이 데이터 송신과 수신속도 그리고 효율에 어떻게 영향을 미칠 수 있는지 알기 위해 세 가지 시나리오를 살펴본다.

시나리오 1. 2개의 송신자 + 무한 버퍼를 갖는 1개의 라우터

비현실적이지만, 라우터가 무한 버퍼를 갖는다고 가정해본다. 그리고 2개의 호스트는 1개의 라우터를 사용하기 위해서 라우터의 Capacity(R)를 나누어서 사용하게 된다. 그러면 연결당 처리량이 R/2 사이일 경우 수신자 측의 처리량은 송신자의 전송률과 같다. 하지만 전송량이 R/2가 넘어갈 경우 처리량은 R/2를 넘을 수 없다. 이 시나리오에서 혼잡 네트워크의 비용은 패킷의 도착률이 링크 용량에 근접함에 따라서 큐잉 지연이 커지게 되는 점이다.

시나리오 2. 2개의 송신자 + 유한버퍼를 가진 1개의 라우터

이 경우 문제는 송신자는 버퍼 오버 플로우 때문에 버려진 패킷을 보상하기 위해 재전송을 해야 한다. 즉 처리량은 똑같은데 전송량이 많아지게 되는 것이다. 심지어 버려지지 않았는데 송신자 측에서 일찍 타임아웃이 되어버려 재전송을 하게 되면 큐에서 지연된 패킷 + 재전송된 패킷 두 개가 모두 전달되는 비효율적인 경우도 발생한다.
이 시나리오에서 혼잡 네트워크의 비용은 라우터가 패킷의 불필요한 재전송을 함으로 인해 링크 대역폭을 더 사용하게 되는 것이다.

시나리오 3. 4개의 송신자 + 유한버퍼를 가지는 4개의 라우터

호스트가 다른 호스트로 데이터를 보내기 위해 2개의 라우터를 거쳐야 하는 경우, 트래픽이 과부하될 수록 B Host->D Host 전송 데이터를 처리하느라 A Host ->C Host 전송 데이터는 라우터에 들어가지 못하고 패킷이 전부 버려지게 된다. 이 경우, 버려지는 지점까지 패킷을 전송하는데 사용된 상위 라우터에서 사용된 전송 용량은 모두 헛된 것이 된다.

TCP의 특징 3가지는 바로 1. Reliability 2. Flow Control 3. Congestion Control이다. TCP는 다른 호스트에서 동작하는 두 프로세스 사이의 신뢰적인 전송 서비스를 제공한다.

1. TCP 송신자는 전송 트래픽 전송률을 어떻게 제한하는가?

TCP 연결의 양 끝 호스트들은 송신버퍼, 수신버퍼로 구성되고 송신 측에서는 혼잡윈도우 (Congestion Window)를 기록한다. 그리고 이 cwnd를 통해 네트워크로 트래픽을 전달할 수 있는 비율을 제한한다. 송신 데이터의 양은 cwnd와 rwnd의 최솟값을 넘어서는 안 된다.

2. TCP 송신자는 자신과 목적지 사이 경로혼잡을 어떻게 감지하는가?

크게 두가지가 있다. 1. 타임아웃 발생 2. 수신자로부터 3개의 중복된 ACK들의 수신이 발생했을 때 감지할 수 있다. 하지만 타임아웃 발생이 네트워크 Congestion의 정도가 더 높다고 예상해볼 수 있다. 왜냐하면 2번의 경우에는 그 뒷 부분의 segment들은 다 도착한 경우겠지만 1번의 경우에는 아예 그 segment 부터 다 막혀있다고 볼 수 있기 때문이다.

3. 송신자는 종단간의 혼잡에 따른 송신율 변화를 위해 어떤 알고리즘을 사용하는가?

이 알고리즘은 세 가지 중요한 구성요소를 가지는데, 1. 슬로우 스타트 2. 혼잡 회피 3. 빠른 회복이 있다.

  • 슬로우 스타트
    TCP 연결이 시작될 때, 가장 처음 TCP 전송률은 1MSS에서 시작해서 지수적으로 증가하게 된다. 그리고 지수적 증가가 끝나는 시점은 혼잡이 발생되는 경우이다. 그 때 TCP 송신자는 cwnd의 값을 1로 하고 ssthresh(슬로우 스타트 임계점)의 값을 cwnd/2로 정한다. 그리고 다시 값을 지수적으로 증가시키고 임계점에 도달하면 혼잡 회피 모드로 들어간다.

  • 혼잡 회피
    여기서 매 RTT마다 cwnd의 값을 두배로 하기 보다 TCP는 조금 더 보수적인 방법을 채택해서 매 RTT마다 하나의 MSS만큼 cwnd를 증가시킨다. 그리고 타임아웃이 발생하면 시작점은 다시 1MSS로 떨어뜨리고 임계점은 기존 cwnd의 1/2로 줄인다. 그리고 나서 빠른 회복 상태로 들어가게 된다.

profile
비즈니스 성장을 함께 고민하는 개발자가 되고 싶습니다.

0개의 댓글