Challenge, and Growth ! Introduce
                                                                                                             

Welcome to my blog 🙌🏻

Total

Today

Yesterday













Network

TCP의 신뢰적인 데이터 전송 원리(GBN, SR, 혼잡제어)

뽀시라운 2025. 1. 17. 11:57
반응형
SMALL

[목차여기]

 

 

 

[Network] TCP, UDP 란? - 차이점, 특성

[목차여기]  TCP와 UDP를 공부하기 전에 OSI 7 Layer와 TCP/IP 4 Layer 개념을 알고 가야 한다. OSI 모델은 네트워크 통신을 7개의 계층으로 나누며 TCP/IP 모델은 네트워크 통신을 4개의 계층으로 나눈다. OS

proysm.tistory.com

 

인터넷과 IP

[목차여기]  오블완 챌린지에서 받은 이모티콘 :>   네트워크를 공부하면서 인터넷과 IP라는 개념이 등장한다. 인터넷이란?이라고 떠올렸을 때 말문이 턱 막히는 느낌이 들었다. 왜냐하면 인

proysm.tistory.com

 

 

 

 

 

 

TCP는 신뢰적인 데이터 전송 서비스를 제공하는 프로토콜이다. 그렇다면, 어떻게 신뢰성을 보장할까?

 

이 글은 TCP가 어떤 원리를 바탕으로 신뢰성을 보장하는지 알아볼 것이다.

 

 

 

 

1️⃣ ARQ(Automatic Repeat request) 전략

TCP의 본격적인 동작방식을 알아보기 전에 GBN(Go-Back-N)과 SR(Selective Repeat)을 살펴볼 것이다.

GBN과 SR은 ARQ 전략이다.

 

* (참고) ACK : 수신 확인 응답

Cumulative ACK ACK 3이라는 것은 pkt 0, 1, 2, 3을 잘 받았다는 뜻이다. (Comulative의 사전적 정의 : 누적되는)
Individaul ACK ACK 1이라는 것은 pkt 1을 잘 받았다는 뜻이다.
NACK NACK는 받지 못했다는 것을 의미하면 Individual 하다.

 

 

🛠️ GBN (Go-Back-N)

오류 복구 과정에서 오류가 발생한 프레임을 포함해 이후에 전송되는 모든 정보 프레임을 재전송하는 방식

 

[그림1] GBN 동작방식

 

송신 측은 패킷 0, 1, 2, 3 을 연속적으로 전송한다. 수신 측은 정상적으로 0, 1을 수신하고 이에 대한 ACK를 전송한다. 패킷 3 에서 Error가 발생했고, 송신 측은 ACK 2 가 도착하지 않았으므로 타임아웃이 발생하면 패킷 2 부터 모든 패킷(3, 4, 5,..) 을 재전송한다. 수신 측은 순서대로 데이터를 받기 때문에 패킷 3이 도착하기 전까지 4, 5, 6, 7, 8 패킷을 모두 무시하고 이 데이터는 폐기된다.

 

* Timeout

네트워크 통신에서 응답을 기다리는 시간제한. 송신 측은 패킷을 전송한 후 일정 시간 동안 ACK가 도착하지 않으면, 이를 손실로 간주하고 해당 패킷을 재전송한다. 타임아웃 값은 적절히 설정해야 한다.

 

 

수신자 측에서는 하나의 buffer만을 사용하고 Cumulative ACK를 사용한다. 그리고 재전송해야 하는 프레임 수가 많기 때문에 비트 오류율(BER)이 높은 환경에서는 성능이 좋지 않을 수 있다.

 

 

 

🛠️ SR (Selective Repeat)

GBN을 보완하여, 오류가 발생한 프레임만 재전송하는 방식

 

[그림2] SR 동작방식

 

