TCP 의 신뢰성 보장

2020-03-16

이번 포스팅에서는 TCP 의 신뢰성 보장이 어떻게 이루어지는가 간단한 정리입니다.


일반적을 TCP 는

3-way-handshaking 과 혼잡제어, 흐름제어를 통해 신뢰성을 보장합니다.

이전 포스트들 중 :3-way-handshaking post

흐름 제어 (control flow)

TCP가 신뢰성 보장을 위해 사용하는 메커니즘 중 하나로서 송신측과 수신측의 속도 차이를 해결하기 위해 사용하는 메커니즘입니다.

대표적으로 Stop and Wait ARQ, Sliding Window 기법이 있습니다.

Stop and Wait ARQ

매번 패킷을 보내고 난 후 확인 응답을 받아야만 패킷을 전송하는 방식입니다.

Sliding Window

수신측에서 설정한 윈도우 크기만큼 확인 없이 세그먼트를 전송할도록 하여 데이터 흐름을 동적으로 조절하는 방식입니다.

Window

데이터를 보내기 전 3-way-handshaking 을 통해 수신측이 데이터를 받을 수 있는 버퍼양과 송신측이

데이터를 보낼 양을 맞추게 되는데 이 데이터 양을 window size라고 합니다.

Go-Back-N ARQ

누적 응답을 사용한 방식으로 응답신호가 손실되더라도 이후 순서의 응답신호를 받으면 window가 shift 됩니다.

timer가 하나이기에 순서가 낮은 프레임이 손실되면 이후의 모든 프레임을 재전송합니다.

수신측의 window 사이즈가 1로 설정되어 있어 프레임을 순차적으로만 수신할 수 있습니다.

Selective Repeat ARQ

선택 응답을 사용한 방식으로 window의 가장 처음 프레임의 응답신호를 받아야 window가 shift 됩니다.

각 프레임당 timer가 동작하고 순서가 낮은 프레임이 손실되더라도 해당 프레임만 재전송합니다.

송신측과 수신측의 window size가 같기에 수신측에서 프레임 순서와 상관없이 수신이 가능합니다.

혼잡제어 (congestion control)

TCP가 신뢰성 보장을 위해 사용하는 메커니즘 중 하나로서 네트워크의 혼잡을 피하기 위해

송신자의 전송속도를 줄이기 위해 사용하는 메커니즘입니다.

대표적으로 AIMD, Slow Start, Fast Retransmit, Fast Recovery 기법이 있습니다.

AIME (Additive Increase/Multiplicative Decrease)

window size를 1부터 시작하여 하나씩 증가시킵니다. 혼잡상태가 감지되면 window size를 절반으로 감소시킵니다.

Slow Start

window size를 1부터 시작해서 매회 2배씩 증가시킵니다.

혼잡이 발생하면 window size를 1로 감소시킨 후 지수적으로 증가시킵니다.

혼잡이 발생했던 window size의 절반부터는 선형적으로 증가시켜 나갑니다.

Fast Retransmit

수신자가 프레임을 순서대로 받지 못햇을 경우 순서대로 받은 프레임 중

가장 최근의 프레임에 대한 ACK 신호를 보내게 됩니다.

이때 송신자는 3개 이상의 중복된 ACK를 받을 경우 timeout까지 기다리지 않고 바로 패킷을 재전송함으로서 시간을 절약합니다.

이런 현상이 반복되면 혼잡 상태로 인지하여 window size를 감소시킵니다.

Fast Recovery

Slow Start 처럼 window size를 증가시키다가 혼잡상태를 만나면 window size를

1이 아닌 절반으로 감소시킨 후 선형적으로 증가시키는 방법입니다.