RDT : Reliable Data Transfer

미노·2025년 6월 12일

Computer Network

목록 보기
12/23
  • 어느 layer에서나 필요함
  • 신뢰성 있는 데이터 전송 : 데이터의 유실없이 전송되는 것
  • FSM (Finite State Machine)

RDT 1.0 : Reliable transfer over a reliable channel

  • Data의 오류나 손실이 없는 전송상태를 가정
  • Sender

  • Receiver


RDT2.0 : Channel with bit errors

  • 전송은 완벽하지만 Data error가 있을 수 있음
  • checksum, bits checking을 통해 오류를 검토하는 과정을 추가
  • checking 결과를 sender에게 알려주는 ACK, NAK가 존재
    • ACK : error가 없이 잘 전송되었음을 보내주는 신호
    • NAK : data’s error가 발견됨, sender는 신호를 받은 후, retransmit

  • 결함 : ACK, NAK에 대해서 오류가 발생하면 Sender는 하염없이 기다리는 상태가 됨
  • 해결책 : 보내는 packet에 sequence number를 추가함

RDT 2.1 : Sender, handiling garbled ACK/NAKs

  • Sender는 packet에 0, 1을 번갈아가며 sequence number를 붙여 packet 생성
  • Sender

  • Receiver

⇒ Sender, Receiver 둘 다 0, 1의 pkt에 대해서만 처리를 함


RDT 2.2 : a NAK-free protocol

  • Receiver는 pkt를 받을 때 마다 ACK, NAK를 보내야 하므로 시간이 오래 걸림

⇒ Sender에게 ACK만 보내줌.


RDT 3.0 : channels with errors and loss

  • error뿐만 아니라 pkt loss도 발생하는 채널
  • 만약 pkt loss가 발생한다면 sender는 알지못한다.
  • 해결책 : Packet을 보낼 때 Timer를 함께 설정. Timer가 지날 때 까지 응답이 오지 않으면 retransmit
  • Sender

  • Sender는 timer를 함께 설정하여 패킷을 보냄. 중간에 loss가 발생하거나 ACK가 timer보다 늦게올시, 패킷재전송을 함.

RDT 3.0 in actions

  • 총 네 가지의 케이스가 존재함
    • No errors, no loss → 정상적으로 문제 없이 통신함
    • packet loss → sender가 보낸 pkt 자체가 loss, receiver는 pkt을 받지 않았으니 ACK를 보내줄 수가 없음. 결국 sender timeout이 발생해 resend
    • ACK loss → receiver가 pkt을 받은 후 ACK를 보냈으나, loss 발생. 결국 timeout이 나서 resend. 하지만 receiver는 이미 확인한 pkt인걸 확인 후 자체적으로 처리. ACK 전달
    • delayed ACK

Performance of rdt3.0 (stop and wait)

  • RDT 모델들은 하나의 pkt을 보내고 그 응답을 기다리는 stop and wait 방식임

  • Utilization : 주어진 시간에 얼마만큼의 데이터를 전송했는가에 대한 비율, 0~1

  • RDT 모델의 Utilization을 구해보자

  • Example
  • 1Gbps link (throughput), 15ms prop (propagation delay), 8000 bits packet (packet’s size)
  • Diagram RTT : 하나의 패킷을 보내고 응답을 받을 때 까지의 텀. 위의 그림에서는 prop delay 15ms이니 RTT는 30ms 해당 rdt3.0의 U는 0.027%로 매우매우 효율이 낮음. 이는 하나의 pkt을 보내고 응답을 받을 때까지 기다리고 있기 때문임

RDT3.0 : pipeline protocols operation

  • 해결책 : 앞의 프로토콜은 하나의 pkt을 보내고 응답을 받을 때까지 계속 기다리기만 하기 때문에 효율이 좋지 않음 → 파이프라이닝 기법을 사용하여 여러개의 pkt을 한 번에 보냄
    • 조건
      • sequence number의 확장
      • sender, receiver의 buffering
  • Pipelining: increased utilization ⇒ 3-pkts pipelining 기법은 stop and wait 방식보다 3배나 증가한 것을 볼 수 있다.

GBN(Go-Back-N):

Sender

  • Window : Sender가 ACK를 받지 않고 한 번에 보낼 수 있는 pkt의 수, 파이프라이닝할 pkt의 수
  • Base : ACK 받지 않은 가장 seq num가 작은 pkt

  • Timer는 base를 추적함

Receiver

  • Receiver는 가장 최근의 수신받은 pkt의 seg num를 기억함

GBN in action

  • 만약 3-pkts일 때, [0, 1]에 대한 ACK를 보내주고 2에 loss가 발생 → [4, 5]를 받아도 receiver는 이를 무시, 최근 수신받은 pkt인 1에 대한 ACK만 지속적으로 보냄 (pkt2 loss가 발생했음을 알림) → pkt2의 Timeout이 발생 → sender는 window에 있는 [2, 3, 4]를 한 번에 보냄

⇒ GBN은 위의 그림을 보다시피 pkt loss발생 시 sender의 pkt을 다 버리기 때문에 쓸데없는 데이터 전송이 잦아진다.


Selective repeat

  • loss pkt만 다시 보내자 → receiver는 loss pkt을 받는다면 그 후에 오는 pkt들은 buffer에 따로 담아놓는다.
  • loss pkt에 대한 timeout이 발생 시 sender는 해당 pkt만 retransmission

Selective repeat in action

  • 위 그림을 보다시피 GBN과는 다르게 loss pkt에 대해서만 retransmission이 일어나고 있음

Selective Repeat: a dillema

⇒ Window’s maximize size : sequence number - 1


RDT : Interactive communication status

  • Stop and Wait → half-duplex
  • Go Back N → full-duplex
  • Selective Repeat → full-duplex

0개의 댓글