ARQ - 파이프라이닝

ksh98·2024년 4월 22일

네트워크

목록 보기
13/25

파이프라이닝을 사용시

한 주기는 반복되는 그림이 무엇인지를 보면알 수 있다.
위 예시에서는 주기가 rtt + 전송시간이다.
이용률을 계산시 분모는 같지만 분자가 더 큰 것을 알 수 있다.
이렇게 파이프라이닝은 놀고 있는 시간을 줄여 성능을 높일 수 있다.

Go-Back-N

  • 윈도우 크기를 n이라 할 때 전송자는 최대 n개의 응답받지 못한 패킷을 갖을 수 있다.
  • 전송자는 윈도우 내 가장 오래된 응답받지 못한 패킷에 대한 타이머 하나만 갖고 있다.
  • 타임아웃이 되면 타이머가 걸린 패킷부터 쭉 재전송한다.
  • cack을 사용한다 cack n 은 n번 패킷까지 잘 받았다는 것이다.

전송자

  • 일정 크기의 윈도우를 갖고 있다.
  • 꼭 윈도우의 왼쪽부터 보내야하는 것은 아니다.
  • 왼도우의 타이머가 걸린 패킷 즉 가장 오래 응답받지 못한 패킷이 응답을 받으면 왼도우를 오른쪽으로 한칸 움직인다.
  • 오른쪽으로 이동하다 보면 언젠가는 윈도우가 처음과 끝에 걸쳐 있을 것이다.
  • 이 경우 시퀀스 번호만 보면 어떤 것이 먼저 낮은 시퀀스 번호의 패킷인지 알기 어려울 수도 있다.
  • 그래서 k비트로 시퀀스 번호를 나타내고 윈도우 사이즈가 n일 때 2^k >>>> n이 되게 k와 n을 정한다.

수신자

  • 언제나 순서가 맞는 다음으로 예상되는 패킷만을 가리키고 있는다
  • 현제 기다리고 있는 패킷이 아니라면 버린다. 버퍼링을 하지 않는다.
  • 보내는 애크는 어디까지 잘 받았는지를 의미한다.
  • 원하는 패킷이 아니면 버리고 애크로 어디까지 잘 받았는지 알려준다.
  • 원하는 패킷이 아니라 버리는데 계속 애크를 보내는 이유는 수신자는 전송자가 애크를 받은지 못 받은지 알 수 없기 때문이다.

예시

패킷 1번까지는 잘 받고 2번이 로스가 난 경우이다.
왼쪽 2개를 잘 받았으니 윈도우가 오른쪽으로 두칸 이동했다.

패킷 3은 제대로 갔어도 수신자가 기다리는 패킷은 2번이다 따라서 버리고 1번까지 잘 받았다고 애크 1을 보낸다.

전송자는 윈도우 공간이 남으니 패킷 4, 5도 보낸다. 이때 타이머는 제일 오래된 응답을 못 받은 패킷인 2번에 걸려있다.

타임 아웃이 발생하면서 제일 오래된 응답을 못 받은 패킷인 2번부터 모두 재전송한다.

수신자는 2번 패킷을 받고 2번까지 잘 받았으니 애크 2를 보내고 3번을 기다린다.
수신자는 3번 패킷을 받고 3번까지 잘 받았으니 애크 3를 보내고 4번을 기다린다.
수신자는 4번 패킷을 받고 4번까지 잘 받았으니 애크 4를 보내고 5번을 기다린다.
수신자는 5번 패킷을 받고 5번까지 잘 받았으니 애크 5를 보내고 6번을 기다린다.

Selective Repeat

  • 패킷마다 각각의 애크가 있다.
  • 전송자는 응답받지 못한 패킷 각각에 대한 타이머를 갖고 있다.
  • 전송자와 수신자 모두 윈도우를 갖고 있고 두 사람의 윈도우의 위치는 다를 수 있다.

전송자

  • 윈도우가 비어있으면 보낼 수 있다.
  • 가장 낮은 번호의 패킷이 응답을 받으면 윈도우를 오른쪽으로 한 칸 옮긴다.
  • 타임아웃이 발생하면 해당 패킷만 재전송한다.

수신자

  • 순서에 맞는 다음 패킷을 가리키고 있다.
  • 패킷이 왔는데 기대한 패킷이 아니라면 잠시 버퍼에 둔다.
  • 기대한 패킷이 오면 버퍼링한 패킷들과 합쳐 순서에 맞는 일련의 패킷을 만들고 응요에게 보낸다. 이후 윈도우를 옮긴다.
  • 윈도우 왼쪽에 있는 n개의 패킷이 와도 애크를 보낸다. 왜냐면 이 패킷이 다시 왔다는 것은 수신자는 잘 받았지만 전송자가 애크를 못 받았다는 것이기 때문이다.
  • 현재 윈도우에 있는 패킷과 왼쪽으로 n개의 패킷 이외의 패킷이 오면 무시한다.

예시

패킷 2가 로스가 나면 수신자는 계속 패킷 2를 기대하고 있다.
따라서 3, 4, 5는 버퍼링을 한다.
이후 전송자의 패킷 2가 타임아웃이 발생해 재전송되면 수신자는 이를 받고 응용에 버퍼에 있는 패킷과 함께 보내서 2, 3, 4, 5를 올려 보낸다.
이후 애크2를 보내고 수신자의 윈도우는 6으로 이동한다.
전송자는 애크 2를 받아 윈도우 내 모든 패킷이 응답을 받았으므로 윈도우를 6으로 옮긴다.

딜레마

셀렉티브 리핏에서 총 시퀀스 번호 수가 윈도우 크기보다 충분히 크지 못하면 다음과 같은 문제가 발생한다.

첫번째 상황은
처음에 보낸 0번 패킷은 응답을 잘 받았고 두번째로 보낸 0번 패킷이 응답을 받아야 하는 상황이다. 수신자의 윈도우에 0이 있으므로 수신자는 0번 패킷이 재전송 된건지는 알 수 없지만 받았으니 애크0을 줄 것이고 문제가 없이 잘 돌아간다.

두번째 상황은
처음에 보낸 0번 패킷이 애크를 못 받았다. 하지만 수신자의 윈도우는 패킷을 받아 오른쪽으로 이동한 상태이다. 사실 수신자의 윈도우에 있는 0은 두번째 0이므로 재전송된 패킷 0을 받으면 안 된다. 그러나 수신자는 패킷이 재전송된 것인지 알 수 없기 때문에 받아들이고 문제가 있음에도 정상 상황과 똑같이 작동을 한다.

이를 위해 시퀀스 번호를 윈도우 크기보다 충분히 크게 하고 셀렉티브 리피트에서는 앞뒤 n을 모두 보기 때문에 2^k >>>> 2*n이어야 한다.

profile

0개의 댓글