3-1/컴퓨터 네트워크

3.7 TCP 혼잡제어

chchae01 2022. 5. 29. 15:04

1. 혼잡제어란?

송신 측에서 보내느 데이터의 양이 라우터가 처리할 수 있는 양을 초과하면 초과된 데이터는 라우터가 처리하지 못한다, 송신 측은 초과된 데이터를 손실 데이터로 간주하고 계속 재전송하여 네트워크를 혼잡하게 한다. 이런 상황을 예방하기 위해 송신 측의 전송 속도를 적절히 조절하는 혼잡제어 기법이 사용된다.

 

2. 혼잡제어의 구성요소

(1) Slow start

- AIMD 방식이 전송 속도를 올리는데 오랜시간이 걸리는 것에 착안

- 처음에는 똑같이 패킷 하나로 시작하며, 문제가 없다면 도착하는 ACK 패킷마다 window size(cwnd) 1MSS씩 증가

  즉, 한 주기마다 cwnd가 2배 증가함

  전송 속도는 지수 함수 꼴로 증가

 

*cwnd(congestion window) : TCP 송신자가 네트워크로 트래픽을 전송할 수 있는 비율을 제한

*송신자의 송신율 : cwnd/RTT(byte/sec)

 

초기 : cwnd = 1MSS

ACK 도착 : cwnd*2/RTT

 

- slow start 끝나는 시점 

 

timeout event :

ssthresh = cwnd/2 ← slow start threshold, 스로 스타트 임계치

 & cwnd = 1MSS

 

ssthresh <= cwnd :

TCP congestion avoidance mode(혼잡회피모드)

 

Three duplicate ACK event : 

ssthresh = cwnd/2

cwnd = ssthresh + 3 x MSS

Fast reconvery mode(빠른 회복)

 

- 한번 혼잡 현상이 발생하면 네트워크의 수용량 예상 가능

 

(2) Congestion Avoidance

 

ACK 도착 :

cwnd = cwnd + MSS*(MSS/cwnd)

 

Timeout event :

ssthresh = cwnd/2, cwnd = 1MSS

 

Three duplicate ACK event :

sstresh = cwnd/2, cwnd = ssthresh + 3*MSS

Fast  recovery mode

 

(3)Fast Recovery

 

- 혼잡한 상태가 되면 윈도우 크기를 1로 줄이지 않고 반으로 줄이고 선형증가시키는 방법

 

Duplicate ACK for the missing segment  :

cwnd = cwnd + MSS

Transmit new segment(s), as allowed

 

Set cwnd for a new ACK for the missing segment :

cwnd = ssthresh → Congestion avoidance mode

 

Timeout event :

ssthresh = cwnd / 2, cwnd = 1MSS

Slow start mode

 

3. 혼잡제어 방식

  • TCP Tahoe

- 타임아웃으로 표시되거나 3개의 중복 ACK로 표시되는 손실이 발생하면 무조건 혼잡 윈도우를 1MSS로 줄이고 slow start단계로 들어감

- no fast recovery

TCP Tahoe

ex) ssthresh = 4, 

  • TCP Reno

- 3개의 중복 ACK로 표시되는 손실이 발생하면 cwnd 값의 반으로 빠른회복 상태로 들어감.(타임아웃 시 tahoe와 같음)

- fast recovery

TCP Reno

 

TCP Tahoe & Reno

  • AIMD(Additive-increase Muliplicative-decrease)

- 처음에 패킷을 하나씩 보내고 이건이 문제없이 도착하면 창 크기(단위 시간 내에 보내는 패킷의 수)를 1씩 증기시켜가면서 전송하는 방법으로 TCP의 혼잡제어의 하나의 방식

 

  • TCP CUBIC

- slow start & fast recovery 여전

- congestion avoidance 바뀜