본문 바로가기
카테고리 없음

[네트워크] rdt 3.0, 파이프라이닝 프로토콜 및 Go-Back-N (GBN) 분석

by Lsung 2026. 9. 6.

1. rdt 3.0 (Reliable Data Transfer 3.0)

① 배경 및 문제의식

  • rdt 2.0 / 2.1 / 2.2의 한계: 패킷 손상(Bit Corruption)과 응답 손상/중복 수신 문제는 체크섬(Checksum), 시퀀스 번호(Sequence Number), 누적 ACK(Cumulative ACK)를 통해 해결했습니다.
  • 해결되지 않은 문제: 비트 손상 외에도 패킷 손실(Packet Loss) 또는 ACK 손실이 발생하는 채널 환경에서는 송수신자가 무한 대기 상태(Deadlock)에 빠질 수 있습니다.

② rdt 3.0 Sender의 타이머 메커니즘

패킷 손실 감지를 위해 타이머(Timer) 개념을 도입했습니다.

[데이터 송신] ──▶ [타이머 시작 (Start Timer)]
                         │
        ┌────────────────┴────────────────┐
 [정상 ACK 수신]                      [타임아웃 발생 (Timeout)]
        │                                 │
 [타이머 정지 (Stop Timer)]           [패킷 재전송 & 타이머 재시작]
        ▼                                 ▼
 (다음 패킷 전송 대기)              (ACK 올 때까지 반복)
  • 타이머 작동 원리:
    • Start: 패킷 전송 직후 타이머를 동작시킵니다.
    • Stop: 전송한 패킷에 대한 올바른 ACK를 수신했을 때 타이머를 멈춥니다.
    • Timeout: 설정된 시간(RTT보다 약간 큰 값) 동안 ACK가 오지 않으면, 패킷이 손실되었거나 ACK가 유실된 것으로 판단하여 패킷을 재전송하고 타이머를 다시 켭니다.
  • 수신자(Receiver) 동작: 손실 발생 시 아무것도 받지 못하면 대기하며, 이미 받은 패킷을 중복으로 받게 될 경우 해당 패킷은 버리고(Discard) 가장 최근에 성공한 누적 ACK를 재전송합니다.

2. 파이프라이닝 프로토콜 (Pipelined Protocols)

① 도입 필요성 (Stop-and-Wait의 한계)

  • rdt 3.0과 같은 Stop-and-Wait(정지-후-대기) 방식은 패킷 1개를 보낸 후 ACK가 도착할 때까지 네트워크가 유휴 상태(Idle)로 남아 있어 네트워크 이용률(Utilization) 및 퍼포먼스가 극도로 저하됩니다. (특히 RTT가 큰 지연 네트워크에서 치명적)

② 파이프라이닝(Pipelining) 개념 및 필수 요소

수신자의 응답(ACK)을 기다리지 않고 여러 패킷을 한 번에 연속해서 전송하는 방식입니다.

[Stop-and-Wait]  PKT0 ─────▶ ACK0 ─────▶ PKT1 ─────▶ ACK1
[Pipelining]     PKT0, PKT1, PKT2 ─────────▶ ACK0, ACK1, ACK2
  • 시퀀스 번호 범위 확장: 한 번에 여러 패킷을 구분해야 하므로 0과 1 외에 더 넓은 범주의 Sequence Number가 필요합니다.
  • 버퍼링(Buffering): 송신자와 수신자 측에 미응답/미처리 패킷을 보관할 버퍼 공간이 추가로 요구됩니다.
  • 윈도우 사이즈 (Window Size, $W$): ACK 없이 한 번에 연속으로 보낼 수 있는 최대 패킷의 양입니다.
  • 성능 및 제어:
    • 파이프라이닝을 통해 전송 속도를 $W$배 올릴 수 있으나, 무제한으로 늘리면 네트워크 정체(Congestion)가 발생합니다.
    • 이를 제어하기 위해 흐름 제어(Flow Control - 수신자 버퍼 보호)혼잡 제어(Congestion Control - 네트워크 선로 보호) 알고리즘을 사용하며, 패킷의 기본 단위는 MSS (Maximum Segment Size)로 표현합니다.

3. Go-Back-N (GBN) 프로토콜

파이프라이닝 기반의 대표적인 재전송 프로토콜 중 하나입니다.

① 주요 개념 및 동작 원리

                   [ 윈도우 크기 (N) ]
    ───────┬───────┬───────────────────┬───────
    ...    │  ACK  │   전송됨/미응답   │  전송  │  ...
    ───────┴───────┴───────────────────┴───────
                   ▲                   ▲
               send_base           nextseqnum
  • 누적 ACK (Cumulative ACK): 수신자는 순서대로 잘 받은 마지막 패킷 번호에 대한 ACK만 보냅니다. (예: 1~4번 수신 후 5번 없이 6번이 오면 수신자는 6번을 버리고 ACK 4를 중복 전송)
  • 단일 타이머 (Single Timer): ACK를 받지 않은 패킷들 중 가장 오래된 패킷(send_base)에 대해서만 1개의 타이머를 가동합니다.
  • 타임아웃 시 동작 (Go-Back-N): send_base 패킷의 타이머가 만료되면, ACK를 받지 못한 send_base부터 윈도우 내의 모든 미응답 패킷을 전부 다시 전송합니다.
  • 수신자 상태 (Receiver Side):
    • 순서에 맞지 않게 도착한 패킷(Out-of-order)은 버퍼에 저장하지 않고 버립니다(Discard).
    • 송신자가 어차피 send_base부터 전부 다시 보낼 것이므로, 수신자는 순서가 맞는 패킷만 수락하여 구조가 단순합니다.