TCP : 체증제어/ 혼잡제어
Congestion ( 체증, 혼잡 )
망에 입력되는 트래픽 양이 망이 처리 할 수 있는 한도(Capacity) 를 초과하는 경우 체증이 발생한다.
다음 그림은 단위 시간 당 입력되는 패킷의 수(input load)와 단위 시간당 처리되는 패킷의 수(throughput), 그리고 패킷이 처리될 떄 까지의 지연 시간(delay) 관계를 보여 주고 있다.
Congestion control ( 혼잡 제어 )
패킷망에서는 트래픽의 흐름은 일정하지 않다.
망의 트래픽 처리 용량(capacity)을 최대 트래픽 전송율보다 크게 유지할 수 있다면 체증을 피할 수 있다.
Congestion control 접근법
두 가지 congestion control에 대한 접근법 (흐름제어, 혼잡제어)
- 예방적 (Preventive) 체증 제어 - 사전
- 사전에 망에 입력되는 트래픽의 양을 제어
- 망 사업자와 사용자와의 계약 - > 그 이상 트래픽 사용 금지 !
- 라우터에서 패킷을 전송시, 사전에 약속된 계약에 따라 패킷의 전송 순위를 결정
- 반응적 (Reactive) 체증 제어 - 사후
반응적 체증 제어란?
Congestion의 발견(detection)
- Congestion 이 발생하는 것을 인식한다.
- 패킷의 지연시간, 라우터의 버퍼의 길이 등을 계속 측정을 하면 congestion 상태의 초기에 이를 발견가능
Congestion에 대한 대응 (통보와 rate control)
- 트래픽을 과도하게 유발시키는 소스들이 체증이 해소될 때까지 트래픽을 보내는 것을 보류하도록 통보
반응적 체증 제어를 수행하기에 적합한 계층은 네트워크 계층, 장치 : 라우터
하지만 인터넷 프로토콜에서는 체증 제어의 임무를 TCP가 수행하도록 하고 있다.
- 근데.. TCP는 end node 이다.. end node에서 체증 제어 임무를 수행하는 것은 옳지 않음.
TCP congestion control
Congestion의 발견
- TCP 는 송신한 패킷에 대해
ACK
을 수신한다.
- 만약 정해진 시간이 지날 때까지
ACK
이 도착하지 않으면 congestion 이 발생하는 것으로 판단 (Timeout)
Congestion에 대한 두 가지 대응 (Rate control)
- TCP호스트는 처음에는 적은 양은 패킷 전송을 하고 점차 양을 늘려나간다. (Slow Start)
- timeout과 상관없이 모든 호스트는 Slow Start로 패킷을 전송한다.
- Congestion 이 발생한 것으로 판단되면 (timeout), 전송되는 패킷의 양을 초기 상태로 줄여서 다시 시작한다. (Congestion Avoidance)