혼잡 제어의 원리
congestion : 너무 높은 속도로 데이터를 데이터를 보내려고 시도해서 혼잡이 일어남
-> 패킷 유실(queue 꽉 참)
-> 딜레이 발생(queuing delay)
Ex1) 2개의 송신자와 무한 버퍼를 갖는 하나의 라우터
패킷 유실 X, 재전송 X
호스트 A에서 호스트 B로 R/2만큼의 공간을 사용해서 데이터를 보낸다. 이때 R/2를 사용하기 전까지는 전송에 따른 처리량이 비례하여 증가하는데, 전송량이 R/2를 넘어가면 링크는 R/2를 초과하여 전송할 수 없다. 따라서 평균 지연은 점점 커지고 라우터의 큐잉된 패킷은 제한되지 않으므로 출발지와 목적지 사이의 평균 지연은 무제한이 된다.
즉, 패킷 도착률이 링크 용량에 근접함에 따라 큐잉 지연이 커진다.
Ex2) 2개의 송신자, 유한 버퍼를 가진 하나의 라우터
패킷 유실 O, 패킷 유실 시 재전송 O
1) buffer overflow로 인하여 패킷 유실시, 송신자는 재전송을 수행
2) timeout으로 인한 재전송, 실제로 유실 되지 않아도 congestion때문에 딜레이가 생기므로 timeout 발생
R/2의 데이터를 보낸다고 했을 때, 재전송이 있으므로 실제로 보내는 의미있는 데이터는 R/2보다 작다.
Ex3) 4개의 송신자와 유한 버퍼를 갖는 라우터, 그리고 멀티홉 경로
데이터가 라우터 A, B, C, D를 지나가는 경로로 수신된다고 할 때, 라우터 D에서 congestion때문에 패킷을 버려야 하는 상황이라면 버려지는 지점까지 패킷을 전송하는 데 사용된 상위 라우터에서의 전송 용량은 낭비된 것이다.
congestion -> retransmission -> 의미있는 데이터 양 감소 -> 자원낭비
혼잡 제어에 대한 접근법
혼잡 상태를 파악하는 방식은 2가지가 있다.
- 종단 간 혼잡 제어
- 네트워크에서 혼잡의 존재는 단지 관찰된 네트워크 동작(패킷 손실 및 지연)에 기초하여 종단 시스템이 추측
- 종단 시스템은 TCP 세그먼트 손실(타임아웃 또는 삼중의 중복확인)을 네트워크 혼잡의 발생 표시로 생각하고, TCP는 그에 따라서 window 크기를 줄인다.
- 네트워크 지원 혼잡 제어
- 라우터들은 네트워크 안에서 혼잡 상태와 관련하여 송신자나 수신자 또는 모두에게 직접적인 피드백을 제공한다. 이 피드백은 링크의 혼잡을 나타내는 하나의 비트처럼 간단하다.
- 라우터는 자신이 출력 링크에 제공할 수 있는 전송률을 송신자에게 명확히 알릴 수 있게 해준다.
TCP 혼잡 제어
전통적인 TCP의 혼잡 제어
송신 측에서 동작하는 TCP 혼잡 제어 매커니즘은 추가적인 변수인 congestion window인 cwnd를 추적하고, congestion window는 TCP 송신자가 네트워크로 트래픽을 전송할 수 있는 속도에 제약을 가한다.
AIMD (Additive Increase Multicative Decrease)
송신 측이 transmission rate(window size)를 패킷 손실이 일어날 때까지 증가시키는 식의 접근법이다.
- additive increase : 송신 측의 window size를 손실을 감지할때까지 매 RTT 마다 1 MSS씩 증가시킨다.
- multiplicative decrease : 손실을 감지했다면 송신측의 window size를 절반으로 감소시킨다.
슬로 스타트
TCP 연결이 시작될 때, cwnd 값은 일반적으로 1MSS로 초기화되고, 전송 세그먼트가 첫 번째로 확인응답을 받을 때 마다 1MSS씩 증가시킨다.
Ex) 1개의 세그먼트 -> 2개의 세그먼트 -> 4개의 세그먼트
그래서 TCP 전송률은 작은 값으로 시작하지만 슬로스타트 단계 동안에 지수적으로 증가하게 된다.
이러한 지수적 증가는 다음과 같은 상황에서 종료된다.
- 패킷 유실이 발생할 때(Timeout, 3duplicated Acks)
- 초기 버전인 TCP Tahoe는 cwnd 값을 1로 설정하고 새로운 슬로 스타트를 시작한다.
- 후기 버전인 TCP Reno는 Timeout인 경우에는 cwnd 값을 1로 설정하고 새로운 스타트를 시작하지만, 3duplicated Acks인 경우는 새로운 ssthresh 값에서 부터 시작한다.
- Timeout의 경우는 모든 패킷이 전달되지 못할 만큼 네트워크의 상태가 좋지 않다는 것이며, 3duplicated Acks인 경우 일정 패킷만 유실된 경우이므로, Timeout보다는 네트워크 상태가 좋다.
- TCP 송신자는 두 번째 상태 변수인 ssthresh(slow start threshhold)의 값이 cwnd의 값과 동일하다면, 슬로 스타트는 종료되고 TCP는 RTT마다 하나의 MSS만큼 cwnd를 증가시킨다(혼잡 회피 모드). ssthresh의 값은 congestion이 마지막으로 검출된 시점의 cwnd 값의 반이다.
Reference
KOCW - 컴퓨터 네트워크
컴퓨터 네트워킹 하향식 접근