CS 공부
TCP/IP 흐름제어 & 혼잡제어 본문
흐름 제어
사용하는 이유
TCP는 보장된 네트워크인데 이것은 4가지 문제를 일으킨다
packet 손실
packet 순서 변동
네트워크 혼잡
리시버 오버플로우
흐름제어란?
호스트와 호스트 간의 데이터 처리를 효율적으로 하기 위한 기법이다.
수신하는 애플리케이션이 읽는 속도와 송신자가 전송하는 속도를 같게한다.
즉 송신측과 수신측의 데이터 처리 속도 차이를 해결하기 위한 기법
흐름제어는 리시버가 패킷을 지나치게 많이 받지 않도록 조절하는 것이다.
수신측에서 수신된 데이터를 처리해서 윗 계층으로 서비스 하는 속도보다 송신측에서 보내는 데이터 속도가 더 빠르다면, 수신측에서 제한된 저장용량(일반적으로 큐)을 초과하여 이후에 도착하는 데이터의 손실을 가져올 수 있다.
Stop and wait 방식
매번 전송한 패킷에 대해 확인응답을 받아야만 그 다음 패킷을 전송하는 방법
슬라이딩 윈도우 기법
수신 측에서 설정한 윈도우 크기만큼 송신 측에서 확인 응답(ack) 없이 세그먼트를 전송할 수 있게 하여 데이터 흐름을 동적으로 조절하여 제어하는 기법이다.
슬라이딩 윈도우는 일단 윈도우에 포함되는 모든 패킷을 전송하고, 그 패킷들의 전달이 확인 되는대로 이 윈도우를 옆으로 옮김으로서 그 다음 패킷들을 전송하는 방식이다.
윈도우 크기는 전송했으나 아직 확인 응답 받지 못한 데이터와 지연 없이 전송할 수 있는 데이터 크기를 합한 값이 된다.
이 처럼 슬라이딩 윈도우 기법을 통하여 송신 버퍼의 범위는 수신 측의 여유 버퍼 공간을 반영하여 동적으로 바뀜으로써 흐름제어를 수행한다.
Stop and wait 방식보다 효율적
혼잡 제어
혼잡제어란
호스트와 네트워크 상의 데이터처리를 효율적으로 하기 위한 기법
송신측의 데이터 전달과 네트워크의 처리속도 차이를 해결하기 위한 기법
네트워크 상의 한 라우터에 데이터가 몰릴 경우 라우터는 자신에게 온 모든 데이터를 처리할 수 없다
그러면 호스트들은 다시 재전송을 하게 되고 결국 혼잡을 가중시켜 오버플로우나 데이터 손실을 발생시킨다.
혼잡제어는 네트워크의 혼잡을 피하기 위해서 송신측에서 보내는 데이터의 전송속도를 강제로 줄이게된다.
혼잡 제어 방식
AIMD (Additive Increse/Multicative Decrease)
우리말로 직역하면 합 증가/ 곱 감소 방식이다.
처음에 패킷을 하나씩 보내고 문제없이 도착하면 윈도우의 크기를 1씩 증가시켜가며 전송한다.
만약 전송에 실패하면 윈도우 크기를 반으로 줄인다.
윈도우 크기를 너무 조금씩 늘리기 때문에 네트워크의 모든 대역을 활용하여 제대로 된 속도로 통신하기까지 시간이 오래 걸린다.
slow start
느린 시작방식은 패킷을 하나씩 보내는 것부터 시작한다.
그러나 이 방식은 패킷이 문제없이 도착하면 각각의 ACK 패킷마다 창 크기(cwnd)를 1씩 늘린다.
즉, 한 주기가 지나면 창 크기가 2배로 된다.
따라서 전송 속도는 지수 함수 꼴로 증가한다.
지수적 증가가 끝나는 시점
타임아웃에 의한 손실 즉 혼잡이 발생했을 경우
창(cwnd) 크기를 1로하고 새로운 슬로우 스타트 시작
창 크기 값이 임계값에 도달하는 경우
혼잡 회피 모드에 들어간다.
혼잡회피
매 RTT 마다 하나의 TCP 상에서 전송할 수 있는 사용자 데이터의 최대 크기(MSS: Maximum Segment Size) 만큼 창크기를 증가시킨다. 즉 선형 증가를 한다.
혼잡회피가 종료되는 시점은 타임아웃이 발생했을 때이다.
타임아웃이 발생하면 창 크기는 1로 변경하고 임계값은 혼잡이 발생 했을 때의 창 크기 값의 절반으로 설정한다.
만약 빠른 회복 상태가 적용된 TCP라면 타임아웃의 경우 위와 같지만
3 ACK Duplicaed로 인한 혼잡은 빠른 회복 상태에 들어간다.
Fast Recovery(빠른 회복)
빠른 회복 정책은 TCP에서 필수는 아니다.
빠른 회복 정책은 혼잡한 상태가 윈도우 크기를 1로 줄이는 것이 아니라 반으로 줄이고 윈도우 크기를 선형적으로 증가시킨다. 그리고 임계점을 줄어든 윈도우 값으로 설정한다.
다만 TCP Reno에서는 빠른 회복을 채택하였다.
Fast Retransmit(빠른 재전송, 3 ACK Duplicaed)
빠른 재전송은 패킷을 받는 쪽에서 먼저 도착해야 할 패킷이 도착하지 않고 다음 패킷이 도착한 경우에도 ACK 패킷을 보낸다.
단, 순서대로 잘 도착한 마지막 패킷의 다음 패킷의 순번을 ACK 패킷에 실어서 보낸다. 따라서 중간에 패킷 하나가 손실되게 되면 보내는 측에서는 순번이 중복된 ACK 패킷을 받게 되고, 이것을 감지하는 순간 문제가 되는 순번의 패킷을 재전송해 줄 수 있다. 빠른 재전송은 중복된 순번의 패킷을 3개 받으면 재전송을 한다.
TCP Tahoe
TCP Tahoe는 처음에는 Slow Start를 사용하다가 임계점에 도달하면 혼잡회피로 전환한다.
그러다 3 ACK Duplicated 또는 타임아웃이 발생하면 혼잡이라고 판단하고 임계점은 혼잡이 발생한 윈도우 크기의 절반으로, 윈도우 크기는 1로 줄인다.
TCP Reno
TCP Tahoe와 똑같이 Slow Start로 시작하여 임계점을 넘어가면 혼잡회피 방식으로 전환한다.
TCP Tahoe와의 차이점은 빠른회복 사용에 있다.
TCP Reno는 3 ACK Duplicated가 발생하면 빠른회복 방식을 사용한다.
즉, 윈도우 크기를 1로 줄이는 것이 아니라 반으로 줄이고 윈도우 크기를 선형적으로 증가시킨다. 그리고 임계점을 줄어든 윈도우 값으로 설정한다.
만약, 타임아웃이 발생하면 TCP Tahoe와 마찬가지로 윈도우 크기를 1로 줄이고 Slow Start를 진행한다. 이때는 임계점을 변경하지 않는다.
참고:https://velog.io/@mu1616/TCPIP-%ED%98%BC%EC%9E%A1-%EC%A0%9C%EC%96%B4
'CS공부 > 컴퓨터네트워크' 카테고리의 다른 글
UDP란 (0) | 2021.06.26 |
---|---|
HTTP & HTTPS (0) | 2021.06.26 |
대칭키 & 공개키 (0) | 2021.06.26 |
TCP 3 way handshake & 4 way handshake (0) | 2021.06.23 |
OSI 7 계층 (0) | 2021.06.23 |