송신측의 데이터 전달과 네트워크의 데이터 처리 속도 차이를 해결하기 위한 기법
한 라우터에 데이터가 몰리는 경우 등의 네트워크 혼잡을 피하기 위해 송신측에서 보내는 데이터의 전송속도를 강제로 줄이는 작업이다.
네트워크 내에 패킷의 수가 과도하게 증가하는 현상을 방지하는 현상도 혼잡제어라고 한다.
송신측과 수신측의 전송속도를 다루는 흐름제어와 달리, 혼잡 제어는 호스트와 라우터를 포함한 넓은 관점에서의 전송 문제를 다룬다.
TCP 는 송신한 패킷에 대해서 ACK 를 수신한다.
만약 정해진 시간이 지날 때까지 ACK 가 도착하지 않으면 congestion 이 발생한 것으로 판단한다. (timeout)
데이터 통신에서 수신자가 송신자에게 데이터를 정상적으로 받았음을 알리는 신호
TCP 통신에서 데이터를 전송하는 속도를 조절하는 중요한 매개변수이다.
TCP는 데이터를 전송할 때 수신 측이 데이터를 수신할 수 있는 만큼의 윈도우 크기를 설정하게 된다. 이 윈도우 크기는 데이터를 얼마나 많이 한 번에 전송할 수 있는지를 결정하며, 네트워크 성능과 효율에 영향을 미친다.
패킷을 하나씩 보내고 문제없이 도착하면 윈도우 크기(단위 시간 내에 보내는 패킷의 수)를 1씩 증가시켜가며 전송하는 방법
만약 패킷 전송을 실패하거나, 일정시간을 넘으면 패킷을 보내는 속도를 절반으로 줄이게 된다.
매우 공평한 방식으로, 여러 호스트가 한 네트워크를 공유하고 있으면 나중에 진입하는 쪽이 불리하지만, 시간이 지날수록 평행상태로 수렴하는 특징이 있다.
합 증가 / 곱 감소 방식과 마찬가지로, 패킷을 하나씩 보내는 것부터 시작하고, 패킷이 문제 없이 도착하면 각각의 ACK 패킷마다 윈도우 크기를 1씩 늘려준다.
위와 같은 방법으로 한 주기가 지나면 윈도우 크기는 2배가 되며, 이러한 전송속도는 지수 함수의 꼴로 증가한다.
만약 혼잡제어 현상이 발생하면, 윈도우 크기를 1로 떨어뜨린다.
송신자가 현재 네트워크 상황에 맞춰 전송할 수 있는 데이터의 양을 나타낸다.
TCP 통신에서는 데이터를 전송할 때마다 이 Cwnd 크기에 따라 전송량이 조절된다.
Congestion 이 발생한 것으로 판단되면(timeout), 전송되는 패킷의 양을 초기 상태로 줄여서 다시 시작한다.
이외에도 TCP Reno, TCP-SACK, TCP-New Reno, TCP-Vegas, TCP Cubic, Multipath TCP ...
TCP Congestion Control 은 네트워크에서 발생할 수 있는 혼잡 현상을 관리하고 해결하기 위한 기능의 집합이다. 이러한 기능들은 네트워크에서의 데이터 전송 과정에서 발생할 수 있는 혼잡을 감지하고 조절하여 네트워크 성능을 최적화하고 데이터의 손실을 최소화한다.
TCP : 체증 제어/혼잡 제어 (congestion control)
https://www.youtube.com/watch?v=4TvP_-3KBH4&t=1493