Go-Back-N이란?
sender는 stop- and- wait처럼 확인 응답을 기다리지 않고 여러 패킷을 전송할 수 있다.
대신, 파이프라인 즉 window size에서 확인 응답이 되지 않은 패킷의 최대 허용 수는 window size = N보다 크지 않아야 한다.
rdt_send()가 상위 계층으로부터 호출이 되면 송신자는 첫째로 윈도우가 가득 찼는지, 아직 확인 응답이 되지 않는 패킷이 있는지를 확인한다.
만약 윈도우가 가득 차 있지 않다면 패킷이 생성되고 receiver로 sequence number와 data를 보낸다.
receiver가 보낸 sequence number와 data, 즉 packet가 sender에게 도착하면 잘 도착했다는 의미로 패킷 순서에 따른 ack를 보내준다.
이때, receiver는 순서대로 번호를 붙여 ack를 송신한다.
순서대로 수신되지 않았다면 받은 데이터를 무시하고 가장 최근에 제대로 수신된 순서의 패킷에 대한 ACK를 순서대로 수신될 때까지 계속 재전송한다.
Go-Back-N에서 sender만 단 하나의 타이머를 가진다.
sender에서의 sequence number에 대한 손실이나, receiver에서 ack에 대한 손실, 마지막으로 내가 설정한 time동안 ack가 도착하지 않는 아주 긴 지연이 있을 때, timeout이 발생한다.
timeout이 발생하면 손실되거나 지연된 패킷 만을 재전송하는 것이 아닌, timeout이 발생한 패킷부터 다시 순서대로 송신한다.
즉, 확인 응답이 되지 않는 패킷이 있는 한 timer는 sender에서 항상 실행 중이다.
Go-Back-N 문제점
Go-Back-N은 손실되거나 timeout이 발생한 패킷만 재전송하는 것이 아닌 timeout이 발생한 패킷부터 다시 순서대로 송신한다.
따라서 패킷 하나의 오류 때문에 많은 패킷을 재전송하게 되므로 많은 패킷을 불필요하게 재전송하는 경우가 발생한다.
'🌐 CS-Study > 컴퓨터 네트워크' 카테고리의 다른 글
전송 계층 프로토콜 : Selective repeat (0) | 2021.08.23 |
---|---|
rdt 3.0 (stop- and- wait) (0) | 2021.08.23 |