949. 자동 재전송 요구 (ARQ) - Stop-and-Wait, Go-Back-N, Selective Repeat 데이터 링크/전송 계층 오류 복구 재전송 통신 프로토콜 슬라이딩 윈도우

핵심 인사이트: 택배로 유리잔 100개를 보냈다. 중간에 택배차가 사고가 나서 유리잔이 몇 개 깨졌다. 어떻게 다시 온전하게 받을까? 1. "야! 1번 상자 보냈어. 받았다고 카톡 올 때까지 나 절대 2번 상자 안 보낸다!(Stop-and-Wait, 답답해 죽음)" 2. "야! 상자 100개 쫙 다 보냈는데 5번이 깨졌어? 알았어. 5번부터 100번까지 싹 다 다시 보내줄게!(Go-Back-N, 엄청난 낭비)" 3. "야 100개 보냈는데 5번, 8번만 깨졌어? 오케이, 귀찮지만 딱 5번, 8번 퍼즐 조각 2개만 핀셋으로 골라서 다시 보내줄게!(선택적 재전송, 뇌 터짐)" 네트워크가 깨진 패킷을 다시 구걸하는 3가지 고집스러운 룰, 자동 재전송 요구(ARQ)다.

Ⅰ. ARQ (Automatic Repeat reQuest)의 개념

  • 개념: 데이터 통신 중 노이즈나 충돌로 인해 수신 측에 패킷 에러(손상)나 유실이 발생했을 때, 수신 측이 송신 측에게 "야! 데이터 깨졌어! 못 받았으니까 똑같은 거 다시 쏴줘(재전송)!"라고 자동으로 요구하여 데이터의 무결성 100%를 보장하는 오류 제어 기법입니다.
  • 주로 L2(데이터 링크 계층)나 L4(전송 계층, TCP)에서 지독하게 씁니다.

Ⅱ. ARQ의 3대 핵심 모델 (기출 100% 단골) 🌟

수신자가 깨진 걸 발견했을 때 송신자가 어떻게 행동(재전송)할 것인가에 대한 전략입니다.

1. Stop-and-Wait ARQ (정지-대기) - "가장 무식하고 답답한 놈"

  • 동작: 송신자가 딱 1개의 패킷(1번)을 쏩니다. 그리고 두 손 모아 가만히 기다립니다. 수신자에게서 "1번 잘 받았음(ACK)!"이라는 답장이 오기 전까지 절대 2번 패킷을 보내지 않습니다. 만약 답장이 안 오거나 에러(NAK)가 오면 1번을 다시 쏩니다.
  • 장단점: 구조가 미치도록 단순해 구현이 쉽습니다. 하지만 서울에서 미국으로 데이터를 쏠 때 매번 답장을 기다리느라 대역폭을 다 까먹고, 통신 속도가 지옥으로 떨어집니다(효율 최악).

2. Go-Back-N ARQ (N번부터 몽땅 다시) - "효율적이지만 욱하는 놈" 🌟

답답함을 해결하기 위해 '슬라이딩 윈도우(Sliding Window)'라는 파이프 마법을 가져왔습니다.

  • 동작: 송신자는 수신자 답장(ACK)을 안 기다리고 1번, 2번, 3번, 4번, 5번 패킷을 기관총처럼 연달아 쏴버립니다.
  • 에러 발생 시: 수신자가 받다가 "어? 3번이 깨졌네!" 하고 3번 에러(NAK 3)를 날립니다. 송신자는 이 알람을 받고 이성을 잃습니다. "아씨! 3번 깨졌어? 그럼 내가 방금 보냈던 4번, 5번도 다 무효야! 3번부터 5번까지 싹 다 다시 받아!!" 라며 에러 난 N번부터 그 이후의 모든 패킷을 무식하게 통째로 재전송해 버립니다.
  • 장단점: 구현이 적당히 쉽고(수신자 뇌가 가벼움), 송신 속도도 빨라서 실무(TCP의 기본)에서 엄청 씁니다. 하지만 4, 5번은 멀쩡히 도착했는데도 다시 보내야 하니 트래픽 낭비가 큽니다.

3. Selective Repeat ARQ (선택적 재전송) - "가장 합리적이지만 똑똑한 놈" 🌟

Go-Back-N의 무식한 낭비를 박살 냅니다.

  • 동작: 송신자가 1~5번을 연사합니다. 수신자가 "3번이 깨졌어!" 보냅니다.
  • 에러 발생 시: 송신자는 "아, 3번만 깨졌어? 4, 5번은 정상이지? 오케이, 3번 박스 1개만 핀셋으로 집어서 딱 1개만 재전송해 줄게!"
  • 치명적 단점 (구현의 복잡성): 통신 효율은 우주 최강입니다. 하지만 수신자 컴퓨터가 터집니다. 4, 5번을 받아놓고 3번이 올 때까지 뱃속 임시 메모리(버퍼)에 순서가 꼬인 채로 들고 있어야 하고, 나중에 3번이 오면 스스로 퍼즐을 다시 순서대로 재조립(Reassembly)해야 하므로 수신기의 하드웨어 로직과 메모리가 미친 듯이 비싸고 복잡해집니다.

Ⅲ. 현대 통신에서의 생존

  • TCP 프로토콜: 기본적으로 Go-Back-N의 철학을 쓰지만, 최신 인터넷에서는 버려지는 트래픽이 아까워 SACK(Selective ACK, 선택적 확인 응답)라는 옵션을 추가해 3번 방식(선택적 재전송)의 마법을 살짝 섞어 쓰는 영리한 하이브리드 방식을 채택하고 있습니다.

📢 섹션 요약 비유: ARQ 방식은 책 100권을 목적지에 배송하다가 중간에 5번 책이 물에 젖어 찢어진(오류 발생) 상황 대처법입니다. Stop-and-Wait은 1권 보내고 잘 받았다는 카톡이 오면 2권을 보내는 '숨 막히는 극소심 배달'입니다. 안전하지만 100권 보내는데 1년이 걸립니다. Go-Back-N은 1번부터 10번까지 트럭으로 막 던집니다. 목적지에서 "5번 책 젖었어요!" 클레임이 들어오면, 배송 기사가 욱해서 "아 짜증나! 그럼 방금 보낸 멀쩡한 6, 7, 8, 9, 10번 책 싹 다 버려! 5번부터 10번까지 박스 통째로 다시 쏠게!"라고 무식하게 덮어씌우는 '분노의 일괄 재배송'입니다(통신 낭비 발생). 이를 개선한 **선택적 재전송(Selective Repeat)**은 기사가 "오케이, 멀쩡한 6~10번은 책꽂이에 잘 꽂아두시고, 찢어진 5번 책 한 권만 오토바이 퀵으로 다시 보내줄게!"라고 하는 합리적 배달입니다. 택배비(트래픽)는 아끼지만, 책을 받는 사람(수신기)이 책 번호를 일일이 엑셀에 적어두고 빈 공간을 맞춰놔야 하는 고도의 뇌지컬(버퍼 메모리)을 요구하는 궁극의 재전송 기법입니다.