[네트워크]Reliable data transfer(rdt1.0, rdt2.0, rdt2.1, rdt2.2, rdt3.0)란?

2022. 10. 21. 01:21·Network

Reliable data transfer(rdt) 가 뭔가요?

먼저, RDT는 Reliable Data Transfer의 약어로 신뢰성 있는 데이터 전송을 의미합니다. 

이는 데이터를 전송하는 과정에서 손실, 중복, 순서 오류 등이 발생할 수 있는 불안정한 네트워크 환경에서도 안정적으로 데이터를 전송하기 위한 기술입니다.

 

  • TCP는 상위 계층에서 사용되는 프로토콜로, 신뢰성 있는 데이터 전송을 보장하기 위해 설계되었습니다.
  • 하지만, 하위 계층에서는 데이터 전송에 불안정한 요소가 존재하기 때문에 TCP와 같은 신뢰성 있는 프로토콜이 제공되지 않습니다.
  • 따라서, 전송 계층에서는 RDT를 이용하여 하위 계층의 불안정성을 보완하고, 신뢰성 있는 데이터 전송을 보장합니다

rdt example

위 그림에서 파란부분이 송신측이고 초록색 부분이 수신측입니다.

위쪽 빨간색 선은 위쪽은 상위계층이고,

아래쪽 빨간색 선의 아래쪽은 하위계층 입니다

 

송신

상위 계층에서 보내려는 데이터는 rdt_send() 함수를 호출해서 RDT 프로토콜에 맞게 처리된 후,

 udt_send() 함수를 호출하여 하위 계층으로 전송됩니다.

 

수신

하위 계층에서 받은 패킷은 RDT 프로토콜에서 처리된 후, 상위 계층으로 전달됩니다. 

이 때, RDT 프로토콜에서는 데이터의 순서가 맞지 않거나 손실된 데이터가 있는 경우, 

이를 복원하고 상위 계층으로 전달하기 위해 deliver_data() 함수를 호출합니다.


 

rdt1.0: reliable transfer over a reliable channel

rdt1.0 

완벽하게 신뢰할수 있는 경우

Bit errors 나 loss of packets 도 없다

그래서 state가 하나 밖에 존재하지 않는다

송신

상위 계층에서 데이터를 보내면 rdt_send()를 호출한다

make_pkt()함수로 패킷을 만든다

udt_send()로 패킷을 보낸다

수신

하위계층에서 패킷을 보내면  rdt_rcv()함수를 호출한다

extract()함수로 패킷을 추출한다

deliver_data()함수로 상위 계층으로 데이터를 보낸다

 

rdt2.0: channel with bit errors

rdt2.0

여기서는 bit에러가 발생할 경우

bit error처리를 위해서 아래 두개의 메시지를 도입한다

ACKS(Acknowledgements) : 수신쪽이 송신쪽에 패킷 수신에 문제가 없다고 말하는 신호

NAKS(Negative acknowledgements) : 수신쪽이 송신쪽에 패킷 수신에 문제가 있다고 말하는 신호

 

송신쪽은 NAK를 받으면 재송신(retransmit)한다

 

rdt2.0는 아래의 그림과 같이 표현할 수 있다

보기에는 복잡해보이지만 천천히 보면 복잡하지 않다

rdt2.0 example

rdt는 2가지 경우로 나누어 볼 수 있다

에러가 없는 경우와 에러가 있는 경우다

 

에러가 없는 경우 부터 보면

에러가 없는 경우

송신

상위 계층에서 데이터를 받아서 udt_send()함수로 패킷을 보낸다

수신

패킷을 받는다

이상이 없기 때문에 송신측에 ACK 를 보낸다

송신측에서 ACK를 받고 종료

 

 

에러가 있는 경우는 복잡해 보일 수 있다

하지만 재송신을 위해서 NAK를 송신측에 보내는 과정만 추가된다

에러가 있는 경우

송신

상위 계층에서 데이터를 받아서 udt_send()함수로 패킷을 보낸다

수신

패킷을 받는다

이상이 있기 때문에 NAK을 송신측에 보내고 기다린다

송신측에서 NAK신호를 받으면 패킷을 재전송한다

수신측에서 패킷을 받고 이상이 없으면

송신측에 ACK 를 보낸다

송신측에서 ACK를 받고 종료

 

 

rdt2.1: sender, handles garbled ACK/NAKs

