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

콘텐츠 사용 시 출처 표기 부탁 드리고, 댓글은 큰 힘이 됩니다^^