본문 바로가기

[TCP] 파이프 라이닝(Pipelining)

by mugglim 2022. 7. 6.

Pipelining

패킷을 전송 후 피드백(응답)을 받기 전까지의 시간을 RTT(Round Trip Time)라고 한다. 만약 패킷을 전송하고 응답받을 때까지 다른 패킷을 보내지 않는 다면 RTT 동안 네트워크를 사용하지 않아 성능적인 이슈가 발생한다. 이를 해결하기 위한 방법이 Pipelining이다. Pipelining이란 특정 크기만큼의 패킷을 한 번에 전송 후 피드백을 받는 방법이다. 구현 방법에는 Go-Back-N과 Selective Repeat이 있다.

Go-Back-N

Go-Back-N은 윈도우 사이즈를 N으로 지정하여, 패킷의 전송을 실패한 경우 N개의 패킷을 모두 다시 전송하는 방법이다. 패킷 전송이 실패되는 경우는 패킷에 타임아웃이 발생한 경우이다. (*참고. 수신자 측은 이미 받은 패킷은 무시한다.)

아래의 예제를 통해 이해해보자.

우리가 보낼 패킷은 {0,1,2,3,4,5}이며, N은 4이다. 아쉽게도 2번 패킷을 전송하는데 실패했다. 그림과 아래의 텍스트를 참고하여 흐름을 따라가보자.

  1. 송신자 : N이 4이므로 패킷 {0,1,2,3}을 전송한다. (아쉽게도 2번 패킷은 유실되었다.)
  2. 수신자 : PKT(0)를 수신하여, ACK(0)을 응답한다.
  3. 수신자 : PKT(1)를 수신하여, ACK(1)을 응답한다.
  4. 수신자 : PKT(3)를 수신했지만 PKT(2)를 수신하지 못했기에 PKT(3)을 버린 후, ACK(1)을 응답한다.
  5. 송신자 : ACK(0)를 수신하여, 윈도우를 오른쪽으로 1칸 이동시켜 PKT(4)를 전송한다.
  6. 송신자 : ACK(1)를 수신하여, 윈도우를 오른쪽으로 1칸 이동시켜 PKT(5)를 전송한다.
  7. 송신자 : ACK(2)를 수신하지 못했기에 Timeout이 발생했다. 패킷 {2,3,4,5}를 다시 전송한다.

Go-Back-N의 아쉬운 점은 유실된 패킷 2 하나뿐인데, {2,3,4,5}를 다시 전송하는 점이다. 예제에서는 N이 4이지만, 실제로는 N이 매우 큰 값이기 때문에 이는 네트워크 부하로 이어질 수 있다.

Selective Repeat

Selective Repeat 기법은 Go-Back-N과 유사하다. 차이점은 크게 2가지이다.

  1. 패킷에 Timeout이 발생하면, 오직 유실된 패킷만 전송한다.
  2. 수신자측에도 버퍼를 유지하여 응답 받은 패킷의 순서를 고려하지 않아도 된다.

글로는 이해가 어려우니, 예제를 확인해보자.

우리가 보내야 할 패킷은 {0,1,2,3,4,5,6,7,8,9}이며, N은 4이다.

  1. 송신자 : N이 4이므로 패킷 {0,1,2,3}을 전송한다. (앞선 예제와 같이 아쉽게도 2번 패킷이 유실되었다.)
  2. 수신자 : PKT(0)을 수신하여, 윈도우를 오른쪽으로 이동시킨 후 ACK(0)을 응답한다.
  3. 수신자 : PKT(1)을 수신하여, 윈도우를 오른쪽으로 이동시킨 후 ACK(1)을 응답한다.
  4. 수신자 : PKT(3)을 수신하였지만, PKT(2)를 받지 못했기에 PKT(3)을 버퍼에 반영하기만 하고 윈도우는 이동시키지 않는다.
  5. 송신자 : ACK(0)을 수신하여, 윈도우를 오른쪽으로 이동시킨 후 PKT(4)을 응답한다.
  6. 송신자 : ACK(1)을 수신하여, 윈도우를 오른쪽으로 이동시킨 후 PKT(5)을 응답한다.
  7. 수신자 : PKT(4)을 수신했지만, PKT(2)를 받지 못했기에 PKT(4)을 버퍼에 반영하기만 하고 윈도우는 이동시키지 않는다.
  8. 수신자 : PKT(5)을 수신했지만, PKT(2)를 받지 못했기에 PKT(5)을 버퍼에 반영하기만 하고 윈도우는 이동시키지 않는다.
  9. 송신자 : PKT(2)에 Timeout이 발생했기 때문에 PKT(2)만 재전송한다.
  10. 수신자 : PKT(2)를 수신하여 윈도우를 오른쪽으로 4칸 이동시킨 후 ACK(2)을 응답한다. (4칸을 이동하는 이유는 이전에 3,4,5가 버퍼에 반영되었기 때문이다.)

간단히 Go-Back-N과 Selective Repeat을 알아보았다. 위 예제와 달리 현실 네트워크 상황은 더 복잡하고 N이 큰 경우가 많다. 다양한 상황을 예상해보며 개념을 숙달해보자.

Ref.

본 글은 KOCW 컴퓨터네트워크(한양대학교 이석복 교수님) 강의를 참고하여 작성하였습니다. 잘못된 내용이 있으면 자유롭게 댓글로 달아주시길 바랍니다.

댓글