[Network] TCP 혼잡제어

Updated:

혼잡 $($Congestion) 이란?

송신측의 데이터는 지역망이나 인터넷으로 연결된 대형 네트워크를 통해 전달됩니다. 이때 만약 한 라우터에 데이터가 몰릴 경우, 자신에게 온 데이터를 모두 처리할 수 없게 되며 결국 라우터 내의 큐가 포화상태가 되어 패킷의 전달이 취소되거나 손실되는 현상이 발생하게 됩니다.

즉, 네트워크 내 대기하는 패킷 수가 네트워크 처리 용량을 초과하는 경우를 혼잡이 발생 하였다고 합니다.

이러한 혼잡현상을 방지하거나 제거하는 작업을 혼잡제어라고 합니다. 혼잡제어는 네트워크 계층과 전송 계층이 관여하여 이루어 집니다.

혼잡제어 방식에는 네트워크 자원을 늘리는 방식, 네트워크 측에 자원을 미리 예약하는 예약 기반 방식 등이 있지만 여기서는 가장 많이 사용되는 송신측 전송률을 제어하는 혼잡제어 방법에 대하여 알아보겠습니다.

혼잡제어 방식$($Congestion Control)

  • AIMD 합 증가/ 곱 감소 $($Addtive Increase / Multiplicative Decrease)

처음에 패킷을 하나씩 보내고 이것이 문제 없이 도착하면 window 크기 $($단위 시간내에 보내는 패킷의 수)를 1씩 증가해 가며 전송하는 방식 입니다. 만약 패킷전송을 실패하였거나 일정시간을 넘으면 패킷을 전송하는 속도를 절반으로 줄이게 됩니다.

이 방법을 사용하는 여러 호스트가 한 네트워크를 공유하고 있으면, 나중에 진입하는 쪽이 처음에는 불리하지만 시간이 흐르면 평형 상태로 수렴하게 되어 공평해 진다는 특징이 있습니다.

단, 초기에 패킷을 하나씩 보내기 때문에 네트워크의 높은 대역폭을 활용하지 못하여 오랜 시간이 걸리게 되고, 네트워크가 혼잡해지는 상황을 미리 감지하지 못한다는 단점이 존재합니다.

즉, 네트워크가 혼잡해지고 나서야 대역폭을 줄이는 방식이라 할 수 있습니다.

  • Slow start

앞에서 이야기 했듯이 AIMD의 경우 혼잡상태를 미리 감지하지 못하기 때문에 전송 속도를 올리는데 너무 오랜 시간이 걸린다는 단점이 있었습니다. 이러한 단점을 해결하는 방법으로 Slow start방식이 제시되었습니다.

Slow-start

Slow start 방식또한 AIMD와 같이 패킷을 하나씩 보내기 시작합니다.

하지만 이 방식은 패킷이 문제없이 도착할 경우 한 ACK 패킷마다 window 크기를 1씩 증가 시켜 줍니다. 즉, 하나의 주기가 끝나면 window 크기가 두배가 됩니다. 덕분에 전송속도가 지수 꼴로 증가합니다.

만약 혼잡 현상이 발생하면 window 크기를 1로 줄여버립니다. AIMD 방식과 마찬가지로 처음에는 네트워크의 수용량을 예상할 수 있는 정보가 없지만 한번 혼잡 현상이 발생하고 나면 네트워크의 수용량을 어느 정도 예상할 수 있으므로 혼잡 현상이 발생하였던 window 크기의 절반까지는 이전과 같이 지수 꼴로 window 크기를 증가 시키고, 그 이후부터는 완만하게 1씩 증가시킵니다.

  • Fast Retransmit

Fast-retransmit

송신측에서 중복된 ACK를 받게되면 패킷손실로 간주하고 즉시 재전송하는 방식입니다.

패킷을 받는 수신측에서 먼저 도착해야할 패킷이 도착하지 않고 다음 패킷이 도착한 경우, $($위의 그림에서 segment 4, segment 5)

그 전에 정상적으로 도착했던 마지막 패킷의 순번$($ACK 3) 을 ACK에 실어서 보내, 수신측은 전에 받았던 ACK와 중복된 ACK를 받게 됩니다.

중복된 ACK를 3번 받게되면 문제가 되는 순번의 패킷을 재전송하며 혼잡을 감지하고 window 크기를 줄이게 됩니다.

즉, 중간에 패킷이 손실되면 송신측에서는 중복된 ACK를 받게되고 이를 감지하여 문제가 되는 순번의 패킷을 재전송 해줍니다.

Fast retransmit로 구현된 TCP를 TCP Tahoe라고 합니다.

  • Fast Recovery

혼잡상태가 되면 window 크기를 1이 아닌 반으로 줄이고 선형으로 증가시키는 방식입니다.빠른 회복 정책까지 적용하면 혼잡 상황을 한번 겪고 나서부터는 AIMD 방식으로 동작하게 됩니다.

TCP-reno

Fast recovery로 구현한 TCP를 TCP Reno라고 합니다.

Categories:

Updated:

Leave a comment