네트워크

신뢰적인 데이터 전송 프로토콜 I: RDT 1.0, RDT 2.0

knxwledge 2025. 1. 15. 17:09

*이 글은 Computer Networking: A Top-Down Approach, 7th Edition을 참고하여 작성하였다.

 

개요

 

TCP는 신뢰적인 데이터 전송 프로토콜(Reliable Data Transfer Protocol)이다. RDT를 사용해 전송되는 모든 패킷은 손상이 되지 않고, 반드시 전송이 되고, 순서가 바뀌지 않는다. 이 글에서는 RDT의 작동원리를 알아본다.

 

계층 사이 데이터/패킷의 이동

 

계층 사이에서 데이터 혹은 패킷이 이동하는 것을 다음과 같이 함수로 표현한다.

  • rdt_send(arg): 송신측의 상위 계층에서 RDT에 패킷(arg)을 보낸다.
  • udt_send(arg): 송신측의 RDT가 하위 계층의 UDT를 사용하여 패킷을 보낸다. 
  • rdt_rcv(arg): 수신측의 하위 계층에서 RDT로 패킷을 올려보낸다.
  • deliver_data(arg): 송신측의 RDT가 상위 계층에 데이터를 전송한다.

하위 계층을 UDT라고 하는 이유는 하위 계층에서의 통신은 비신뢰적일 수 있기 때문이다. 실제로 IP는 비신뢰적인 통신 방식이다.

 

위 내용을 그림으로 표현하면 다음과 같다.

 

Finite State Machine (FSM)

 

RDT의 작동 원리를 FSM의 형식을 빌려서 설명할 것이다. 

 

FSM 다이어그램의 요소는 다음과 같다.

  • 원: 현재 상태를 나타낸다.
  • 화살표: 상태의 변화를 나타낸다.
  • 이벤트:  RDT에게 발생하는 일이다. 능동적인 행위가 아니다. 가로선 위에 쓴다.
  • 액션: 이벤트에 대한 반응으로 일어나는 행위다. 가로선 아래에 쓴다.
RDT 1.0: 완전히 신뢰적인 하위 계층 통신

 

먼저 하위 계층의 통신이 완전히 신뢰적이라고 가정한다. 그 때 RDT는 다음과 같이 작동한다.

그림에서 점선 화살표는 처음 통신을 시작할 때의 상을 말한다.

 

RDT 2.0: Bit Error가 있는 채널

 

다음으로 통신 중 패킷이 손상될 수 있는 경우를 알아본다. 패킷의 손실이나 순서 뒤바뀜은 일어나지 않는다고 가정한다.

이 경우 송신측에서는 패킷에 checksum을 넣어 보낸다. 수신측에서는 checksum을 확인한 뒤, 패킷이 손상되지 않았다고 판단하면 ACK 응답을 보내고, 손상되었다고 판단하면 NAK 응답을 보낸다. 송신측에서는 ACK 응답이 오면 다음 데이터를 전송할 준비를 하고, NAK 응답이 오면 전에 보냈던 패킷을 다시 보낸다.

 

RDT 2.0에는 ACK, NAK 패킷이 손상되는 경우에 대한 고려가 없고, 중복 패킷 확인 기능도 없다. 이에 대한 내용은 다음 블로그 글에서 다룰 것이다.