전송 후 대기 프로토콜(Stop-and-Wait Protocol)은 네트워크 통신에서 가장 기본적이고 단순한 데이터 전송 프로토콜 중 하나입니다.
이 프로토콜은 송신자가 데이터를 전송한 후, 수신자로부터 확인 응답(ACK)을 받을 때까지 기다리는 방식으로 작동합니다. 수신자가 패킷을 성공적으로 수신하고 ACK를 보내면, 송신자는 다음 패킷을 전송합니다. 만약 일정 시간 내에 ACK를 받지 못하면 송신자는 해당 패킷을 재전송합니다.
전송 후 대기 프로토콜(Stop-and-Wait Protocol)은 매우 단순한 신뢰적 데이터 전송 프로토콜로, 한 번에 하나의 패킷만 전송하고 그에 대한 확인 응답을 기다린 후 다음 패킷을 전송하는 방식입니다.
신뢰성을 보장하지만, 대역폭을 효율적으로 사용하지 못하고 성능이 떨어질 수 있다는 단점이 있습니다. 이러한 단점을 극복하기 위해 파이프라인 프로토콜과 같은 더 복잡한 방식들이 개발되었습니다.
송신자는 데이터를 하나의 패킷으로 전송합니다.
송신자는 수신자로부터 해당 패킷에 대한 확인 응답(ACK)을 기다립니다.
수신자가 패킷을 성공적으로 받으면 ACK를 송신자에게 보냅니다.
송신자가 ACK를 받으면, 다음 패킷을 전송합니다.
일정 시간 내에 ACK를 받지 못하면 송신자는 타임아웃이 발생하고, 해당 패킷을 재전송합니다.
한 번에 하나의 패킷만 전송되고, 그에 대한 응답을 기다린 후에 다음 패킷을 전송하기 때문에 매우 단순합니다.
송신자는 수신자의 ACK를 통해 패킷이 올바르게 전송되었는지 확인할 수 있습니다.
ACK가 도착하지 않으면 송신자는 해당 패킷을 재전송하여 데이터 손실을 방지합니다.
신뢰성 보장: 한 번에 하나의 패킷만 처리하기 때문에 데이터가 손실되거나 손상되었을 때 쉽게 감지하고 재전송할 수 있어 신뢰적인 데이터 전송을 보장합니다.
간단한 구현: 구현이 매우 간단하며, 오류 제어 및 흐름 제어를 효율적으로 처리할 수 있습니다.
비효율성: 한 번에 하나의 패킷만 전송하고 응답을 기다려야 하기 때문에 네트워크 대역폭을 효율적으로 사용하지 못합니다. 특히 네트워크 지연(latency)이 큰 경우, 대기 시간이 길어져 성능이 저하될 수 있습니다.
낮은 처리율: 여러 패킷을 동시에 전송할 수 없기 때문에 전송 속도가 느리며, 대역폭이 넓거나 전송 지연이 큰 네트워크 환경에서 비효율적입니다.
파이프라인 프로토콜(Pipelined Protocol)은 네트워크 통신에서 전송 후 대기(Stop-and-Wait) 프로토콜의 비효율성을 개선하기 위해 개발된 프로토콜입니다. 전송 후 대기 방식에서는 한 번에 하나의 패킷을 보내고 그에 대한 응답을 기다리지만, 파이프라인 프로토콜에서는 여러 패킷을 연속적으로 전송할 수 있어 네트워크 대역폭을 더 효율적으로 사용합니다.
파이프라인 프로토콜은 한 번에 여러 패킷을 전송하여 네트워크 대역폭을 더 효율적으로 활용하고, 데이터 전송 속도를 크게 향상시키는 방식입니다. Go-Back-N과 Selective Repeat는 파이프라인 프로토콜의 두 가지 주요 구현 방식으로, 각기 다른 방식으로 패킷 손실을 처리하고 재전송을 관리합니다. 이러한 방식들은 전송 후 대기 방식의 비효율성을 개선하여 네트워크 성능을 극대화하는 데 기여합니다.
송신자는 연속적인 여러 패킷을 전송합니다. 이는 하나의 패킷에 대한 확인 응답을 받기 전에 추가적인 패킷을 전송할 수 있다는 의미입니다.
수신자는 패킷을 수신하고, 각 패킷에 대해 확인 응답(ACK)을 보냅니다.
송신자는 수신자로부터 ACK를 받으면 해당 패킷이 성공적으로 전송되었음을 확인합니다.
만약 패킷이 손실되거나 손상되면, 그 패킷에 대한 ACK가 오지 않기 때문에 송신자는 해당 패킷을 다시 전송합니다.
송신자는 한 번에 최대 N개의 패킷을 전송할 수 있습니다(이때 N은 윈도우 크기를 의미).
만약 패킷 중 하나가 손실되면, 그 손실된 패킷 이후에 전송된 모든 패킷을 다시 전송해야 합니다. 즉, 손실된 패킷 이후의 모든 패킷을 수신자가 처리할 수 없기 때문에, 송신자는 그 이후의 패킷도 재전송하게 됩니다.
예시:
패킷 1, 2, 3, 4, 5를 전송 중에 패킷 3이 손실되면, 송신자는 패킷 3뿐만 아니라 4, 5도 다시 전송합니다.
송신자는 여전히 N개의 패킷을 연속적으로 전송할 수 있지만, 손실된 패킷만 선택적으로 재전송합니다.
수신자는 손실된 패킷 외의 다른 패킷을 버퍼에 저장하고, 손실된 패킷만 재전송을 요청합니다. 이 방식은 네트워크 자원을 더 효율적으로 사용합니다.
예시:
패킷 1, 2, 3, 4, 5 중에서 3이 손실되었을 때, 송신자는 패킷 3만 다시 전송하고, 수신자는 이미 받은 패킷 4와 5를 재전송할 필요 없이 저장된 상태로 처리합니다.
여러 패킷을 동시에 전송하기 때문에 네트워크의 대역폭을 훨씬 더 효율적으로 사용할 수 있습니다. 송신자가 매번 확인 응답을 기다릴 필요가 없기 때문에 전송 속도가 크게 향상됩니다.
대기 시간 없이 여러 패킷을 연속적으로 전송할 수 있어 처리율(throughput)이 증가합니다. 특히 네트워크 지연이 큰 환경에서 효과적입니다.
송신자는 수신자의 처리 능력(윈도우 크기)을 고려하여 패킷을 전송할 수 있기 때문에, 네트워크 혼잡을 피하고 효율적인 흐름 제어가 가능합니다.
전송 후 대기 방식에 비해 송신자와 수신자가 패킷의 순서를 더 세밀하게 관리해야 하므로, 프로토콜의 구현이 더 복잡합니다.
Go-Back-N 방식에서는 손실된 패킷 이후의 모든 패킷을 다시 전송해야 하므로, 재전송의 오버헤드가 발생할 수 있습니다.