서론
흐름제어(Flow Control)
송수신측의 데이터 처리속도 차이를 해결하기 위한 기법
stop and wait
매번 전송한 패킷에 대해 확인 응답을 받아야 그 다음 패킷을 전송하는 방법
Sliding Window ( Go Back N ARQ )
수신측에서 설정한 윈도우 크기만큼 송신측에서 확인응답없이
세그먼트를 전송할 수 있게 하여 데이터 흐름을 동적으로 조절
동작방식
- 먼저 윈도우에 포함되는 모든 패킷을 전송하고, 그 패킷들의 전달이 확인되는대로 이 윈도우를 옆으로 옮김으로써 그 다음 패킷들을 전송
- TCP/IP를 사용하는 모든 호스트들인 송수신을 위한 2개의 window를 가지고있다.
3 way handshaking
을 통해 수신 호스트의 window size에 자신의 window size를 맞춘다. (수신 윈도우보다 작거나 같은 크기로 하면 흐름제어 가능)
혼잡제어(Congestion Control)
송신측의 데이터 전달과 네트워크의 데이터 처리 속도 차이를 해결하기 위함
만약 한 라우터에 data가 몰리게 되면, 그 모든 data를 처리할 수 없게 되므로, 몇몇 호스트들은 계속해서 재전송을 하게 된다.
이는 혼잡만 가중시켜 overflow
나 data손실
이 발생하게 된다.
=> 이러한 네트워크의 혼잡을 피하기 위해 송신측의 데이터 전송 속도를 강제로 줄이게 되는데, 이것이 혼잡제어
혼잡제어는 흐름제어보다 넓은 관점에서 전송 문제를 다룬다.
AIMD ( Additive Increase / Multiplicative Decrease )
- 처음에 패킷을 하나씩 보내고 이것이 문제없이 도착하면 window크기를 1씩 증가시켜가며 전송하는 방법
- 패킷 전송에 실패하거나 일정시간을 넘으면 전송속도를 절반으로 줄인다
- 먼저 진입한 호스트가 처음에는 유리하지만, 시간이 지나면 평형상태로 수렴하게 되는 특징
문제점 : 초기에 네트워크의 높은 대역폭을 사용하지 못하여 오랜시간이 걸리고, 네트워크 혼잡상황을 미리 감지하지 못한다. 즉, 혼잡해지고나서야 대역폭을 줄이는 방식이다.
Slow Start
- AIMD와 마찬가지로 패킷을 하나씩 보내면서 window 크기를 1씩 늘려주는 방식
- AIMD에 반해 전송속도가 지수함수 꼴로 증가하지만, 혼잡상황이 발생하면 window크기를 1로 줄여버린다
- 한번 혼잡 상황이 발생하면 네트워크의 수용량을 어느정도 예상할 수 있으므로 혼잡상황이 발생하였던 window크기의 절반까지는 지수함수 꼴로 증가시키고, 그 이후부터는 1씩 증가시킨다.
Fast Retransmit
- 수신측에서 먼저 도착해야할 패킷이 도착하지 않고 다음 패킷이 도착한 경우에도 ACK 보낸다
- 단, 순서대로 잘 도착한 마지막 패킷의 다음 패킷의 순번은 ACK패킷에 실어서 보내게 되므로, 중간에 하나가 손실되면 송식측에서는 순번이 중복된 ACK패킷을 받게된다. 이걸 감지하는 순간 문제가 되는 순번의 패킷을 재전송해줄 수 있다.
- 중복된 순서의 패킷을 3개 받으면 재전송. 약간 혼잡한 상황이 발생했으므로 window크기를 줄인다.
Fast Recovery
- 혼잡상태가 되면 window 크기를 1로 줄이지 않고 반으로 줄인다음 선형증가시키는 방법.
- 이 정책까지 적용하면 혼잡상황을 한번 겪고 나서부터는 순수한 AIMD방식으로 동작하게 된다.