송신 측은 패킷 0, 1, 2, 3, 4 를 연속적으로 전송한다. 수신 측은 정상적으로 패킷 0, 1 을 수신하고, 이에 대한 ACK를 송신 측으로 전송한다. 패킷 2에서 Error가 발생했고, 수신 측은 패킷 3, 4를 수신한 뒤 이 패킷들을 버퍼에 저장한다. 왜냐하면 패킷을 순서대로 처리해야 하기 때문이다. NACK 2를 통해서 송신 측은 패킷 2가 도착하지 않았다는 것을 감지하고 패킷 2 를 재전송한다. 패킷 2 가 도착하면 버퍼에 저장되어 있던 패킷 3, 4 를 다시 처리한다.

 

 

비트 오류율(BER)이 높은 환경에서 유리하지만, 버퍼 관리가 복잡하고 추가적인 제어 메커니즘(NACK)이 필요하다.

 

 

 

2️⃣ TCP의 데이터 전송 원리

TCP는 SR과 비슷한 방식으로 동작한다. 손실된 데이터만 재전송하고, 버퍼를 사용하여 패킷을 순서대로 조립한다. 

하지만 TCP는 흐름제어, 혼잡제어, 오류제어를 통해 더 복잡하고 정교하게 동작한다.

 

먼저, 흐름을 제어하기 위해서 슬라이딩 윈도우(Sliding Window) 개념이 등장한다.

 

 

💊 흐름 제어 (슬라이딩 윈도우)

목적 : 송신자가 수신자의 버퍼 크기를 초과하지 않도록 조절한다.

 

* 용어 정리

송신 윈도우 (Sender Window) - 송신 측에서 한 번에 전송 가능한 패킷 수
- ACK를 기다리며 재전송 가능한 범위를 나타낸다.
수신 윈도우 (Receiver Window) - 수신 측에서 한 번에 수용할 수 있는 패킷 수
- 수신측이 순서에 맞게 패킷을 재조립할 수 있도록 관리된다.
윈도우 크기 (Window Size) W - 응답 프레임을 받지 않고도 연속으로 전송할 수 있는 프레임 개수
시퀀스 번호 (Sequence Number) - 프레임 별로 부여되는 일련의 번호로, 구별하기 위해 사용한다.
- 0 ~ 2^(n-1) // n-bit 시퀀스 번호를 사용하는 경우

 

* 정보 프레임을 수신한 수신 호스트가 응답하는 순서 번호는 정상적으로 수신한 번호가 아닌, 다음 수신하기를 기대하는 회신 번호를 사용한다.

 

 

송신 윈도우 & 수신 윈도우

  • 송신 측은 송신한 정보 프레임을 송신 윈도우(=내부 버퍼)에 유지해야 한다. (재전송이 필요할 수도 있으니까)
  • 수신 측은 수신한 정보 프레임을 수신 윈도우(=내부 버퍼)에 유지해야 한다. (순서대로 조립해야 하니까)
  • 최대 window 크기가 n이라면, 송신 측은 아직 확인응답되지 않은 프레임들을 위하여 n버퍼 크기가 필요하다.
  • 만약 윈도우가 최대 크기까지 채워지면 송신 측 데이터 링크 계층은 버퍼에 빈 공간이 생길 때까지 네트워크 계층을 강제적으로 차단시킨다.

 

시퀀스 번호와 윈도우 크기

시퀀스 번호 범위 2^(n-1) ≥ 윈도우 크기 W

 

중복 데이터 문제를 방지하기 위해 항상 이 관계를 만족해야 한다. 아래는 중복 데이터 문제를 설명한 그림이다.

 

[그림3] 중복 데이터 문제

 

그림에서는 송신 윈도우 크기가 3으로 설정되어 있으며, 시퀀스 번호는 0, 1, 2, 3의 4개 범위로 순환한다.

 

 

