오류 제어 : 재전송 기법
신뢰성을 보장하기 위해 잘못된 세그먼트를 재전송해야 한다. TCP의 재전송 기반 오류 제어가 어떻게 이루어지는지 알아보자.
오류 검출과 재전송
TCP 세그먼트에 오류 검출을 위한 체크섬 필드가 있지만, 이는 패킷의 훼손 여부만 나타낼 뿐이고 체크섬 값이 잘못되면 즉시 폐기하기 때문에 신뢰성을 보장하기 어렵다. 신뢰성을 보장하기 위해선 송신 호스트가 송신한 세그먼트에 문제가 발생했음을 인지할 수 있어야 하고, 잘못 전송되었음을 알게 되면 해당 세그먼트를 재전송할 수 있어야 한다.
송신한 세그먼트에 문제가 있음을 감지하는 방법은 두 가지가 있다.
- 중복된 ACK 세그먼트를 수신했을 때 : 수신 호스트는 세그먼트의 순서 번호 중에 일부가 누락되면, 중복된 ACK 세그먼트를 전송한다. 송신 호스트가 중복된 ACK 세그먼트를 수신하면 세그먼트를 재전송한다.
- 타임 아웃이 발생했을 때 : 송신 호스트는 재전송 타이머라는 값을 유지한다. 세그먼트를 송신할 때마다 재전송 타이머를 시작하며, 타이머의 카운트다운이 끝난 상황을 타임아웃이라고 한다. 타임아웃이 발생할 때까지 ACK 세그먼트를 받지 못하면 세그먼트를 재전송한다.
ARQ : 재전송 기법
수신 호스트의 답변과 타임아웃을 토대로 문제가 생긴 메시지를 재전송함으로써 신뢰성을 확보하는 방식을 ARQ(Automatic Repeat Request)라고 한다. ARQ의 대표적인 세 가지 방식은 다음과 같다.
- Stop-and-Wait ARQ : ACK 세그먼트를 통해 제대로 전달했음을 확인하기 전까지는 다음 메시지를 보내지 않는 방식이다. 단순하며 높은 신뢰성을 보장하는 방식이지만, 네트워크의 이용 효율이 낮아진다는 문제가 있다.
- Go-Back-N ARQ : Stop-and-Wait ARQ의 문제를 해결하기 위해서 ACK 세그먼트를 받기 전까지 여러 세그먼트를 전송한다. Selective Repeat ARQ도 해당 방법으로 동작한다. Go-Back-N ARQ는 세그먼트를 전송하다가 잘못 전송된 세그먼트가 있다면, 해당 세그먼트부터 전부 다시 전송한다.
- Selective Repeat ARQ : Go-Back-N ARQ와 달리, 잘못 전송된 세그먼트만 재전송한다.
💡 빠른 재전송 빠른 재전송은 타임아웃 전에 세 번의 동일한 ACK 세그먼트가 수신되면 해당 세그먼트를 곧바로 재전송하는 기능이다. 이로써 시간 낭비를 줄이고 빠르게 손실된 세그먼트를 재전송하여 성능을 높일 수 있다.
Go-Back-N ARQ와 Selective Repeat ARQ가 사용하는 메시지를 연속적으로 보내는 기법을 파이프라이닝이라 하며, 오늘날 TCP는 이러한 파이프라이닝이 사용되는 Go-Back-N ARQ와 Selective Repeat ARQ를 기반으로 동작한다.
이때 대부분의 호스트는 TCP 통신에서 Selective Repeat ARQ를 지원한다. 두 호스트가 연결을 수립할 때 서로의 Selective Repeat ARQ 지원 여부를 체크하고, 지원하지 않는다면 Go-Back-N ARQ 방식으로 동작한다.
흐름 제어 : 슬라이딩 윈도우
호스트는 한 번에 받아서 처리할 수 있는 세그먼트의 양의 한계가 존재한다. 호스트는 수신버퍼가 존재하며, 이 수신버퍼를 넘어서는 데이터를 받으면 버퍼 오버플로우가 발생한다.
TCP의 흐름 제어는 이런 문제 상황을 방지하고자 송신 호스트가 수신 호스트의 처리 속도를 고려하며 송수신 속도를 균일하게 유지하는 것을 말한다.
Stop-and-Wait ARQ는 흐름 제어가 필요 없지만 오늘날은 파이프라이닝 기반의 Go-Back-N ARQ와 Selective Repeat ARQ를 사용하기 때문에 흐름 제어가 필요하다.
오늘날 TCP에서는 흐름 제어로 슬라이딩 윈도우를 사용한다. 슬라이딩 윈도우를 이해하기 위해선 윈도우란 무엇인지 알아야 한다. 윈도우란 송신 호스트가 파이프라이닝 할 수 있는 최대량을 의미한다. 윈도우의 크기만큼 확인 응답을 받지 않고도 한 번에 전송이 가능하다는 의미이다.
송신 호스트와 수신 호스트 모두 서로의 윈도우를 고려한다. TCP 세그먼트 헤더 중 윈도우 필드를 통해 송신지가 수신지의 윈도우 크기에 맞춰 균일한 속도로 세그먼트를 전송한다.
윈도우의 크기만큼 세그먼트를 보내고, 응답 세그먼트를 수신할 때마다 윈도우가 한 칸씩 오른쪽으로 밀리는데, 이러한 모습으로 슬라이딩 윈도우라고 불린다.
혼잡 제어
혼잡은 많은 트래픽으로 인해 패킷의 처리 속도가 늦어지거나 유실될 우려가 있는 네트워크 상황을 말한다.
여러 호스트가 한 대의 라우터에 연결되었다고 가정해 보자. 모든 호스트가 라우터에게 전송 가능한 최대의 양으로 세그먼트를 보낸다면 라우터에 과부하가 생겨 정보를 처리하지 못할 것이다. 세그먼트에 문제가 생겨 재전송할 것이고, 그럴수록 복잡 현상이 악화된다. 이를 막기 위해 혼잡 제어 기술이 생겨났다.
혼잡 제어를 이해하려면 혼잡 윈도우를 알아야 한다. 혼잡 윈도우는 혼잡 없이 전송할 수 있을법한 데이터양을 의미한다. 혼잡 윈도우의 크기는 혼잡 제어 알고리즘을 통해서 계산된다.
가장 기본적인 알고리즘인 AIMD(Additive Increase/Multiplicative Decrease)을 알아보자. 해석하면 ‘합으로 증가, 곱으로 감소’라는 의미로 혼잡 윈도우를 RTT마다 1씩 선형적으로 증가시키고, 혼잡이 감지되면 혼잡 윈도우를 절반으로 떨어뜨리는 동작을 반복하는 알고리즘이다. 그래서 혼잡 윈도우는 톱니 모양으로 변화한다는 특징이 있다.
💡 RTT(Round Trip Time)는 세그먼트를 보내고 응답을 받는데 까지 걸리는 시간을 의미한다.
AIMD 알고리즘은 혼잡을 제어할 수 있는 기본적인 아이디어지만, 이것만으로는 혼잡 제어가 이루어지지 않는다. 이를 좀 더 정교하게 만들 혼잡 제어 알고리즘 세 가지를 알아보자.
1. 느린 시작 : 혼잡 윈도우를 1부터 시작해서 문제업이 수신된 ACK 세그먼트 하나당 1씩 증가한다. 겨로가적으로 혼잡 윈도우는 RTT마다 2배씩 커진다. 이를 통해 빠르게 초기 전송 속도를 확보할 수 있다. 다만 계속 증가하지만은 않는다. 줄어드는 조건은 다음과 같다.
2. 혼잡 회피 : RTT마다 혼잡 윈도우를 1MSS씩 증가시키는 알고리즘이다. 느린시작과 달리 선형적으로 증가하며, 느린 시작 임계치를 넘어선 시점부터 사용되는 알고리즘이다. 이때 타임아웃이 발생하면 혼잡 윈도우를 1로 하고, 느린 시작 임계치는 혼잡이 감지된 시점의 혼잡 윈도우 값의 절반으로 초기화한 뒤 느린시작을 수행한다. 또 혼잡 회피 도중 세 번의 중복 ACK 세그먼트가 발생하면 혼잡 윈도우 값과 느린 시작 임계치를 대략 절반으로 떨어뜨린 뒤 빠른 회복 알고리즘을 수행한다.
빠른 회복 : 세 번의 중복 ACK 세그먼트를 수신했을 때 느린 시작을 건너뛰고 혼잡 회피를 수행하는 알고리즘이다. 빠른 회복 도중 타임아웃이 발생하면 혼잡 윈도우 크기는 1로, 느린 시작 임계치는 혼잡이 감지된 시점의 절반으로 떨어뜨린 후 다시 느린 시작을 수행한다.
ECN : 명시적 혼잡 알림
혼잡 제어 알고리즘에 따르면, 혼잡 윈도우의 크기를 설정하는 것은 호스트의 몫이다. 하지만 최근 혼잡을 회피하기 위해 네트워크 중간 장치(주로 라우터)의 도움을 받는 방법이 생겼는데, 이를 명시적 혼잡 알림(ECN; Explicit Congestion Notification)이라고 한다.
ECN은 선택적인 기능이기에 이를 지원할 수도, 하지 않을 수도 있다. ECN을 지원하는 호스트가 TCP/IP 프로토콜로 정보를 주고받을 때, IP 헤더와 TCP 헤더에 ECN 관련 필드가 추가된다.
혼잡 제어 방법은 라우터를 기준으로 시작된다. 각 호스트 사이의 라우터가 혼잡을 감지하면 송신 호스트에게 혼잡함을 알리는 방식으로 수행된다.
'도서 정리 > 혼자 공부하는 네트워크' 카테고리의 다른 글
[혼자 공부하는 네트워크] Chapter 5 - 2 HTTP (0) | 2024.08.15 |
---|---|
[혼자 공부하는 네트워크] Chapter 5 - 1 DNS와 자원 (0) | 2024.08.14 |
[혼자 공부하는 네트워크] Chapter 4 - 2 TCP와 UDP (0) | 2024.07.28 |
[혼자 공부하는 네트워크]Chapter 4 - 1 전송 계층 개요 : IP의 한계와 포트 (0) | 2024.07.28 |
[혼자 공부하는 네트워크] Chapter 3 - 3 라우팅 (1) | 2024.07.21 |