이번 장에서는 TCP 통신 3단계 (연결 수립 - 데이터 송수신 - 연결 종료) 중 데이터 송수신에서 사용하는 기법을 배운다.
오류 제어: 재전송 기법
TCP는 신뢰성을 보장하기 위해서 오류를 제어한다. 그 중 재전송 기반 오류 제어가 어떻게 이루어지는지 확인해보자.
오류 검출과 재전송
체크섬은 세그먼트 훼손 여부만 나타내기 때문에 송신 호스트가 세그먼트 전송 과정에 문제가 있다는 것을 인지하기는 어렵다. 그리하여 신뢰성을 제대로 보장하기 위해서는 1. 송신 호스트가 송신한 세그먼트에 문제가 발생했음을 인지할 수 있어야 한다. 2. 오류를 감지하면 해당 세그먼트를 재전송할 수 있어야 한다. 이 때의 상황은 1. 중복된 ACK 세그먼트를 수신했을 때와 2. 타임아웃이 발생했을 때다.
→ 중복된 ACK 세그먼트를 수신했을 때는 수신 호스트 측이 받은 세그먼트 중 일부가 누락된 경우다.
→ 타임아웃이 발생했을 때는 송신하는 호스트의 재전송 타이머가 끝날 때까지 ACK 세그먼트를 받지 못 할 때다.
세그먼트 재전송 기법
ARQ (Automatic Repeat Request) : 수신 호스트의 답변과 타임아웃 발생을 토대로 문제를 진단하고 재전송하여 신뢰성을 확보하는 방식
Stop-and-Wait ARQ : 제대로 전달했음을 확인하기 전까지 새로운 메시지를 보내지 않는 방식. 단순하고 높은 신뢰성을 보장하지만, 네트워크 이용 효율이 낮아질 수 있다.
Go-Back-N ARQ : 파이프라이닝 (연속해서 메시지를 전송하는 기술)을 이용하여 여러 세그먼트를 전송하고 문제가 생긴 세그먼트부터 전부 다시 전송하는 방식. n번까지의 확인 응답을 받기 때문에 이의 ACK 세그먼트를 누적 확인 응답(CACK)이라고 한다.
# 빠른 재전송 : 재전송 타이머가 만료되기 전이라도 세 번의 동일한 ACK 세그먼트가 수신되었다면 해당 세그먼트를 곧바로 재전송하는 방식. SR ARQ을 지원하지 않는다면 사용하는 방식이다.
Selective Repeat ARQ : 파이프라이닝을 이용하여 제대로 전송받은 각각의 패킷들에 대해 ACK 세그먼트를 보내는 방식. ACK의 세그먼트를 개별 확인 응답(SA)이라고도 한다. 현대 제일 많이 사용하는 방식이다.
흐름 제어: 슬라이딩 윈도우
수신버퍼 : 수신된 세그먼트가 어플리케이션 프로세스에 의해 읽히기 전에 임시로 저장되는 공간.
버퍼 오버플로 : 수신 버퍼 보다 더 많은 데이터를 저장할 수 없는 문제 상황.
현대의 TCP는 Selective Repeat과 Go-Back-N ARQ를 사용하기 때문에 송신 호스트가 수신 호스트의 처리 속도를 고려하며 송수신 속도를 균일하게 유지(흐름 제어)해야 한다. 이 때 오늘날은 슬라이딩 윈도우를 사용한다.
윈도우 : 송신 호스트가 파이프라이닝을 할 수 있는 최대량
슬라이딩 윈도우 : 세그먼트를 올바로 수신했다면 수신 윈도우를 오른쪽으로 한 칸 씩 이동하는 방식
혼잡 제어
흐름 제어의 주체는 수신 호스트라면 혼잡 제어의 주체는 송신 호스트다. 송신 호스트는 네트워크 혼잡도를 판단하고 유동적으로 전송량을 조절하며 전송한다.
혼잡 윈도우 : 혼잡 없이 전송할 수 있을 법한 데이터양.
혼잡 제어 알고리즘을 통해 혼잡 윈도우의 크기를 결정할 수 있다. 이러한 알고리즘 중 기본적인 알고리즘은 AIMD(Additive Increase/Multiplicative Decrease)가 있다. 혼잡이 감지되지 않으면 윈도우를 RTT마다 1씩 선형적으로 증가시키고, 반대의 경우 절반으로 떨어뜨린다. 다만, 더욱 정교하게 만든 혼잡 제어 알고리즘들이 있으며, 이와 관련하여 1. 느린 시작, 2. 혼잡 회피, 3. 빠른 회복 등이 있다.
느린 시작 알고리즘
혼잡 윈도우를 1부터 시작해 문제 없이 수신된 ACK 세그먼트 하나당 1씩 증가시키는 방식. RTT마다 2배씩 지수적으로 증가하게 되어 초기 전송 속도를 어느 정도 빠르게 확보 가능. 느린 시작 임계치라는 값을 함께 사용하여 이 이상이 되거나, 타임 아웃이 발생하거나, 세 번의 중복된 ACK 세그먼트가 발생하여 혼잡이 감지되면 각각 혼잡 윈도우를 절반으로 초기화 후 혼잡 회피, 윈도우 값을 절반으로 초기화한 뒤 느린 시작 제개, 빠른 회복 수행 등의 방법을 사용한다.
혼잡 회피 알고리즘
RTT마다 혼잡 윈도우를 1MSS씩 증가시키는 알고리즘. 느린 시작 임계치를 넘긴 뒤 혼잡 발생의 우려가 있으니 조심해서 값을 올리는 방식이다. 타임아웃이 발생하면 혼잡 윈도우 값은 1로, 느린 시작 임계치는 혼잡 윈도우 값의 절반으로 초기화한다. 세 번의 중복 ACK 세그먼트가 발생되었을 때에는 혼잡 윈도우 값과 느린 시작 임계치를 절반으로 떨어뜨린 뒤 빠른 회복 알고리즘을 수행한다.
빠른 회복 알고리즘
빠른 재전송과 더불어 함께 수행된다. 세 번의 중복 ACK 세그먼트를 수신했을 때 느린 시작을 건너뛰고 혼잡 회피를 수행하는 알고리즘이다. 단, 회복 도중이라도 타임아웃이 발생하면 혼잡 윈도우의 크기는 1로, 느린 시작 임계치는 혼잡이 감지된 시점의 절반으로 떨어뜨린 뒤 다시 느린 시작을 수행한다.
ECN: 명시적 혼잡 알림 - 송신 호스트가 혼자 혼잡 윈도우를 계산하는 방식이 아닌, 네트워크 중간 장치의 도움을 받는 방법이다. 라우터가 먼저 혼잡을 감지하면 IP 패킷의 ENC 비트를 1로 전송한다. 이를 통해 혼잡 윈도우를 미리 조절하는 방식이다.
문제 1. TCP는 오류 제어 시 세그먼트 재전송 기법(ARQ)을 사용한다. Stop-and-Wait, Go-Back-N, Selective Repeat 등이 있는데 이 때 현대에서 제일 많이 사용하는 Selective Repeat ARQ에 대해 설명하시오.
→ Selective Repeat ARQ는 파이프라이닝(연속해서 메시지를 전송하는 기술)을 기반으로 제대로 전송 받은 각각의 패킷들에 대해 ACK 세그먼트를 보내는 방식이다. 이를 통해 오류가 있는 패킷들만 다시 전송을 받는다. 문제가 생긴 세그먼트부터 전부 전송하는 Go-Back-N 방식과의 차이가 있다.
댓글