728x90
이번 포스트에서는 go-back-n과 selective repeat 프로토콜에 대해 다루겠다.
기존의 rdt3.0(stop-and-wait)은 패킷을 보낼 때마다 일정한 RTT(Round Trip Time)를 기다려야 하기 때문에 utilization이 상당히 낮다. 즉, 패킷을 하나 보낸 다음에 응답을 기다리는 동안에 아무런 동작도 하지 않기 때문에 그 네트워크의 효율이 낮다는 것이다.
실제로 확인해보면 패킷을 하나 보내는데에 소요한 시간보다 응답을 기다리는 RTT 시간이 더 길다.
Go-Back-N
- Cumulative ACK: ACK까지 잘 받았다는 의미 (예, 10번까지 잘 받았으니 다음부터는 11번부터 보내줘)
- Timer: 윈도우의 가장 oldest in-flight 패킷에 설정, 즉 가장 최근에 도달한 ACK 메시지의 다음번부터 시작
- 딜레이로 인해 먼저 도착한 패킷을 discard 또는 버퍼에 저장할 수 있다.(개발자 마음)
- pkt1에 대한 ack1만 도착하고 pkt2에 대한 ack2가 타임아웃 되기 전에 도착하지 않을 경우
- pkt2부터 재전송한다.
- 그 뒷부터 오는 pkt3, pkt4, pkt5 다 discard 한다.
- Go-Back-N에서 타이머는 oldest in-flight에 대한 단 하나만 존재한다.
Selective Repeat
- 세그먼트마다 타이머 소유
- 순서가 안 맞게 와도 discard X
- pkt1에 대한 ack1까지 잘 도착하여 윈도우를 2로 이동
- pkt2에 대한 ack2가 오지 않는다.(loss)
- pkt2에 대한 타이머 시작
- pkt3, pkt4, pkt5 각각에 대한 ack가 잘 도착한다. 버퍼에 저장
- pkt2에 대한 타이머아웃
- pkt2 재전송
- pkt2에 대한 ack가 잘 도착하면 버퍼에 있는 패킷(2, 3, 4, 5)을 Application layer로 이동
- 해결법: 시퀀스번호 허용치 값 >= 2 * 윈도우 사이즈
'Networking' 카테고리의 다른 글
연결 관리 및 흐름 제어 (TCP) (0) | 2022.06.14 |
---|---|
TCP (0) | 2022.06.11 |
Reliable Data Transfer (RDT) (0) | 2022.05.26 |
Transport Layer (전송 계층) (0) | 2022.05.06 |
Distance-Vector Algorithm (거리 벡터 알고리즘) (0) | 2022.05.02 |