💡 핵심 인사이트
슬라이딩 윈도우가 미끄러지려면 그 틀(네모 상자)의 크기가 중요합니다. 이를 **윈도우 크기(Window Size)**라고 하며, **송신자가 상대의 허락(ACK) 없이 한 번에 쏟아부을 수 있는 프레임의 최대 개수(파워)**를 결정짓는 핵심 수치입니다.
ARQ 방식(Go-Back-N, SR)에 따라 송신 윈도우와 수신 윈도우의 크기가 마법처럼 다르게 세팅됩니다.
Ⅰ. 송신 윈도우와 수신 윈도우의 의미
슬라이딩 윈도우는 송신자 혼자 치는 장난이 아닙니다. 수신자 쪽에도 똑같은 돋보기 틀(버퍼 메모리)이 존재합니다.
- 송신 윈도우 (Sender Window, $W_s$):
- "내가 지금부터 ACK를 받지 않고도 연달아 쏠 수 있는 프레임의 최대 한도(개수)"입니다.
- 송신 윈도우가 10이면, 1번부터 10번까지의 총알을 한 방에 장전하고 기관총처럼 쏠 수 있습니다.
- 수신 윈도우 (Receiver Window, $W_r$):
- "내가 순서가 뒤죽박죽으로 들어오더라도, 버리지 않고 임시로 내 메모리(버퍼)에 저장해 둘 수 있는 빈 공간의 크기"입니다.
- 수신 윈도우가 1이면, 오직 순서에 딱 맞는 1개만 받아먹고 나머지는 다 버립니다(옹졸함). 수신 윈도우가 10이면, 10개가 섞여 들어와도 일단 뱃속에 다 품어줍니다(관대함).
Ⅱ. ARQ 프로토콜별 윈도우 사이즈의 결정적 차이 (시험 필수)
앞서 배운 3가지 오류 제어 방식은 이 두 윈도우의 크기(세팅 값)만 다를 뿐, 본질적으로 모두 슬라이딩 윈도우의 변형입니다.
| 프로토콜 | 송신 윈도우 ($W_s$) | 수신 윈도우 ($W_r$) | 특징 |
|---|---|---|---|
| 정지-대기 (Stop-and-Wait) | 1 | 1 | 1개 쏘고, 1개 받음. 제일 멍청하지만 가장 안전. |
| Go-Back-N (GBN) | $N$ (여러 개) | 1 | 기관총처럼 쏘지만, 수신기는 까탈스러워서 순서 어긋나면 다 버림. (연대 책임 재전송). |
| Selective Repeat (SR) | $N$ (여러 개) | $N$ (여러 개) | 쏘기도 많이 쏘고, 수신기도 넓은 아량으로 다 받아줌. 에러 난 것만 쏙 다시 받음. (가장 똑똑하고 복잡함). |
Ⅲ. 윈도우 최대 크기의 수학적 제약 (순서 번호의 역설)
프레임을 구별하기 위해 헤더에 0, 1, 2, 3.. 이라는 '순서 번호(Sequence Number)'를 붙입니다. 만약 헤더의 순서 번호 공간이 m비트라면, 우리가 쓸 수 있는 번호는 총 $2^m$개 ($0$부터 $2^m - 1$까지)입니다. (예: 3비트면 0~7번까지 총 8개 번호를 돌려 씁니다).
이때 SR(Selective Repeat) 방식에서 윈도우 사이즈를 욕심부려 전체 번호 개수(8칸)만큼 다 늘려버리면 치명적인 버그가 터집니다.
- 1차 전송: 송신기가 0~7번을 다 쐈습니다. 수신기도 다 받아서 ACK 0(새로운 0번 내놔)을 쳤는데 이 ACK가 날아갔습니다.
- 2차 전송: 송신기는 타임아웃이 걸려 아까 그 **'옛날 0~7번'**을 다시 쏩니다.
- 수신기의 착각: 수신기는 방금 자기가 0~7을 다 비우고 윈도우를 전진시켰기 때문에, 날아온 이 옛날 0번을 '새로운 2회차의 0번 데이터'로 착각하고 낼름 받아버립니다. (데이터 중복의 대재앙).
[ 절대 룰 ]
- GBN의 최대 윈도우 크기: $2^m - 1$ (전체 번호보다 무조건 1개는 작아야 함).
- SR의 최대 윈도우 크기: $2^{m-1}$ (전체 번호의 정확히 절반(1/2) 이하여야 앞뒤 번호가 겹치지 않고 안전함).
📢 섹션 요약 비유: 송신 윈도우는 피처 머신이 한 번에 날릴 수 있는 **'야구공의 묶음 수'**이고, 수신 윈도우는 포수가 들고 있는 **'포수 미트의 크기'**입니다. 포수 미트가 1개(GBN)면 공이 5개가 날아올 때 1개만 잡고 나머진 다 얼굴에 맞아 튕겨 나가지만, 미트가 5개(SR)면 5개의 공을 한 번에 다 잡아서 주머니에 차곡차곡 모아둘 수 있는 여유가 생깁니다.