6장 - 슬라이딩 윈도우 프로토콜

zoo_gathers·2024년 12월 7일

컴퓨터 네트워크

목록 보기
14/20


  • 슬라이딩 윈도우 프로토콜이란
  1. 양방향 통신 지원
  2. 오류 제어, 흐름 제어 기능을 함께 지원

위 2개를 모두 지원하는 프로토콜로 두 호스트 간의 프레임 전송을 위한 일반적인 통신 프로토콜이다.

현재 대부분의의 통신 프로토콜에서는 슬라이딩 프로토콜의 원리를 사용한다.


슬라이딩 프로토콜의 절차는 다음과 같다.

  1. 송신 호스트는 프레임뿐만 아니라 프레임의 순서 번호, 오류 검출 코드 등을 함께 표기해서 정해진 순서 번호에 따라 순차적으로 송신함

  2. 정보 프레임을 받은 수신 호스트는 해당 프레임의 순서 번호에 근거하여 송신 호스트에 응답 프레임을 회신

  3. 송신 호스트는 송신한 정보 프레임을 자신의 내부 버퍼에 유지하는데 우린 이를 송신 윈도우라고 함.

  • 송신 윈도우에서 대기하는 정보 프레임은 송신 호스트가 수신 호스트에 프레임 전송을 완료했지만 아직 수신 호스트로부터 긍정 응답을 받지 못한 프레임임.
  • 보관하는 이유는 송신 호스트가 보낸 데이터가 수신 호스트에 변형이나 오류가 생겨 도착했을 때 다시 보내기 위해서임.
  1. 수신 호스트는 수신한 정보 프레임을 보관하기 위해 내부 버퍼인 수신 윈도우를 유지.


흐름 제어

슬라이딩 윈도우 프로토콜에서 흐름 제어를 살펴보자.

슬라이딩 윈도우 프로토콜에서 슬라이딩 윈도우는 '윈도우의 이동'을 의미한다.

이는 흐름 제어 기능을 상징적으로 대변하는 것으로

수신 호스트가 연속으로 수신할 수 있는 정보 프레임의 개수를 윈도우의 크기로 지정하여

송신 호스트의 프레임 전송 속도를 제어하도록 한다.

잠시 위 예제로 확인해보자.

우리가 흐름 제어를 사용하는 이유는

송신 호스트에서 보낸 데이터가 수신 호스트의 버퍼를 뛰어넘지 않도록 하기 위해서이다.

즉 송신 호스트와 수신 호스트의 윈도우의 크기가 3이면

송신 호스트가 수신 호스트에게 데이터를 10개 보내면 그 중 7개는 버려진다는 의미이다.

따라서 이를 방지하기 위해 윈도우의 크기를 정해놓고 위와 같이 처리하도록 한다.

송신 호스트가 0, 1, 2번 데이터를 보내면 수신 호스트는 이를 받고 송신과 수신 모두 각각의 송신 윈도우와 수신 윈도우에 저장하도록 한다.

위는 그 사진을 보여준 것으로 수신 호스트가 0번 데이터를 처리했으면 버퍼에서 지우고 0번 데이터에 대한 긍정 응답 프레임이 송신 호스트에게 전달 될 것이다.

그럼 송신 호스트는 버퍼에 0번 데이터를 지우고 다시 3번 데이터를 수신에게 보내며 송신과 수신 모두 다시 버퍼에 3번 데이터를 저장하도록 하게 되는 과정이다.

이 과정에 대해 더 쉬운 사진은 아래에서 다시 보여줄 것이다.


순서 번호

정보 프레임의 내용에는 프레임별로 고유하게 부여되는 순서 번호라는 일련번호가 부여됨.

수신 호스트는 전달 받은 프레임의 고유번호에 따라 처리를 진행한다!!

순서 번호는 0부터 임의의 최댓값까지 정의되는데, 최댓값 이후에는 다시 0부터 되돌아오는 방식으로 순환됨.

정보 프레임의 내용에는 순서 번호를 위한 공간이 확보되어 있는데

할당된 공간의 크기가 n비트이면

프로토콜에서 사용할 수 있는 순서 번호의 범위는 아래와 같다.

0 : 2n10 ~ : ~ 2^n-1

0 ~ 500이면 500 이후는 다시 0이 된다.


정지 - 대기 방식의 프로토콜은 슬라이딩 윈도우 프로토콜에서 가장 기본이 되는 n 값이 1인 경우이다.

순서 번호가 1비트라서 0과 1의 순서 번호만 사용이 가능하다.


이 슬라이딩 윈도우 프로토콜은 원리상

흐름제어를 지원하기 위해 제공하는 기능이다.

위에서 이야기했듯이

슬라이딩 윈도우 프로토콜에는 윈도우의 크기를 정해 흐름제어를 진행한다.

