TCP는 서비스의 데이터 전송의 신뢰성 확보를 위하여 흐름제어, 혼잡 제어 그리고 재전송 제어라는 기능을 이용해 전송한다.
수신 측 단말이 수행하는 흐름양 조정
TCP는 대량의 송신 패킷에 의해 네트워크가 혼잡해지지 않도록 혼잡제어 알고리즘을 통해 패킷의 송신 수(혼잡 윈도우)를 조절한다. 혼잡제어 알고리즘은 혼잡할 경우 혼잡 윈도우를 줄이고, 그렇지 않다면 혼잡 윈도우를 늘린다.
송신측 단말이 수행하는 흐름양 조정
- 혼잡(congestion): 네트워크의 복잡한 상태
네트워크가 혼잡해지면 결과적으로 패킷이 유실되거나 전송이 지연된다.
loss base: 패킷 유실이 발생하면 혼잡이라고 판단
latency base: 지연이 발생하면 혼잡이라고 판단
패킷 유실이 발생했을 때 수행하는 패킷 재전송 기능
TCP는 ACK 패킷을 통해 패킷 유실을 감지하고 패킷을 재전송한다.
재전송 제어가 사용되는 시점
1. 수신측이 계기가 되어 수행되는 중복 ACK
2. 송신 측이 계기가 되어 수행되는 재전송 타임아웃
수신측은 받은 TCP 패킷의 시퀀스 번호가 듬성하면 패킷이 유실되었다고 판단하여 ACK 패킷을 연속해서 보낸다. 여기서 ACK 패킷을 중복 ACK라고 한다.
송신측은 일정 수 이상 중복 ACK를 받으면 대상이 되는 TCP 세그먼트를 재전송한다. 중복 ACK를 트리거로 하는 재전송제어를 Fast Retransmit(고속 재전송)이라고 한다.
송신측은 TCP 세그먼트를 보내고 나서 ACK 패킷을 기다리기까지의 시간을 재전송 타이머(retransmission timer)로 유지한다.
중복 ACK의 개수가 작아 Fast Retransmit이 발동하지 않을 때는 재전송 타임아웃에 도달해 대상이 되는 TCP 세그먼트가 재전송된다.