-
파이프라인 프로토콜공부방 2023. 11. 22. 23:24
Pipeline Protocol
기존 전송후 대기(Stop and wait) 프로토콜 같은 경우는 한번에 하나의 패킷만 보내고 ACK를 받을때까지 대기하게되면서 비효율적인 측면이 있었다. 이를 보완한 Pipeline Protocol은 정해진 크기만큼 패킷을 한번에 여러개를 보내는 방식이다.
이런 Pipeline Protocol의 대표적인 두가지 방법으로는 Go-Back-N 방식과 Selective repeat 방식이 있다.
Go-Back-N
송신자는 윈도우 크기만큼의 패킷을 한번에 보낼 수 있다. 수신자는 패킷을 받으면 ACK 신호를 보낸다.
ACK를 받으면 윈도우가 이동하여 다음 패킷을 보낼 수 있게된다. Go Back N 에서는 ACK(n) 의 의미는 n번째 패킷 까지 정상적으로 받았다 라는 의미이다. 예를들어 ACK(5) 는 0~5까지의 패킷을 정상적으로 받았다라는 의미이다.
위에서 설명한 것처럼 Go Back N 의 ACK 특성 때문에, 위 그림과 같이 ACK(2)를 받지 못할경우 다음과 같은 문제가 생긴다. ACK(1)는 받았기 때문에 0~1 은 정상적으로 받은지 알지만 ACK(2)가 안왔기 때문에 이미 패킷을 5번까지 보냈음에도 2,3,4,5 패킷이 잘 갔는지 안갔는지 알 수가 없다.
결국 ACK(2)를 받지 못한채 내부적인 타임아웃이 발생하여 데이터를 재전송 해야할때, 송신자는 문제가 있는 2번 패킷 외에도 3,4,5 패킷을 한번 더 보내야 한다는 문제점이 있다.
Selective Repeat
Go Back N 의 문제점을 해결한 방식이 Selective Repeat 방식이다. Selective Repeat은 말 그대로 전송 실패한 패킷을 선별적으로 재전송 해준다.
위의 그림을 보면 수신측에 buffer라는 단어가 있다. Selective Repeat 에서는 위와 같이 Buffer를 두어 순서를 제어한다
위 그림같이 0,1 패킷은 정상적으로 수신하여 ACK를 보내고 2번 패킷은 수신하지 못해 보내지 못했다. 하지만 이미 송신쪽에서 발송한 3번 패킷은 정상적으로 받고 ACK를 보냈다.
이경우 나중에 2번 패킷을 재전송 받아야하는데 그전에 3번 패킷을 받아버리면 순서상의 문제가 있으니 문제가 있는 2 번 패킷 이후로는 별도의 버퍼에 저장을 해둔다.
그 후 윈도우가 0,1 ACK로 윈도우가 이동하여 4,5 패킷이 오고 이것들 역시 정상적으로 받고 ACK도 보냈지만 2번을 받지 못했으니 버퍼에 계속 저장한다.
결국 송신쪽 타임아웃으로 2번 패킷이 재 전송되고, 정상적으로 수신한 수신측은 2번 패킷과 버퍼에 있는 3~5번 패킷을 저장한다.
출처
https://dev-nicitis.tistory.com/28
https://www.javatpoint.com/go-back-n-arq
'공부방' 카테고리의 다른 글
JPA 1대다 fetch join 주의사항 (0) 2024.04.02 ElasticSearch 정리 (0) 2023.12.25 HTTPS 통신 과정 (0) 2023.11.15 OSI 7계층과 TCP/IP 4계층 (0) 2023.11.07 Session과 Token (0) 2023.10.20