TCP/IP 흐름제어 & 혼잡제어
개념
흐름제어
•
송신측과 수신측의 데이터 처리 속도 차이를 해결하기 위한 기법
•
Flow Control 은 송신 측이 패킷을 지나치게 많이 받지 않도록 조절하는 것
•
수신측이 송신측에게 현재 자신의 상태를 피드백 해준다.
혼잡제어
•
송신측의 데이터 전달과 네트워크의 데이터 처리 속도 차이를 해결하기 위한 기법
흐름제어
•
수신측이 송신측보다 데이터 처리 속도가 느린 경우 발생하는 문제이다.
•
수신측의 저장 용량을 초과한 이후에 도착하는 데이터들은 손실될 수 있고, 만약 손실 된다면 불필요한 응답과 데이터 전송이 발생한다.
흐름제어 해결방법
Stop and Wait
•
매번 전송한 패킷에 대해 확인 응답을 받아야만 그 다음 패킷을 전송하는 방법
Sliding Window
•
수신측이 설정한 윈도우 크기 만큼 송신측에서 확인 응답 없이 세그먼트(패킷)를 전송하여 데이터의 흐름을 동적으로 조절하는 방법
동작 방식
•
먼저 윈도우에 포함되는 모든 패킷을 전송하고, 해당 패킷들의 전달이 확인되면, 윈도우를 옆으로 옮김으로써 다음 패킷들을 전송
*Window : 받을 수 있는 최대 패킷의 수
*TCP/IP를 사용하는 모든 호스트들은 송신, 수신을 위한 2개의 Window를 가지고 있다.
*연결하는 과정에서 송신측이 수신측의 Receive Window size에 자신의 크기를 맞춘다.
•
예시에서 최초로 수신자는 윈도우 사이즈를 7로 정한다.
•
송신자는 수신자의 확인 응답을 받기 전까지 데이터를 모두 전송한다.
•
수신자가 확인 응답을 보내면, 윈도우 사이즈를 충족할 수 있도록 옆으로 옮긴다.
•
데이터를 다 받을 때까지 과정 반복한다.
재전송
•
송신측은 일정 시간 동안 수신측으로부터 확인 응답을 받지 못하면, 패킷을 재전송한다.
•
만약 재전송 했는데, 소실이 아니라 수신측의 버퍼 공간이 없는 경우라면, 문제가 발생한다.
•
이를 위해, 수신측은 확인 응답을 보내면서 남은 윈도우의 크기도 함께 보내준다.
혼잡제어
•
데이터의 양이 라우터가 처리할 수 있는 양을 초과하면 라우터가 처리하지 못한다.
•
송신측은 처리못한 데이터를 손실로 간주해 계속해서 재전송한다.
•
혼잡제어는 송수신측 사이의 패킷 수를 제어하는 기능이고, 네트워크의 오버플로우를 방지한다.
혼잡제어 해결방법
AIMD (Additive Increase/Multicative Decrease)
•
AIMD 방식은 처음에 패킷을 하나씩 보내고 문제없이 도착하면 윈도우의 크기를 1씩 증가시킨다.
•
만약 전송에 실패하면 윈도우 크기를 반으로 줄인다.
•
단점은 윈도우의 크기가 조금씩 늘어나기 때문에, 정상 속도로 통신하기까지 시간이 오래걸린다.
Slow Start (느린 시작)
•
Slow Start는 AIMD의 단점을 보완하여 윈도우의 크기를 1, 2, 4, 8,,, 로 증가시킨다.
•
만약 혼잡이 감지되면 윈도우의 크기를 1로 줄인다.
빠른 재전송
•
패킷을 받는 수신측은 세그먼트로 분할된 내용들이 순서대로 도착하지 않는 경우가 생길 수 있다.
•
따라서 수신측은 순서대로 잘 도착한 패킷의 다음 순번을 확인 응답과 함께 보낸다.
•
또한 이러한 확인 응답을 중복으로 3개를 받으면 재전송한다.
•
송신측은 자신이 설정한 타임 아웃시간과 무관하게 바로 패킷을 재전송할 수 있기 때문에, 재전송률을 빠르게 유지할 수 있다.
*타임 아웃 : 여러 요인으로 인해 송신측의 데이터가 유실되거나, 확인 응답이 유실되어 시간 초과되는 경우
빠른 회복
•
큰 회복은 혼잡 상태가 감지되면 윈도우 크기를 1로 줄이지 않고 반으로 줄인 뒤, 1씩 증가시킨다.
•
증가는 Slow Start 방식으로 하지만 한번 혼잡을 겪으면, AIMD 방식으로 동작한다.