TCP 혼잡제어

1. 네트워크 트래픽 부하 제어 기법, TCP 혼잡제어

(1) TCP 혼잡제어의 개념

  • 송신측에서 Ack 수신 여부로 네트워크 상황을 판단하여 송신 데이터 크기 조절하는 네트워크 혼잡상황 제어 기법

(2) TCP 혼잡제어 메커니즘

방안설명
송신자
전송률 제한
– 혼잡 윈도우인 cwnd(Congestion Window) 값 조정하여 데이터 전송 비율 조절
혼잡 감지– TCP 송신자는 이벤트 발생 시 송신률↓
 손실이벤트 = Timeout 또는 Duplicate ACK
Slow Start– cwnd < ssthresh 일 때 cwnd는
지수적 증가 (cwnd = cwnd * 2)
Congestion
Avoidance
– cwnd > ssthresh 일 때 cwnd는
  선형적 증가 (cwnd = cwnd + 1)

 

2. 기본적인 TCP 혼잡제어 기법

(1) 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 상태로 천이

(2) Congestion Avoidance(혼잡 회피) 혼잡제어 기법

구분설명
Congestion
Avoidance
에 의한
cwnd 변화
알고리즘– Slow Start 지수적 증가가 임계치(ssthresh)에 도달하게 되면 혼잡으로 간주하고 회피를 위해 cwnd 크기가 선형적으로 증가하여 혼잡 예방
– Slow Start에 비해 훨씬 느린 속도로 증가되므로 혼잡 회피 기능 수행

 

3. 개선된 TCP 혼잡제어 기법

(1) 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) 옵션으로 확장

(2) Fast Retransmit와 Fast Recovery 윈도우 변화에 따른 그래프

Fast
Retransmit
– 세 번의 Duplicate ACK 발생 시 Timeout을 기다리지 않고 즉시 전송 시작
Fast
Recovery
– Fast Retransmit 수행 후 Slow Start가 아닌 Congestion Avoidance 수행

 

4. 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 손실복구 기술임

 

5. 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

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