송신 호스트와 수신 호스트 모두 송신, 수신 윈도우(버퍼)를 가지고 있으며

송신 호스트의 경우 이곳에 수신 호스트에 보냈지만 아직 수신 호스트의 긍정 응답 프레임을 받지 못한 프레임들을 저장한다.

그리고 수신 호스트는 송신 호스트로부터 순서 번호에 맞춰 전달 받은 프레임들을 순서 번호를 따라 처리하고 이에 대한 긍정 응답 프레임을 송신 호스트에게 전달함으로써 송신 호스트는 버퍼에 데이터를 지우고 새로운 데이터를 수신에게 보냄과 동시에 버퍼에 저장한다.


송신 윈도우에 보관된 프레임은 낮은 순서 번호부터 차례로 처리됨.

수신 호스트로부터 긍정 응답 프레임을 받은 프레임은 윈도우에서 제거되고

윈도우에 새로 추가될 정보 프레임의 순서 번호도 순차적으로 높은 번호로 이동함.


위 예시를 따라 이해해보면 더 쉽게 이해가 될 것이다.

위 예시는 윈도우 크기를 3으로 가정했을 때 슬라이딩 윈도우 프로토콜의 동작 과정을 보여준다.

위 내용은 동작 과정에 대한 설명이다.

이때 만약 위에서 순서 번호의 최댓값을 9라고 하면 위에서 다음에 올 11번째 숫자는 0이 된다.


위 동작 과정에 대한 그림을 표현하면 위와 같다.

사실 이때 ACK(0)이 아니라 0을 잘 받았으면 다음 데이터를 보내달라는 의미로 다음 데이터인 ACK(3)을 수신 호스트가 보내주어야 하는게 정답이지만 위에서는 이해하기 위해서 ACK(0)이라는 0번 데이터에 대한 긍정 응답 프레임을 보여준 것이다.


정지-대기 방식의 프로토콜은 송신 윈도우의 크기가 1인 경우로

이렇게 구성되면

송신이 1번 데이터를 보내고 수신이 1번에 대한 응답을 보내고

다시 송신이 2번 데이터를 보내고 수신이 2번에 대한 응답을 보낸다.

이런 경우 전송 효율이 매우 떨어지기 때문에 이를 해결하고자 윈도우의 크기를 늘린 것이 바로

슬라이딩 윈도우 프로토콜이다.

이렇게 슬라이딩 윈도우 프로토콜처럼 여러 정보 프레임을 연속적으로 전송할 수 있는 이러한 전송 방식을

연속형 전송이라고 부른다.

이제 연속형 전송 방식의 오류를 해결하는 방법 중

  • 고백 N 방식
  • 선택적 재전송 방식

2가지에 대해서 공부해보자.

먼저 고백 N 방식에 대해서 살펴보자.

간단하게 보면

  1. 윈도우의 크기가 그림과 같이 8이라고 가정하고 10 ~ 17까지 데이터를 송신한다.

  2. 이때 송신 중에 12번 데이터가 변형 혹은 오류가 발생할 수 있는데 다음과 같이 처리한다.

  3. 11번까지 데이터를 잘 받았어 = ACK(11), 그런데 12번 데이터가 이상해 = NAK(12), 그러니 재전송해줘

  4. 그러면 수신에서는 12번 이후에 전달 받은 모든 데이터 12 ~ 17까지의 데이터를 모두 버리고 재전송을 요청해 송신으로부터 다시 재전송 받는 방식으로 진행한다.

위와 같은 순서를 따라 처리를 진행한다고 생각하면 된다.

고백 N 방식과 같이 처리하게 되면 오류가 발생한 프레임뿐 아니라 정상적으로 수신한 프레임까지 재전송 한다는 문제점이 있다.


이때 12번 데이터에 대해 NAK가 발생한 이유는

  1. 수신에 도착했지만 내용이 변질된 경우
  2. 수신 호스트에 도착하지 않은 경우

이렇게 2가지이고

12번이 도착하지 않은 경우 12번에 대해 NAK가 전달된다.

만약 NAK를 사용하지 않고 ACK만 사용한다면 12번에 대한 ACK가 도착하지 않아

송신 호스트의 타임 아웃 기능에 의해서 다시 12번 프레임부터 전송이 진행된다.


ACK(17)은 17번 프레임을 포함해 이전 프레임이 모두 제대로 처리된 것을 보여주며

위 ACK(11) 또한 10번과 11번이 제대로 처리되었음을 알려주는 의미이다.


다음은 선택적 재전송 방식에 대해서 살펴보자.

우리가 위에서 고백 N 방식에 대해서 살펴봤는데

고백 N 방식의 경우 오류가 발생한 프레임 이후에 전송한 데이터도 모두 다시 전송해야 한다는 단점이 존재한다.

