CS/network

슬라이딩 윈도우 프로토콜

superbono 2021. 5. 11. 16:31

* Sliding Window Protocol?

www.youtube.com/watch?v=zY3Sxvj8kZA&ab_channel=KhurramTanvir

 

Slinding window(슬라이딩 윈도우)는 패킷 기반의 데이터 전송 프로토콜이다. 이 프로토콜은 데이터 링크 계층, TCP와 같은 패킷의 신뢰성 있는 전달이 필요할 경우 사용된다. 보통 신뢰성 있는 데이터 전송에 대해서는 모든 패킷에 대해서 정상적으로 정상적으로 전달되었음을 알리는 확인 신호(acknowledgement, 이하 ACK)를 받아야한다. 만약 패킷이 중도에 잘못되었거나 분실되어 확인받지 못하는 경우, 해당 패킷을 재전송해야한다. 이 과정은 시간이 오래 걸리기 때문에  효율성이 떨어진다.  


슬라이딩 윈도우 프로토콜은 일정한 윈도우 크기 내에서 한번에 여러 패킷을 송신하고 이를 패킷에 대하여 단지 한번의 ACK를 보내 수신 확인을 한다. 또한 윈도우 크기를 변경시키며 흐름 제어(flow control) -혼잡제어도 가능-도 가능하게 한다.

 

* Sliding Window Protocol 구현

 

송신자가 관리하는 윈도우의 세 가지 변수 

  1. SWS(Send Window Size): 윈도우 크기
  2. LAR(Last Acknowledgement Received): 마지막으로 확인받은 패킷의 번호
  3. LFS(Last Frame Sent): 마지막으로 보낸 패킷의 번호

 

1. sws(윈도우 크기)를 늘리거나 감소시킴으로써 흐름제어/혼잡제어를 수행할 수 있게 된다. 

2. 윈도우 시작 위치에 대한 변수는 송신측에게는 순서번호가 되지만 수신측에게는 확인응답번호(ACK)가 된다. 

그렇다면 송신자의 윈도는 [(LAR+1), ... , (LAR+SWS)]가 된다. 송신자는 이 윈도에 포함되는 모든 패킷들을 전송하고, 수신자로부터 ACK가 올때까지 기다린다. LFS LAR+SWS가 된다. 아무 문제가 없었다면 수신자로부터 LAR+1 ACK를 가장 먼저 받게 된다. 그렇다면 송신자는 LAR을 갱신하고, 그렇게되면 LAR+SWS도 그만큼 증가하기 때문에 그 다음 패킷을 보낼 수 있게 된다.

또 만약 어느 패킷에 대해 ACK를 받지 못한 경우, 송신자는 일정시간을 기다린 후, 확인받지 못한 패킷을 재전송한다. 이미 현재의 윈도에 해당되는 패킷을 모두 보냈는데 ACK를 받지 못해 윈도를 이동시키지 못하고 있다면 필요한 ACK가 오기까지 기다려야 한다.

 

 

수신자가 관리하는  윈도우의 세 가지 변수

  1. RWS(Receive Window Size): 윈도우 크기
  2. LAF(Last Acceptable Frame): 수신할 수 있는 마지막 패킷의 번호
  3. LFR(Last Frame Received): 마지막으로 수신한 패킷의 번호

 

송신자와 비슷하게 수신자도 LAF LFR을 갱신하여 윈도를 이동시키며 패킷들을 접수한다. 받는 패킷들에 대한 ACK를 보내주는 것이 수신자의 역할이다. 수신자가 보내는 ACK는 마지막으로 도착한 패킷에 대한 ACK가 아니고, 연속적으로 도착한 패킷중의 가장 마지막 패킷에 대한 ACK이다. 예를 들어 1, 2, 3, 4, 6, 7의 패킷이 순서대로 도착하였다면, 수신자는 그 7번의 패킷을 받아 버퍼에 저장하고, 4번의 패킷에 대한 ACK를 송신자에게 보낸다. 만약 그 다음에 도착하는 패킷이 5번이라면, 수신자는 그제서야 7번의 패킷에 대한 ACK를 송신자에게 보내게 된다.

만약 윈도에 포함되지 않는 패킷이 도착하면, 수신자는 단순히 이 패킷을 버린다.

 




 

결론적으로 데이터의 전송이 되는 동안 아래의 두 가지 부등식이 항상 성립하여야한다.

  • LFS - LAR <= SWS
  • LAF - LFR <= RWS

 

'CS > network' 카테고리의 다른 글

HTTP 요청 Method  (0) 2021.07.13
Network Layer의 Protocols  (0) 2021.06.23
Load Balancing(로드 밸런싱)  (0) 2021.05.09
URI와 URL, URN  (0) 2021.05.08
TCP vs UDP  (0) 2021.05.07