💡 핵심 인사이트
SR(선택적 재전송) ARQ는 이전 Go-Back-N의 미친 낭비(연대 책임)를 혐오하며 탄생한 궁극의 에러 제어 프로토콜입니다.
수신기에도 거대한 메모리 윈도우(버퍼)를 탑재하여, 에러가 나면 멀쩡히 도착한 뒷번호 데이터들은 버리지 않고 얌전히 저장해 둔 뒤, 오직 에러 난 딱 그 프레임(N번) 한 개만 핀셋으로 선택(Selective)해서 콕 집어 재전송받는 완벽한 효율의 시스템입니다.
Ⅰ. SR의 윈도우 크기와 핀셋 재전송
Go-Back-N의 수신기는 바보같이 방이 1개(수신 윈도우 1)밖에 없어서, 2번이 안 오면 3번이 와도 버려야 했습니다. SR(Selective Repeat)은 송신기 윈도우가 N, 수신기 윈도우도 N입니다. 즉 수신기도 커다란 저장 창고(버퍼)를 플렉스(Flex)했습니다.
[상황의 재구성]
- 송신기가
0, 1, 2, 3, 4, 5프레임을 와다다다 쏩니다. - 역시나
2번프레임이 벼락을 맞아 깨졌습니다. - 뒤이어 멀쩡한
3, 4, 5번프레임이 수신기에 줄줄이 도착합니다. - 수신기의 유연함: 수신기는 2번이 안 왔지만 3, 4, 5번을 버리지 않습니다! **"음, 2번이 이빨이 빠졌군. 일단 3, 4, 5번은 내 윈도우 버퍼(창고)에 안전하게 킵(저장)해둘게."**라고 판단하고, 송신기에게 콕 집어
NAK 2(2번만 다시 보내!)를 쏩니다. - 송신기의 핀셋 발사: 송신기는 NAK 2를 받으면, Go-Back-N처럼 2~5를 다 보내는 무식한 짓을 하지 않고, 오직 2번 프레임 딱 한 개만 다시 쏩니다.
- 2번이 무사히 도착하면, 수신기는 아까 창고에 모셔둔 3, 4, 5번과 조립해서
0, 1, 2, 3, 4, 5를 예쁘게 위층(네트워크 계층)으로 올려보냅니다.
Ⅱ. SR ARQ의 치명적 단점 (하드웨어의 복잡성)
가장 완벽해 보이는데 왜 모든 장비가 SR을 안 쓸까요? 하드웨어 엔지니어들이 피를 토하기 때문입니다.
- 버퍼 용량 폭발: 수신기에 엄청나게 비싸고 거대한 RAM(메모리 버퍼)이 박혀있어야 합니다. (과거엔 메모리 칩값이 금값이었습니다.)
- 순서 재조립(Re-sequencing) 로직 지옥: 수신기에는 프레임이
0, 1, 3, 4, 5, 2순으로 엉망진창 도착하게 됩니다. 수신기의 CPU는 이 이빨 빠진 배열을 임시로 쥐고 있다가 2번이 오면 원래 순서대로 완벽히 정렬(Sorting)해서 위로 올려줘야 하는 무거운 컴퓨팅 오버헤드가 발생합니다. - 타이머 지옥: 송신기도 프레임 1개당 타이머를 1개씩 수백 개를 켜두고 관리해야 합니다.
Ⅲ. 시퀀스 번호(Sequence Number)의 룰
모든 윈도우 프로토콜에는 프레임의 고유 번호(예: 0~7)가 매겨집니다. 만약 쓸 수 있는 번호가 총 $2^n$개라면, SR 방식에서 윈도우의 최대 크기는 반드시 $2^{n-1}$ (즉, 전체 번호의 딱 절반) 이하로 제한되어야 합니다. 만약 윈도우 크기가 절반을 넘어가 버리면, 수신기가 방금 도착한 0번 프레임이 '새로 보낸 0번'인지 '아까 뺑뺑이 돌다 늦게 온 옛날 0번'인지 구별할 수 없는 참사(순서 번호 겹침 버그)가 발생하기 때문입니다.
📢 섹션 요약 비유: 선택적 재전송(SR)은 선생님이 학생 5명 숙제 검사를 하다가, 2번 학생이 숙제를 안 해왔을 때 2번 한 명만 교무실 밖으로 내보내어 숙제를 다시 해오라고 시키는 **'합리적 개인 책임'**입니다. 멀쩡히 숙제를 다 해온 3, 4, 5번 학생들은 억울하게 공책이 찢어지지 않고 교무실 소파(버퍼)에서 편안하게 대기하다가, 2번 친구가 숙제를 마저 해오면 그때서야 5명이 다 같이 집에 돌아가는(위 계층으로 올라가는) 이상적인 시스템입니다.