송신 측은 시퀀스 번호 Pkt 0, 1, 2를 포함하는 첫 번째 윈도우에서 데이터를 전송한다. 수신 측은 정상적으로 데이터를 수신했지만 ACK가 송신 측으로 도달하지 못했다. 송신 측은 ACK를 받지 못했기 때문에 타임아웃이 발생하고, 재전송을 시도한다. 이때, 수신 측은 이미 Pkt0, 1, 2 데이터를 수신했지만, 시퀀스 번호가 동일하기 때문에 이를 새로운 데이터로 판단할 가능성이 있다. 즉, 수신 측은 시퀀스 번호의 제한으로 인해 중복 데이터를 올바르게 구분하지 못한다.

 

 

 

이는 시퀀스 번호의 범위가 너무 작아서 발생한 중복 데이터 문제이다. 따라서, 시퀀스 번호의 범위가 충분히 크지 않다면, 송신 측이 재전송한 패킷이 새 데이터로 인식될 수 있다.

그림처럼 윈도우 크기 W = 3 이라면, 
2^(n-1) ≥ 3 을 만족해야 하므로 n≥ 3 이고,
따라서 시퀀스 번호 범위는 최소 8이 되어야 한다.

 

 

💊 혼잡 제어

✅ 슬로우 스타트 (Slow Start) → ✅ 혼잡 회피 (Congestion Avoidance) → ✅ 빠른 재전송 (Fast Retransmit) → ✅ 빠른 회복 (Fast Recovery)

 

혼잡제어는 다음의 순서로 진행된다.

 

1. 슬로스타트 (Slow start)

초기 네트워크 상태를 파악하며, 점진적으로 전송 속도를 증가시킨다.

  • TCP는 처음부터 대량의 데이터를 보내지 않고, 작은 크기에서 시작해서 전송 윈도우(Congestion Window = cwnd)를 지수적으로 증가시킨다(cwnd *= 2). 
  • ACK를 받을 때마다 cwnd가 2배씩 증가한다.
  • cwnd가 임계값(Slow Start Threshold)에 도달하면 혼잡 회피 단계로 전환된다.

 

2. 혼잡 회피

네트워크 혼잡을 방지하기 위해서, 점진적으로 전송 속도를 증가시킨다.

  • cwnd가 임계값에 도달하면, 증가 속도를 완만하게 줄인다.
  • 더 이상 지수적으로 증가하지 않고, 선형적으로 증가한다(cwnd += 1).
  • 패킷 손실이 발생하면 빠른 빠른 재전송 단계로 전환된다.

 

3. 빠른 재전송

패킷 손실이 발생하면 즉시 재전송한다.

  • TCP는 수신자가 중복된 ACK를 보낼 때 이를 패킷 손실의 신호로 판단한다.
  • 패킷 124가 손실되었다면, 수신자는 계속 ACK 123을 보낸다. (3번 이상 반복해서 수신하면 패킷 손실을 감지한다.)
  • 슬로우 스타트로 돌아가지 않고 빠르게 패킷을 복구하는 것에 집중한다.

 

4. 빠른 회복

손실된 패킷을 재전송한 후, 네트워크 상태를 정상화하는 과정이다.

  • 패킷 손실이 발생하면 cwnd를 절반으로 줄이고, ssthreshcwnd의 절반으로 설정한다.
  • 손실된 패킷이 재전송된 후, 혼잡 회피 모드로 이동하여 선형적으로 증가한다.
TCP Reno 방식 - ssthresh를 절반으로 줄이고 슬로우 스타트로 돌아간다.
- 회복 속도가 느리다.
- 잘 사용하지 않는다.
TCP Tahoe 방식 - ssthresh를 절반으로 줄이고 빠른 회복을 통해 회복한다.
- 회복 속도가 빠르다.

 

 

💊 오류 제어

오류 제어는 앞서 설명한 ACK, 타임아웃, 흐름 제어, 혼잡 제어를 사용한다.

체크섬을 사용하기도 하는데 체크섬은 UDP 설명에서 더 자세히 다루면 될 것 같다.

 

 

 

반응형
LIST
loading