💡 핵심 인사이트
정지-대기(Stop-and-Wait) ARQ는 컴퓨터 통신 역사상 가장 원시적이고 단순한 오류 제어 방식입니다.
송신기가 프레임 딱 1개를 날려 보내고, 수신기로부터 "잘 받았어(ACK)!" 또는 "에러 났어(NAK)!"라는 대답이 올 때까지 모든 작업을 멈추고(Stop) 하염없이 기다리는(Wait) 방식입니다.


Ⅰ. 정지-대기 ARQ의 완벽하게 단순한 동작 흐름

이 알고리즘은 핑퐁(Ping-Pong) 게임과 완벽히 똑같습니다. 송신기와 수신기 양쪽에 윈도우 크기(Window Size)가 '1'로 고정되어 있습니다. 즉, 한 번에 딱 1개만 기억합니다.

  1. 정상 전송:
    • 송신기가 프레임 0번을 쏘고 타이머를 켭니다. ➔ (대기)
    • 수신기가 0번을 무사히 받고 ACK 1 (다음엔 1번 보내줘)을 보냅니다.
    • 송신기가 ACK를 받고 나서야 비로소 프레임 1번을 쏩니다.
  2. 데이터 에러 발생 시:
    • 송신기가 프레임 1번을 쐈는데, 가는 길에 번개 맞아 깨졌습니다.
    • 수신기가 CRC 검사를 해보고 에러를 발견하면 가차 없이 버리고 NAK 1 (1번 깨졌어, 다시 줘)을 보냅니다.
    • NAK를 받은 송신기는 보관 중이던 1번 프레임을 다시 쏩니다.
  3. 데이터가 아예 증발 (분실) 시:
    • 송신기가 0번을 쐈는데, 라우터가 뻗어서 0번이 공중 분해됐습니다.
    • 수신기는 아무것도 안 왔으니 ACK도 안 보냅니다.
    • 송신기의 **초시계(Timeout 타이머)**가 다 돌아가 버립니다(Time Out).
    • 송신기는 "아, 가다가 죽었나 보네"라며 혼자 판단하고 0번 프레임을 무조건 재전송합니다.

Ⅱ. 치명적 단점: 극단적인 링크 효율성 저하

정지-대기 ARQ는 칩셋을 아주 싸고 단순하게 만들 수 있다는 장점 외에는 모든 것이 최악입니다.

  • 전송 효율(Utilization) 지옥: 태평양을 건너는 초고속 광케이블 100Gbps 망을 깔아놓았다고 칩시다. 송신기가 눈곱만 한 1바이트짜리 패킷 하나를 쏘고, 그 패킷이 미국을 찍고 ACK로 돌아올 때까지 수백 밀리초(ms) 동안 그 어마어마한 광케이블 고속도로에는 단 하나의 데이터도 날아가지 않고 텅텅 빈 상태로 방치됩니다.
  • 송신기가 초당 100만 개를 쏠 수 있는 엔진을 가졌어도, 핑퐁을 기다리느라 하루 종일 1만 개도 못 쏘는 끔찍한 대역폭 낭비가 발생합니다.

이 바보 같은 효율성을 타파하기 위해, 확인(ACK)을 안 받고도 수만 개의 데이터를 파이프에 와다다다 밀어 넣을 수 있는 '슬라이딩 윈도우(Go-Back-N 등)' 기술이 탄생하게 됩니다.

📢 섹션 요약 비유: 정지-대기 ARQ는 **'도르래 바구니로 벽돌 나르기'**입니다. 내가 2층에 있는 인부에게 바구니로 벽돌을 1장 올려주면(송신), 인부가 그 벽돌을 빼고 "빈 바구니 내려보냈다(ACK)!"라고 소리칠 때까지 나는 빈둥거리며 놀아야 합니다. 내 손에 벽돌 1만 장이 있어도 한 번에 1장씩만 올려야 하므로, 공사(통신) 속도가 우주 최악으로 느린 답답한 시스템입니다.