CS/네트워크

2. Reliable Data Transfer 작동 원리

조각선생 2022. 8. 17. 21:42

RDT (Reliable Data Transfer)

한 번에 하나의 패킷만 보낸다고 가정한다

 

- unreliable channel에서는 packet error와 packet loss가 발생할 수 있다

- packet error 에는 error detection, feedback, retransmission, sequence 메커니즘이 필요하다

- packet loss 에는 timeout 메커니즘이 필요하다.

RDT1.0

채널이 완벽히 믿을만한 경우

  • 패킷 에러가 없다
  • 패킷 유실이 없다

 

RDT2.0

error detection, feedback, retransmission

 

패킷 에러만 있는 경우 (패킷 유실은 없는 경우)

  • 에러 체크를 할 수 있는 checksum 필요
  • feedback 필요
    • ACKs (Acknowledgements) : 패킷이 제대로 왔을 때의 응답
    • NAKs (Negative acknowledgements) : 패킷이 에러가 있을 때의 응답
  • sender는 receiver로부터 NAKs를 받는 경우 재전송을 해야 한다

문제점

ACK 또는 NAK 응답을 보내는 도중에 에러가 나면, sender는 똑같은 패킷을 다시 보내는데, 이 때 receiver 입장에서는 새로운 패킷인지 에러가 나서 똑같은 패킷이 다시 온 것인지를 알 수가 없다. 

=> 패킷에 번호를 붙여야 해결할 수 있음

RDT2.1

error detection, feedback, retransmission, sequence#

 

1. (sender) 0번 패킷을 보낸다

2. (receiver) 응답을 보내는 도중 에러가 난다.

3. (sender) 같은 패킷인 0번 패킷을 다시 보낸다.

4. (receiver) 같은 패킷이 왔으므로 버리고, 제대로 받았다는 ACK 응답을 보낸다.

5. (sender) 다음 패킷을 보낸다

 

RDT2.2

NAK-free 프로토콜

가장 마지막에 성공적으로 받은 PKT 넘버를 담은 ACK를 반환한다

1. (sender) 0번 패킷 보낸다

2. (receiver) 0번 패킷을 받았다는 ACK를 보낸다

3. (sender) 1번 패킷 보냈는데, 제대로 도착하지 못하고 에러가 났다

4. (receiver) 가장 마지막에 성공적으로 받은 번호의 ACK(0번)을 보낸다

 

RDT3.0

패킷 에러와 패킷 유실이 모두 있는 RDT

패킷 유실에 대한 처리를 하기 위해서는 타이머가 필요하다.

정해진 시간이 지났는데도 응답이 오지 않으면(패킷 유실이 일어났을 것) 같은 패킷을 다시 보낸다.

 

* 직접 그린 그림 제외한 그림의 출처는 KOCW 강의노트입니다.