오버플로우가 발생하는 상황을 생각해보자.
ex) 송신 호스트가 보낸 데이터를 TCP는 수신 버퍼에 저장하게 된다. 그렇게되면 어플리케이션 프로세스는 버퍼에서 데이터를 읽을 수 있지만 데이터가 도달한 바로 그 시점에 읽을 필요는 없다. 수신 호스트는 다른 작업들을 하느라 바쁠것이고 수신 받은 데이터를 오랫동안 읽지 않을 것이다. 이렇게 어플리케이션이 데이터를 읽는 속도가 느리고 송신 호스트가 데이터를 계속 전송하게되면 수신버퍼에 오버플로우가 생긴다.
TCP는 오버플로우를 방지하기위해, 수신하는 어플리케이션이 데이터를 읽는 속도와 송신자가 전송하는 속도를 같게 유지시켜준다.
네트워크가 혼잡상태에 이르면 클라이언트나 서버의 속도를 낮춘다. 네트워크상에서 하나의 TCP연결이 과도하게 네트워크를 사용하는것을 방지할 수 있다.
**종단 시스템이 복잡할때? → 흐름제어**
네트워크가 혼잡할때? → 혼잡제어