iBetter Books
수정

Stop-and-Wait에서 슬라이딩 윈도우로

흐름 제어를 구현하는 방법 중 가장 단순한 것은 하나씩 확인하면서 보내는 것입니다. 프레임을 하나 보내고, 상대방이 잘 받았다고 응답을 보내면 그때 다음 것을 보내는 방식입니다. 이것이 Stop-and-Wait 프로토콜입니다. 이름 그대로 보내고 멈추고, 응답 오면 다시 보내고를 반복합니다.

Stop-and-Wait의 문제

편의점에서 물건을 계산할 때 점원이 물건을 하나 스캔하고, 손님이 "맞아요"라고 확인하면 다음 물건을 스캔하는 것을 떠올려 보십시오. 정확하지만 느립니다. 네트워크에서도 마찬가지입니다.

프레임 하나를 보내고 응답을 기다리는 동안, 회선은 놀고 있습니다. 거리가 멀면 멀수록, 즉 왕복 시간이 길수록 낭비가 심해집니다. 서울에서 부산까지 프레임을 보내고 응답을 기다리는 동안, 아무 데이터도 흐르지 않는 상황을 상상해 보십시오. 회선 활용률이 형편없이 낮아집니다.

슬라이딩 윈도우 — 기다리지 않고 계속 보낸다

슬라이딩 윈도우는 이 문제를 해결합니다. 아이디어는 단순합니다. 응답을 기다리지 않고 여러 프레임을 연속으로 보낼 수 있도록 허용합니다. 이때 허용되는 최대 미확인 프레임 수를 윈도우 크기라고 부릅니다.

택배 기사를 비유로 들면 이렇습니다. Stop-and-Wait는 한 집에 배달하고 수령 확인을 받은 뒤 다음 집으로 가는 방식입니다. 슬라이딩 윈도우는 다섯 집 앞에 물건을 먼저 내려놓고, 집집마다 받았다는 문자가 오면 그만큼 다음 집으로 윈도우를 밀어가며 계속 배달하는 방식입니다.

윈도우가 움직이는 방식

윈도우 크기가 4라면, 프레임 번호 1, 2, 3, 4를 연속으로 보냅니다. 1번에 대한 응답이 오면 윈도우가 앞으로 한 칸 밀립니다. 이제 2, 3, 4, 5번을 보낼 수 있습니다. 이렇게 창문이 미끄러지듯 앞으로 나아간다는 의미에서 슬라이딩 윈도우입니다.

윈도우 크기가 클수록 한꺼번에 더 많은 프레임을 보낼 수 있고 회선을 더 효율적으로 씁니다. 그러나 윈도우가 너무 크면 받는 쪽 버퍼가 감당하지 못합니다. 따라서 받는 쪽이 자신의 버퍼 여유를 보내는 쪽에 알리고, 보내는 쪽은 그 크기를 넘지 않도록 조절합니다. 이것이 흐름 제어의 실질적인 동작 방식입니다.

슬라이딩 윈도우를 쓰더라도 프레임이 도착하지 않거나 오류가 탐지되면 어떻게 할지가 남아 있습니다. 다음 절에서 ARQ, 곧 재전송 전략을 살펴봅니다.