rdt2.1에서는 시퀀스 넘버(seq#) 0과 1이 나타난다

수신된 ACK/ NAK 가 손상되었는지 확인한다

간단하게 설명하면

 

0번 패킷에 오류가 있다면 NAK 0 신호를 보내고 0번 패킷을 기다린다

0번 패킷에 오류가 없다면 ACK 0 신호를 보내고 1번 패킷을 기다린다

1번 패킷에 오류가 있다면 NAK 1 신호를 보내고 1번 패킷을 기다린다

1번 패킷에 오류가 없다면 ACK 1 신호를 보내고 1번 패킷을 기다린다

 

rdt2.2: a NAK - free protocol

기능적으로 rdt2.1과 같지만 ACKs만 사용한다

 

중복되는 ACK신호를 받으면 패킷을 재전송 한다

송신측에서 0번 패킷을 전송하고 ACK 0번을 받고

1번패킷을 보내고 수신측에 오류를 확인하면 ACK 1이 아닌 ACK 0을 다시 보낸다

송신측을 ACK0을 받고 오류가 있음을 알고 다시 1번패킷을 보낸다

 


rdt3.0: Channels with errors and loss

위에 rdt1.0,rdt2.0,rdt2.1,rdt2.2과 같은 rdt들의 가장 큰 결함은 패킷의 유실을 인지하지 못한다는 점이다

패킷을 보내고 신호를 기다리지만 신호가 오지않으면 다음패킷을 보낼 수 없다

 

그래서 송신측은 ACK를 "합리적인(reasonable)" 시간동안 기다리고 

이 시간동안 도착하지 않을 경우 재전송한다

 

그림 (a)는 손실이 없을 경우다

 

그림 (b)는 패킷 손실이 있을 경우다

pkt1이 손실이 생겼고, 그로인해 ACK 1을 받지못해

송신측에서 다시 pkt1을 보내는 모습이다



 

그림 (c) 를 보면 ACK 손실이 발생하고

송신측에서 다시 pkt1을 보낸다

이때 중복이 발생하는데 이경우는 seq#로 패킷 1이 버려지면서 해결이된다

 

그림 (d) 는 신호전달이 지연되는 경우인데

만약 ACK1이 매우 느리게 전송이 될 경우

이때부터 패킷과 ACK신호가 중복되는 현상이 발생하는데

rdt3.0의 가장 큰 문제점이기도 하다

또한 rdt3.0은 데이터를 하나 보내고 ACK 신호를 기다리기까지 다음 데이터를 보내지 않아서 성능이 떨어진다

 

 

 

참조
https://code-lab1.tistory.com/26

 

[네트워크] Reliable Data Transfer - rdt 1.0/2.0/2.1/2.2/3.0 | RDT란? | FSM 이란?

RDT(Reliable Data Transfer)란? RDT는 신뢰성 있는 데이터 교환을 의미한다. 즉 송/수신하는 데이터가 오류 없이 온전히 전송되는 것을 뜻한다. Transport Layer(전송계층)에서는 신뢰성 있는 데이터 교환을

code-lab1.tistory.com

 

저작자표시 (새창열림)
'Network' 카테고리의 다른 글
  • [네트워크]트렌스포트 계층(Transport Layer) - 5
Jelong
Jelong
커스텀 웹: https://jaehong-park.com Github: https://github.com/qkrwoghd04
  • Jelong
    24/7 Developer's Note
    Jelong
  • 전체
    오늘
    어제
    • 분류 전체보기
      • Software Engineering
      • Ubuntu
      • Network
      • JavaScript
      • Web
      • Interaction Design
      • React Native
      • React
      • Algorithm
      • Java
      • Database design
      • IT Trend
      • TroubleShooting
      • AWS
      • Interview
      • LG CNS AM CAMP 1기
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    React
    알고리즘
    티스토리챌린지
    미니넷
    mininet
    ChatGPT
    typescript
    자바
    알고리즘 분석
    JS
    이진트리
    prototyping
    데이터 구조
    GPT-4
    javascript
    화이트 박스 테스트
    소프트웨어 공학
    블랙 박스 테스트
    AWS
    expo
    오블완
    generic
    BST
    css
    Queues
    frontend
    html
    자바스크립트
    java
    heap
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
Jelong
[네트워크]Reliable data transfer(rdt1.0, rdt2.0, rdt2.1, rdt2.2, rdt3.0)란?
상단으로

티스토리툴바