1. TCP 재전송
ㅇ 오류(패킷 손실,지연,중복,순서역전 등)라고 믿어지는 즉, 확인응답되지 않은 데이터를 재전송
ㅇ 한편, `재전송`,`흐름제어`,`혼잡제어` 셋 모두가 함께 연관되므로 같이 고려되어야 함
- 例) 재전송이 흐름제어의 일부 기능이지만, 많아지면 오히려 혼잡을 악화시키는 등
2. TCP 재전송에서 큐 관리 원칙
ㅇ 재전송에 필요한 사항 둘(2) : (복사본 저장, 재전송 타이머)
- 재전송 큐 : TCP 세그먼트 전송시, 그 복사본을 재전송 큐에 저장시킴
- 재전송 타이머 : TCP 세그먼트의 매 전송시 마다, 재전송 타이머 가동
ㅇ 즉, TCP는 세그먼트를 매번 송신 마다, 그에따른 재전송 타이머의 가동과 동시에 재전송 큐에 보관
- 어떤 세그먼트가 타이머 만료 전에 확인응답이 오면, 큐에서 즉시 삭제
- 어떤 세그먼트가 타이머 만료되면, 자동 재전송 실시
- 심지어, 재전송한 세그먼트도 확인응답 오기 전까지는, 계속 큐에 머물게됨
- 계속된 재전송 후에도 전송 실패가 계속되면, TCP 연결 강제 종료
ㅇ 큐 관리 효율성 제고 : 슬라이딩 윈도우
- 바로 앞 세그먼트 전송에 대한 확인응답을 기다리지 않고,
- 수신측이 통보하는 윈도우 크기 내에서 묶어서 순서대로 연속 송신
3. TCP에서 재전송을 결정하는 기반 구분
ㅇ 시간 기반 재전송 (Time-based Retransmission) : TCP 타이머 기반
- 확인응답을 기다리는 시간에 대한 재전송 타임아웃 (RTO)
. 적응적 재전송 알고리즘 (Adaptive Retransmission Algorithm)
.. 변화무쌍한 인터넷 환경에 따라, 각 TCP 연결을 감시하면서, ☞ RTT 측정 참조
.. 적절한 타임아웃을 추정하고, 변화에 따라 적응적으로 타임아웃 값을 수정함
ㅇ 명시적 재전송 피드백 : SACK, ECN
- TCP에서 선택 옵션 사항임
. SACK : 여러 세그먼트 중 손실된 세그먼트 만 선택적으로 확인응답하는 방식
. ECN : 혼잡 알림 필드 사용
ㅇ 빠른 재전송 (Fast Retransmission : Fast Recovery, Fast Retransmit)
- 수신측으로부터의 궤환(재전송 요청) 형태에 기반을 두고,
. 패킷 손실 추정
- 지연 없이 바로 타임아웃, 즉각 재전송 실시
. 즉, RTO(재전송 타임아웃 시간)을 끝까지 기다리지 않는 빠른 재전송
* 주로, 빠른 재전송은, 중복 ACK에 의해 유발됨
. 중복 ACK (Duplicate Acknowledgement) : 하나의 원래 ACK와 중복된 ACK
.. 일련의 세그먼트를 연이어 전송할 때, 중간 세그먼트가 손실되어 수신되면,
.. 수신측은, 모두 같은 순서번호인 중복 ACK를 발생시키며, 즉각 확인응답을 함
.. 즉, 중복 ACK는, 순서 역전 및 중간에 뻥뚫린 구멍이 있음을 의미
. 한편, 송신측은, 중복 ACK를 받으면, 이를 손실인지 지연인지를 구분키 위해,
.. 수 개 정도(통상,3개) 기다림 (duplicate ACK threshold or dupthresh)
- 빠른 재전송 (Fast Retransmit)
. 정상적인 재전송 큐 과정을 따르지 않고, 중간 누락된 세그먼트를 빠르게 재전송
- 빠른 회복 (Fast Recovery)
. 이미 여러번 ACK가 오게되면, 비록 세그먼트들이 순서가 어긋나게 수신되더라도,
네트워크 혼잡이라 여기지 않고, 송신률을 빠르게 증가시킴
* [참고] ☞ TCP 혼잡제어 참조