이를 해결하기 위해서는 오류가 발생한 12번의 프레임만 재전송하도록 해야 하는데

선택적 재전송 방식이 오류가 발생한 프레임만 선택적으로 복구하는 방식이다.


이전 예제와 같이 10 ~ 17번까지의 프레임을 전송하는 과정에서

12번 프레임에 오류가 발생했고 위 사진은 선택적 재전송 방식을 통해

ACK(11)을 전달 받고 12번에 대해 NAK(12)를 전송한 후 송신 호스트로부터 12번 프레임만 재전송을 받는다.


이게 가능한 이유는 수신 호스트가 전달받은 10~17까지의 모든 데이터를 버퍼에 저장하고 12번에 대한 NAK만 전송했기 때문이다.


이렇게 진행하게 되면 송신은 12번에 대한 NAK만 전달받아 12번 데이터만 다시 보내주게 되고

이후 12번부터 17번까지 잘 처리되었다는 ACK(17)을 수신 호스트로부터 받게 된다.


이때 주의해야 할 점은 12번이 NAK(12)를 보냈을 때 12번 이후의 프레임이 긍정 응답 프레임을 전송하지 않도록 주의해야 한다는 것이다.
=> 12번 데이터를 재전송 받는 중인데 ACK(17)을 보내버리면 12번도 처리되었다고 말하는 것이기 때문이다.


만약 NAK가 없는 경우엔 제대로 전달된 모든 정보 프레임에 대해서 수신 호스트가 개별적으로 ACK 프레임을 전송하도록 한다.
(10, 11, 13, 14, 15, 16, 17에 대한 ACK만 받고 12번에 대한 ACK는 받지 못해 타임 아웃으로 이후에 12번 데이터가 재전송되는 방식이다.)


고백 N 방식과 선택적 재전송 방식의 차이점은 다음과 같다.

고백 N 방식의 경우 순서 번호를 갖는 정보 프레임이 처리될 때까지 다음 정보 프레임을 모두 버리기 때문에 현재 처리중인 프레임이 1개만 존재한다.

간단히 말하면

12번이 문제가 있었기에 수신 호스트는 11만을 버퍼에 저장한다.

이후에 12번에 부정 응답을 보내고 재전송을 받은 뒤 다시 12번을 버퍼에 넣고 처리하기 때문에 현재 처리 중인 프레임이 1개이다.

즉 송신으로부터 받은 모든 데이터를 수신 윈도우에 저장하는 게 아니라 잘 전송된 마지막 데이터만 버퍼에 저장했다가 이후에 전달된 것들 중 마지막 것만 버퍼에 저장해서 윈도우의 크기가 1개인 것이다.



반면에 선택적 재전송 방식은 앞선 정보 프레임에 대한 처리가 이루어지지 않았어도 오류 없이 수신된 모든 정보 프레임을 수신 윈도우에 보관하기 때문에

수신 윈도우의 크기가 송신 윈도우와 같지만 프레임의 도착 순서가 송신 순서와 다르게 된다.


  • 송신 프레임 = 10, 11, 12, 13, 14, 15

12번 프레임에 오류 발생하여 재전송을 진행했음.

  • 수신 프레임 = 10, 11, 13, 14, 15, 12

지금까지는 연속형 전송 방식의 오류를 해결하는 2가지 방식인 고백 N 방식과, 선택적 재전송을 공부했다.

다음은 피기배킹이라는 응답 프레임의 전송 횟수를 줄여 전송 효율을 높이는 방법을 보자.

피기배킹의 장점 = 전송 횟수를 줄여 전송 효율을 높임.


피기배킹은 간단히 말하면

원래는 A가 B에게 데이터를 보내면 B가 A에게 응답을 해주고 B가 A에게 데이터를 보내면 A가 B에게 데이터에 대한 응답을 해줄 것이다.

이때 이 과정을 줄이고자 A가 B에게 데이터를 보내고 B가 A에게 응답에 대한 데이터를 보낼 때 B가 A에게 보낼 데이터도 함께 보내는 것이다.

즉 이렇게 말하면 이상하지만

송신이 데이터를 보내면 수신이 이에 대해서 응답을 할 것인데 이때 수신이 송신에게 보낼 데이터도 함께 보내는 과정이 바로 피기배킹이다.

사진으로 이해해보자!


이런 피기배킹을 지원하기 위해서는

정보 프레임의 구조를 확장해 두 종류의 순서 번호를 모두 표기하도록 해야 한다.

피기배킹 프로토콜은 전송 데이터와 전송 데이터의 순서 번호, 현재까지 제대로 수신한 프레임 순서 번호도 포함하고 있어야 한다.



피기배킹을 사용하지 않는 경우

피기배킹을 사용하는 경우

profile
전공: 소프트웨어(학사), 지능형로봇학과(석사)

0개의 댓글