reliable data transfer 는 unreliable channel 위에서 구현되었기 때문에 복잡하고 어렵다. 그 예로, TCP 는 unreliable 한 IP 위에 구현된 reliable data transfer protocol 이다.
rdt3.0 : Stop-and-Wait Protocol
rdt3.0 은 stop-and-wait protocol 로 packet 을 보내고 멈춘 후 ackowledgment 를 기다리는 동작을 한다. sender 와 receiver 는 다음과 같은 대원칙을 따른다.
- sender는 pkt 를 보내면서 timer 를 작동한다. 보낸 pkt 에 해당하는 ack 을 받으면 다음 pkt 을 보낸다. 만약 timeout 이 발생하면 이전에 보낸 pkt 를 다시 재전송한다.
- receiver 는 pkt 를 받으면 에러 체크한 후 ack 을 보낸다.
rdt 3.0 은 위와 같은 대원칙을 사용한다. 특히, timeout 과 재전송 매커니즘을 통해 loss 와 delay 를 해결하여 reliable data transfer 를 보장한다. 참고로 rdt 에서는 loss 와 delay 를 구별하지 않아 처리방법이 동일하다.
Pipelined Protocols
stop-and-wait protocol 은 한번에 하나의 packet 을 전송하고 acknowledgement 를 기다리므로, link utilization 이 낮아 비효율적이다. pipelined protocol 은 sender 가 acknowledgement 를 기다리지 않고 mulitple packets 를 보내는 protocol 로, stop-and-wait protocol 보다 link utilization 이 높아 효율적이다. 이때, acknowledgement 를 기다리지 않고 mulitple packets 를 보내는기술을 pipeling 이라고 한다. pipelining 을 위해, range of sequence numbers 는 항상 증가해야하고, sender/receiver 측에서 하나 이상의 packet 을 buffer 해야한다.
piplelined protocol 의 종류로 Go-Back-N 과 selective repeat 가 있다.
Go-Back-N (GBN) protocol
GBN 을 사용하는 sender 와 receiver 는 다음과 같은 규칙을 따른다.
- sender 는 window 에 unacked packets 을 N 개까지 가질 수 있다. 시작 시 sender 는 window 내의 모든 pkt 를 보낸다.
- sender 는 window 내의 smallest ack 을 받으면 window 를 한 칸 옮기고 다음 pkt 를 보낸다. duplicate ack 을 받으면 ignore 한다.
- sender 는 oldest unacked packet 에 timer 를 가진다. timeout시, all unacked packets 을 재전송한다.
- receiver 는 pkt 를 받으면 cumulative ack 을 보낸다. 만약 gap 이 발생하면, gap 을 감지한 pkt 에 해당하는 ack 은 보내지 않고(discard or don't buffer) 응답한 가장 높은 순서의 ack 을 보낸다.
참고로 cumulative ack 이란 ACK(n) 의 경우 n까지의 모든 packets 를 receiver 가 잘 받았다는 뜻이다.
Selective Repeat (SR) protocol
SR을 사용하는 sender 와 receiver 는 다음과 같은 규칙을 따른다.
- sender 는 window 에 unacked packets 을 N 개까지 가질 수 있다. 시작 시 sender 는 window 내의 모든 pkt 를 보낸다.
- sender 는 window 내의 smallest ack 을 받으면 window 를 한 칸 옮기고 다음 pkt 를 보낸다. 다른 ack 을 받으면 해당 ack 을 받았다는 것을 record 한다.
- sender 는 each unacked packet 에 timer 를 가진다. timeout시, 해당 unacked packet 만 재전송한다.
- sender 는 window 내의 모든 pkt 가 ack 을 받으면 pipeline 전체를 밀어낸다.
- receiver 는 각각의 packet 에 대한 individual ack 을 보낸다. window 내에 있지만 순서에 맞지 않는 pkt 는 buffer 한다.
- receiver 는 window 내의 모든 pkt 가 ack 을 보냈다면 pipeline 전체를 밀어낸다.
SR protocol 은 sequence number size 가 작은 경우, receiver 가 같은 sequence number 를 가지는 다른 packet 을 동일하게 본다는 딜레마가 있다. 따라서 sequence number size 는 window size 의 2배 이상이 되어야 한다.
참조
Computer Networking _ A Top Down Approach, 7th, converted
'COMPUTER SCIENCE > Network' 카테고리의 다른 글
[Network] Transport Layer - TCP : Connection-Oriented Transport - (2) (0) | 2023.01.16 |
---|---|
[Network] Transport Layer - TCP : Connection-Oriented Transport - (1) (1) | 2023.01.12 |
[Network] Transport Layer - Connectionless Transport: UDP (0) | 2022.12.08 |
[Network] Transport Layer - Service and Multiplexing & Demultiplexing (0) | 2022.11.30 |
[Network] Application Layer - Socket Programming (0) | 2022.11.28 |
댓글