송신측과 수신측의 데이터 처리 속도 차이를 해결하기 위한 기법
Flow Control은 receiver가 packet을 지나치게 많이 받지않도록 조절하는 것
기본 개념은 receiver가 sender에게 현재 자신의 상태를 feedback한다는 점
매번 전송한 패킷에 대해 확인 응답을 받아아 그다음 패킷을 전송하는 방법
수신측에서 설정한 윈도우 크기만큼 송신측에서 확인응답없이 세그먼트를 전송할 수 있게 하여 데이터 흐름을 동적으로 조절하는 제어기법
수신 윈도우보다 작거나 같은 크기로 송신 윈도우를 지정하면 흐름 제어가 가능
송신측의 데이터 전달과 네트워크의 데이터 처리 속도차이를 해결하기 위한 기법
송신측의 데이터는 대형네트워크를 통해 전달되는데 만약 한 라우터에 데이터가 몰릴 경우, 자신에게 온 데이터를 모두 처리할 수 없다. 이런경우 호스트가 재전송하는 과정 등을 거치게 되며 혼잡이 가중되어 오버플로우나 데이터 손실을 유발하게 된다.
이렇게 네트워크의 혼잡을 피하기 위해 송신측에서 보내는 데이터의 전송속도를 강제로 줄이는 작업을 혼잡제어라고 한다.
(네트워크 내 과도하게 패킷수가 증가하는 현상을 혼잡이라고 함)
흐름제어가 송신과 수신측사이의 전송속도를 다루는데 반해, 혼잡제어는 호스트와 라우터를 포함한 넓은 관점에서 전송 문제를 다룸
처음에 패킷을 하나씩 보내고 문제없이 도착시 window크기(단위 시간 내 보내는 패킷의 수)를 1씩 증가시켜가며 전송하는 법
패킷 전송 실패 혹은 시간 초과시 패킷을 보내는 속도를 절반으로 줄임
이 방식은 여러호스트가 한 네트워크를 공유할 시 나중에 진입하는 쪽이 처음에는 불리하나 시간이 흐르면 평형상태에 수렴하게 됨
문제점 : 초기에 네트워크의 높은 대역폭을 사용하지 못하여 오랜 시간이 걸리고, 네트워크가 혼잡해지는 상황을 미리 감지하지 못함. 즉, 네트워크가 혼잡해지고 나서야 대역폭을 줄이는 방식
AIMD 방식이 네트워크 수용량 주변에서는 효율적이지만 처음 전송 속도를 올리는데 시간이 오래 걸리는 단점이 존재
방식 : AIMD와 마찬가지로 패킷을 하나씩 보내며 시작하고, 문제없이 도착할 시 각각의 ACK 패킷마다 window size를 1씩 늘려줌. 한 주기가 끝나며 window size가 2배가 됨
전송속도는 AIMD에 반해 지수함수 꼴로 증가하지만 혼잡 현상 발생시 window size를 1로 떨어뜨림
처음에는 네트워크 수용량을 예상할 정보가 없지만한버 혼잡현상이 발생하면 네트워크의 수용량을 어느정도 예상 가능
그러므로 혼잡 현상이 발생했던 window size의 절반까지는 이전처럼 지수함수꼴로 창 windows 크기를 증가시킥 이후부터는 완만하게 1씩 증가시킴
빠른 재전송은 TCP의 혼잡 조절에 추가된 정책임
수신측에서 먼저 도착해야할 패킷이 도착하지 않고 다읍 패킷이 도착했을 때도 ACK 패킷을 보냄
단, 순서대로 도착한 마지막패킷의 다음 패킷의 순번을 ACK 패킷에 실어 보냄. 중간에 하나가 손실되게 되면 송신 측에서는 순번이 중복된 ACK 패킷을 받게 되고 이를 감지하여 문제 순번의 패킷을 재전송함
중복된 순번의 패킷을 3개 받으면 재전송을 하게 됨. 약간 혼잡한 상황이 일어난 것이므로 혼잡을 감지, window size를 줄이게 됨
혼잡한 상태가 되면 window size를 1로 줄이지 않고 반으로 줄이고 선형증가 시키는 방법이다. 이 정책까지 적용시 혼잡 상황을 한번 겪고 나서부터는 순수한 AIMD 방식으로 동작함