💡 핵심 인사이트
슬라이딩 윈도우가 미끄러지려면 그 틀(네모 상자)의 크기가 중요합니다. 이를 **윈도우 크기(Window Size)**라고 하며, **송신자가 상대의 허락(ACK) 없이 한 번에 쏟아부을 수 있는 프레임의 최대 개수(파워)**를 결정짓는 핵심 수치입니다.
ARQ 방식(Go-Back-N, SR)에 따라 송신 윈도우와 수신 윈도우의 크기가 마법처럼 다르게 세팅됩니다.


Ⅰ. 송신 윈도우와 수신 윈도우의 의미

슬라이딩 윈도우는 송신자 혼자 치는 장난이 아닙니다. 수신자 쪽에도 똑같은 돋보기 틀(버퍼 메모리)이 존재합니다.

  1. 송신 윈도우 (Sender Window, $W_s$):
    • "내가 지금부터 ACK를 받지 않고도 연달아 쏠 수 있는 프레임의 최대 한도(개수)"입니다.
    • 송신 윈도우가 10이면, 1번부터 10번까지의 총알을 한 방에 장전하고 기관총처럼 쏠 수 있습니다.
  2. 수신 윈도우 (Receiver Window, $W_r$):
    • "내가 순서가 뒤죽박죽으로 들어오더라도, 버리지 않고 임시로 내 메모리(버퍼)에 저장해 둘 수 있는 빈 공간의 크기"입니다.
    • 수신 윈도우가 1이면, 오직 순서에 딱 맞는 1개만 받아먹고 나머지는 다 버립니다(옹졸함). 수신 윈도우가 10이면, 10개가 섞여 들어와도 일단 뱃속에 다 품어줍니다(관대함).

Ⅱ. ARQ 프로토콜별 윈도우 사이즈의 결정적 차이 (시험 필수)

앞서 배운 3가지 오류 제어 방식은 이 두 윈도우의 크기(세팅 값)만 다를 뿐, 본질적으로 모두 슬라이딩 윈도우의 변형입니다.

프로토콜송신 윈도우 ($W_s$)수신 윈도우 ($W_r$)특징
정지-대기 (Stop-and-Wait)111개 쏘고, 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개의 공을 한 번에 다 잡아서 주머니에 차곡차곡 모아둘 수 있는 여유가 생깁니다.