Stop and Wait : 매번 전송한 패킷에 대해 확인 응답을 받아야만 그 다음 패킷을 전송하는 방법
Sliding Window(Go Back N ARQ) : 수신측에서 설정한 윈도우 크기만큼 송신측에서 확인응답없이 세그먼트를 전송할 수 있게 하여 데이터 흐름을 동적으로 조절하는 제어기법.
동작 방식
먼저 윈도우에 포함되는 모든 패킷을 전송하고, 그 패킷들의 전달이 확인되는대로 이 윈도우를 옆으로 옮김으로써 그 다음 패킷들을 전송
Window
TCP/IP를 사용하는 모든 호스트들은 송신하기 위한 것과 수신하기 위한 2개의 window를 가지고 있음. 호스트들은 실제 데이터를 보내기 전에 3 way handshaking을 통해 수신 호스트의 receive window 크기에 자신의 send window 크기를 맞추게 됨.
송신 버퍼
200 이전 바이트는 전송 완료, 확인 응답 받기 완료! 노란 부분은 전송 완료, 확인 응답 받기 완료 전, 분홍 부분은 전송 완료 전
수신 윈도우
송신 윈도우
수신 윈도우보다 작거나 같은 크기로 송신 윈도우를 지정하게 되면 흐름제어가 가능함.
송신 윈도우 이동
before : 203-204 전송하면 수신측에서는 확인 응답 203을 보내고, 송신측은 이를 받아 after 상태와 같이 203-209 범위로 이동해줌
송신측의 데이터는 지역망이나 인터넷으로 연결된 대형 네트워크를 통해 전달되는데 만약 한 라우터에 데이터가 몰릴 경우, 자신에게 온 데이터를 모두 처리할 수 없게 됨. 이런 경우 호스트들은 또 다시 재전송을 하게 되고 혼잡을 가중시켜서 오버플로우나 데이터 손실을 발생시키게 됨. 이런 현상을 줄이기 위해 송신측에서 보내는 데이터의 전송 속도를 강제로 줄이게 되는데, 이런 작업을 혼잡제어라고 함.
AIMD (Additive Increase / Multiplicative Decrease)
처음에 패킷을 하나씩 보내고 이것이 문제없이 잘 도착하면 window 크기를 1씩 증가시켜가며 전송하는 방법으로 실패하거나 일정 시간을 넘으면 패킷의 보내는 속도를 절반으로 줄임. 공평한 방식임. (여러 호스트가 한 네트워크를 공유하고 있으면 나중에 진입하는 쪽이 처음에는 불리하지만, 시간이 흐르면 평형상태로 수렴하게 되는 특징이 있음.) 네트워크가 혼잡해지고 나서야 대역폭을 줄이는 방식임.
Slow Start (느린 시작)
Slow Start 방식은 AIMD와 마찬가지로 패킷을 하나씩 보내면서 시작하고, 패킷이 문제없이 도착하면 각각의 ACK 패킷마다 window size를 1씩 늘려준다. 즉, 한 주기가 지나면 window size가 2배가 됨. 전송속도는 지수 함수 꼴로 증가하고 대신에 혼잡 현상이 발생하면 window size를 1로 떨어뜨리게 됨. 한번 혼잡 현상이 발생하고 나면 네트워크의 수용량을 어느 정도 예상할 수 있음. 혼잡 현상이 발생하였던 window size의 절반까지는 이전처럼 지수 함수 꼴로 창 크기를 증가시키다가 그 이후부터는 완만하게 1씩 증가시킴
Fast Retransmit(빠른 재전송)
TCP의 혼잡 조절에 추가된 정책임. 패킷을 받는 쪽에서 먼저 도착해야 할 패킷이 도착하지 않고 다음 패킷이 도착한 경우에도 ACK 패킷을 보내게 됨. 단, 순서대로 잘 도착한 마지막 패킷의 다음 패킷 순번을 ACK 패킷에 실어서 보내게 되므로 중간에 하나가 손실되면 송신 측에서는 순번이 중복된 ACK 패킷을 받게 됨. 이것을 감지하는 순간 문제가 되는 순번의 패킷을 재전송해줄 수 있음.