💡 핵심 인사이트
슬라이딩 윈도우는 한 번에 1개씩만 보내고 멍때리던 구시대적 통신을 파괴한 혁명적인 알고리즘입니다.
송신기와 수신기가 메모리에 '보이지 않는 사각 틀(윈도우)'을 만들어 놓고, 틀 안에 들어온 여러 개의 데이터는 상대의 허락(ACK)을 기다리지 않고 무조건 들이밀어 전송한 뒤, 허락이 떨어질 때마다 틀(윈도우)을 한 칸씩 스르륵 미끄러지듯(Sliding) 우측으로 밀어 전송 속도를 극대화하는 기법입니다.
Ⅰ. 슬라이딩 윈도우의 3가지 상태 영역
송신기가 보내야 할 1번부터 10번까지의 데이터가 엑셀의 가로줄처럼 쭉 늘어서 있다고 상상해 봅시다. 이 위에 돋보기 프레임(윈도우, 예: 크기 3칸)을 딱 올려놓습니다.
데이터는 이 윈도우(돋보기)의 위치에 따라 세 가지 신분으로 나뉩니다.
- 윈도우의 왼쪽 밖 (과거): 이미 송신했고, 수신기로부터 "잘 받았어(ACK)" 도장까지 완벽하게 찍혀서 내 손을 완전히 떠난 승리자들입니다.
- 윈도우의 안쪽 (현재 진행형): 아직 ACK 도장을 못 받았지만, 수신기의 허락 없이도 당장 내 맘대로 네트워크에 마구 쏴버릴 수 있는(송신 가능한) 발사 대기조들입니다.
- 윈도우의 오른쪽 밖 (미래): 아직 윈도우 틀 안에 들어오지 못했기 때문에, 아무리 쏘고 싶어도 절대 전송할 수 없는 묶여있는 데이터들입니다.
Ⅱ. 윈도우가 미끄러지는 마법 (Sliding)
- 초기 상태: 윈도우 크기가 3입니다.
[1번, 2번, 3번]데이터가 윈도우 안에 있습니다. - 발사: 송신기는 ACK를 안 기다리고 1, 2, 3번을 0.1초 간격으로 다다닥 쏩니다! (고속도로가 꽉 찹니다).
- 응답의 도착: 잠시 후 수신기가
ACK 2("1번 잘 받았어, 이제 2번부터 줘")라는 메시지를 보냅니다. - 슬라이딩 (핵심): 아하! 1번이 무사히 도착했군요. 송신기는 1번 데이터를 쿨하게 버리고, 사각 틀(윈도우)을 오른쪽으로 딱 한 칸 밀어버립니다(Slide).
- 결과: 윈도우가 오른쪽으로 한 칸 밀렸으니, 1번은 윈도우 밖(과거)으로 빠져나가고, 대신 미래에 있던 4번 데이터가 윈도우 안으로 새롭게 쏙 들어옵니다!
[2번, 3번, 4번]. - 송신기는 새로 들어온 4번을 또 신나게 쏴버립니다. 이 과정이 물 흐르듯 무한 반복됩니다.
Ⅲ. 슬라이딩 윈도우의 거대한 2가지 활용
이 위대한 발명은 네트워크의 2가지 핵심 뼈대를 동시에 책임집니다.
- 에러 제어 (ARQ):
- 앞서 배운
Go-Back-N과Selective Repeat가 바로 이 슬라이딩 윈도우 위에서 노는 기법들입니다. (에러가 나면 윈도우를 뒤로 당기느냐, 특정 핀셋만 뽑느냐의 차이일 뿐입니다).
- 앞서 배운
- 흐름 제어 (Flow Control):
- 슬라이딩 윈도우의 크기(사각 틀의 칸 수)는 고정된 게 아니라 수신기가 맘대로 늘였다 줄였다(동적 조절) 할 수 있습니다.
- 수신기 버퍼가 꽉 차면 윈도우를 0칸으로 닫아버려 송신기를 강제 정지시키고, 버퍼가 비면 윈도우를 10칸으로 확 넓혀서 속도를 폭발시키는 '가변 윈도우(Variable Window)' 기술의 정수입니다.
📢 섹션 요약 비유: 슬라이딩 윈도우는 공장의 **'구멍 뚫린 상자 포장법'**입니다. 컨베이어 벨트에 사과(데이터)가 끝없이 줄지어 올 때, 3개짜리 구멍이 뚫린 틀(윈도우)을 덮어씌웁니다. 구멍 안에 보이는 3개의 사과만 동시에 집어서 트럭에 던집니다. 한 개가 무사히 배달됐다는 무전을 받으면, 틀을 오른쪽으로 한 칸 스르륵 밀어서(슬라이딩) 새 사과를 또 집어 던지는, 쉴 틈 없이 돌아가는 고효율 물류 시스템입니다.