Sliding window
tcp에서 데이터를 송수신할 땐 두 개의 윈도우를 사용한다.
Send윈도우와 Receive윈도우이다.
Send윈도우
지금 그림에선 260번까지 데이터를 보냈으나 아직 수신자가 다 받았는지 알 수가 없다.
만약 수신자가 '다 받았어'라는 응답(ACK)을 주면 윈도우의 시작점이 261번으로 옮겨지게 된다.
반대로 수신완료했다는 응답이 없거나 뭔가 잘못됐다는 수신자의 응답이 있으면 201번부터 윈도우 사이즈만큼 데이터를 다시 보내게 되는 것이다.
Receive윈도우
흐름제어
송신 윈도우의 크기는 rwnd와 cwnd 중 작은 값이다.
혼잡제어
라우터를 지나는 데이터 양이 라우의 Capacity를 넘어서면 처리량이 급도로 떨어지게 된다.
cwnd의 크기를 임계점(threshold)가 될 때까지 지수적으로 증가시킨다.
혼잡이 감지될 때 까지 cwnd를 점진적으로 증가시킨다.
혼잡제어를 위한 cwnd를 조절하는 두 방법은 상황에 따라 사용된다.
Timeout이 발생하면?
임계점을 반으로 낮추고 cwnd를 1로 설정한다.
중복 Ack이 발생하면?
현재 cwnd를 반으로 낮춘다.
그림예시가 많아서 이해하기 쉬워 좋았습니다.