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 |
[참고]
View Comments (3)
혼잡제어기법의 slow start부분에서 원래대로 복구한다고 하셨는데 그에 대한 그림이 빠졌네요
그림은 생략하였으나, Slow Start 상태에서 혼잡 발생 시 Timeout 인지, 3 Dup. ACK 인지 여부가 빠졌네요. Timeout 발생 시 cwnd는 1 MSS(Maximum Segment Size)로 변경되며, 3 Duplication ACK 발생 시 현재 윈도우의 1/2로 변경 및 Congestion Avoidance 상태로 천이됩니다. 본문에도 수정해 놓도록 하겠습니다.
정리가 잘되어 있네요..잘 보고 갑니다.