2018년 11월 27일
TCP 혼잡제어
I. 네트워크 트래픽 부하 제어 기법, TCP 혼잡제어
가. TCP 혼잡제어의 개념
송신측에서 Ack 수신 여부로 네트워크 상황을 판단하여 송신 데이터 크기 조절하여 혼잡상황 제어 기법
나. TCP 혼잡제어 메커니즘
방안 | 설명 |
---|---|
송신자 전송률 제한 | – 혼잡 윈도우인 cwnd(Congestion Window) 값 조정하여 데이터 전송 비율 조절 |
혼잡 감지 | – TCP 송신자는 이벤트 발생 시 송신률↓ 손실이벤트 = Timeout 또는 Duplicate ACK |
Slow Start | – cwnd < ssthresh 일 때 cwnd는 지수적 증가 (cwnd = cwnd * 2) |
Congestion Avoidance | – cwnd > ssthresh 일 때 cwnd는 선형적 증가 (cwnd = cwnd + 1) |
II. 기본적인 TCP 혼잡제어 기법
가. Slow Start(느린 출발) 혼잡제어 기법
구분 | 설명 |
---|---|
Slow Start 에 의한 cwnd 변화 | |
알고리즘 | – 새로운 TCP 연결이 생성되거나 재전송 시간 초과(Timeout)로 패킷 손실 발생 시 수행 – ACK 수신 시 혼잡 윈도우(cwnd) 크기를 세그먼트 크기만큼 증가 (X2) – 한계(ssthresh, Slow Start Threshold)까지 지속적으로 증가 – Timeout 발생 시: cwnd = 1 MSS(Maximum Segment Size) – 3 Duplication ACK 발생 시: ssthresh = 1/2 window, cwnd=ssthtresh 및 Congestion Avoidance 상태로 천이 |
나. Congestion Avoidance(혼잡 회피) 혼잡제어 기법
구분 | 설명 |
---|---|
Congestion Avoidance 에 의한 cwnd 변화 | |
알고리즘 | – Slow Start 지수적 증가가 임계치(ssthresh)에 도달하게 되면 혼잡으로 간주하고 회피를 위해 cwnd 크기가 선형적으로 증가하여 혼잡 예방 – Slow Start에 비해 훨씬 느린 속도로 증가되므로 혼잡 회피 기능 수행 |
III. 개선된 TCP 혼잡제어 기법
가. Fast Retransmit / Fast Recovery 혼잡제어 기법
구분 | 설명 | 설명 |
---|---|---|
Fast Retransmit | – 송신측에서 Duplicate ACK를 받게 되면 패킷 손실로 간주하고 즉시 재전송 – Fast Retransmit 미사용 시 손실 발생 시 재전송 Timeout 만료 후 재전송 | – Fast Retransmit로 구현한 TCP를 TCP Tahoe라고 함 |
Fast Recovery | – Fast Retransmit 후 Slow Start 아닌 Congestion Avoidance 상태에서 전송하는 기법 – 여러 패킷 손실 시 패킷 하나 식 복구 되므로 모든 패킷 ACK 수신까지 대기 | – Fast Recovery로 구현한 TCP를 TCP Reno라고 함 |
– Fast Retransmit와 Fast Recovery는 TCP 손실복구 기술임
– TCP Reno 이후 TCP NewReno와 TCP SACK(Selective ACK) 옵션으로 확장
나. Fast Retransmit와 Fast Recovery 윈도우 변화에 따른 그래프
Fast Retransmit | – 세 번의 Duplicate ACK 발생 시 Timeout을 기다리지 않고 즉시 전송 시작 |
Fast Recovery | – Fast Retransmit 수행 후 Slow Start가 아닌 Congestion Avoidance 수행 |
IV. TCP 혼잡 회피 메커니즘 (추가 알고리즘)
구분 | 설명 |
---|---|
TCP Tahoe (SS + CA + Fast Retransmit) | – 3 Duplicate ACK 수신 시 즉시 재전송 – 재전송 시간 대기 미수행하여 TCP 성능 향상 (SS + CA 경우, 재전송 시간 만료 후 재전송) ① 재전송 직후 ssthresh = 1/2 Window 설정 ② Window 크기 1 MSS로 설정하고 SS로 천이 |
TCP Reno (TCP Tahoe + Fast Recovery) | – 3 Duplicate ACK 수신 시 즉시 재전송 ① 재전송 후 ssthresh = 1/2 Window + 3 (ACK) ② cwnd = ssthresh 설정, ACK 수신 시 CA 천이 (단점) 다수 패킷 동시 손실 시 복구 불가 TCP New Reno, SACK 선택 옵션으로 해결 |
TCP New Reno (TCP Tahoe + 개선된 Recovery) | – 패킷 순서 번호를 recover 변수에 저장 – 저장된 패킷보다 낮은 ACK 수신 시 손실 판단 – Partial ACK 수신 시 Fast Recovery 상태 유지 – 재전송 패킷의 Full ACK 수신 시 CA로 천이 (recover 변수의 순서 번호 이후 ACK 수신 시) (단점) 다수 패킷 손실 시 다수 RTT 발생 SACK 선택 옵션으로 해결 |
SACK (TCP Tahoe + 선택적 재전송) | – PIPE를 통해 패킷 전송 계산 – SACK 옵션으로 재전송 패킷만 선택적 재전송 – 다수패킷 손실 시 하나의 RTT 내 재전송 가능 |
- Fast Retransmit와 Fast Recovery는 TCP 손실복구 기술임
V. TCP 타이머의 종류
종류 | 설명 | 지표 |
---|---|---|
재전송 타이머 | – Retransmission Timer – 매 세그먼트 전송 시 마다 가동 – 시간 내 ACK 미수신 시 재전송 – RTO 값은 상황에 따라 유동적 – ICMP 통해 RTT 값 측정 가능 – RTT를 통해 RTO 도출 | RTT(왕복시간) RTO(수신대기) – 보통 3~6초 – 권고 1초 |
영속 타이머 | – Persistence Timer (Sliding Window Protocol) – 윈도우 크기 결정 타이머 예) 윈도우 크기가 0 도착, ACK 없으면 메시지 송신 금지 의미 이때, 주기적 1byte 데이터 전송 è Windows Probe Packet | Window Size Probe Packet |
시간대기 타이머 | – Time-Waited Timer – TCP FIN이후 일정시간 연결유지 – 이전 연결의 지연/중복 패킷이 늦게 도착하게 되는 것을 방지 – 해당 패킷은 폐기 (MSL, Maximum Segment Lifetime) (TCP 세그먼트 존재시간, 보통2분) | TIME_WAIT – 보통 4분 (2 MSL) |
연결유지 타이머 | – Keep-alive Timer – TCP 연결 휴지상태 유지 방지 – 마지막 패킷-첫 Keepalive간격 – Default 7200초(2시간) – 7200초 이후 Probe Packet을 75초 간격 9번 송신 후 무응답 시 능동적으로 연결 종료 | KeepaliveTimer K. Interval 75 K. Retry 9 |
[참고]
3 Comments
혼잡제어기법의 slow start부분에서 원래대로 복구한다고 하셨는데 그에 대한 그림이 빠졌네요
그림은 생략하였으나, Slow Start 상태에서 혼잡 발생 시 Timeout 인지, 3 Dup. ACK 인지 여부가 빠졌네요. Timeout 발생 시 cwnd는 1 MSS(Maximum Segment Size)로 변경되며, 3 Duplication ACK 발생 시 현재 윈도우의 1/2로 변경 및 Congestion Avoidance 상태로 천이됩니다. 본문에도 수정해 놓도록 하겠습니다.
정리가 잘되어 있네요..잘 보고 갑니다.