rdt 3.0이란?
rdt 3.0 이전의 채널은 중간에 사라지는 문제를 해결하지 못하기 때문에 중간에 사라지지만 끊임없이 기다려야 된다는 문제점이 있다.
따라서 이를 해결하기 위해 rdt 3.0에는 일정시간동안 응답하지 않으면 재전송 하는 기능을 추가하였다.
이때 timer를 사용한다.
sender가 receiver로 데이터를 보냈을 때 timer가 실행되고 receiver로부터 ACK를 받게 되면 timer는 종료한다.
sender에서 보낸 데이터가 loss 되었을 경우, receiver에서 보낸 ACK에 loss가 발생한 경우 timeout이 발생한다.
그 이유는 loss가 발생할 경우, sender는 아무 응답을 받지 못하므로 긴 지연이 발생할 수 있기 때문이다.
또한, 손실이 일어나지 않은 경우에도 내가 설정한 time동안 sender에서 보낸 데이터에 대한 ACK가 도착하지 않을 경우, 즉 긴 지연이 발생할 경우 timeout이 발생한다.
이 경우 중복 데이터 패킷이 도착할 가능성이 커지지만 rdt 2.2에서 이미 패킷이 중복되었을 경우 이를 검출하기 위해 sequence number의 기능을 구현하였기 때문에 문제는 발생하지 않는다.
rdt 3.0 문제점
rdt 3.0은 말 그대로 stop and wait이다.
rdt 3.0은 비트 오류나 손실이 있을 때에서 가장 신뢰성 높은 데이터 전송 방법이지만, 패킷이나 ack를 전송하면 그에 대한 응답이 올 때까지 stop 멈추고 wait 기다린다. 즉, 그 시간 동안은 다른 패킷을 보내지 않기 때문에 성능상 완벽하지 않다. 특히 매우 먼 거리에 패킷을 보내려고 한다면 기다리는 시간 때문에 전송 속도가 매우 느려질 것이다.
rdt 3.0의 문제점을 해결하기 위해 sender가 ACK를 아직 받지 못하였지만 여러 개의 패킷을 보내는 것을 허용하는 Pipelining 프로토콜을 구현하였다.
이를 허용하는 프로토콜은 Go-Back-N과 Selective repeat이 있다.
Go-Back-N과 Selective repeat은 다음 포스팅에서 설명하도록 하겠다!
'Computer Science > 컴퓨터 네트워크' 카테고리의 다른 글
전송 계층 프로토콜 : Selective repeat (0) | 2021.08.23 |
---|---|
전송 계층 프로토콜 : Go-Back-N (0) | 2021.08.23 |