RDT 1.0 신뢰적 채널 동작 방식 정리
rdt 1.0의 신뢰적 채널 모델입니다. 완전히 신뢰적인 하위 채널 가정, sender/receiver 상태, ACK/NAK/checksum이 필요 없는 이유를 정리했습니다.
RDT 1.0 신뢰적 채널 동작 방식 정리
rdt 1.0은 신뢰적 데이터 전송 원리에서 가장 단순한 출발점이다. 하위 채널이 완전히 신뢰적이라고 가정하므로 bit error, packet loss, packet reorder, duplicate packet을 고려하지 않는다. 즉 sender가 packet을 보내면 receiver가 반드시 그대로 받는다고 보는 모델이다.
실제 네트워크를 설명하기에는 너무 단순하지만, 이후 rdt 2.0, rdt 2.1, rdt 2.2, rdt 3.0이 왜 필요한지 이해하려면 이 기본 모델을 먼저 잡아야 한다. rdt 1.0에서는 오류 처리가 없기 때문에 sender와 receiver의 상태도 매우 단순하다.
가정
| 항목 | rdt 1.0의 가정 |
|---|---|
| bit error | 발생하지 않는다. |
| packet loss | 발생하지 않는다. |
| packet reorder | 고려하지 않는다. packet이 하나씩 순서대로 전달된다고 본다. |
| ACK/NAK | 필요하지 않다. |
| sequence number | 필요하지 않다. |
| timer | 필요하지 않다. |
Sender 상태
sender는 application에서 data를 받으면 packet을 만들고 하위 계층으로 넘긴다. 전송 실패가 없다고 가정하기 때문에 ACK를 기다리지 않고 다시 application data를 기다리는 상태로 돌아간다.
WAIT_DATA
event:
rdt_send(data)
action:
packet = make_pkt(data)
udt_send(packet)
next:
WAIT_DATAReceiver 상태
receiver는 하위 계층에서 packet을 받으면 data를 꺼내 application에 전달한다. packet이 손상되거나 사라지지 않는다고 보기 때문에 checksum 검사, ACK, NAK, 재전송 요청이 없다.
WAIT_PACKET
event:
rdt_rcv(packet)
action:
extract(packet, data)
deliver_data(data)
next:
WAIT_PACKET전체 흐름
- application이 sender 측 transport layer에 data를 전달한다.
- sender의
rdt_send(data)이벤트가 발생한다. - sender가
make_pkt(data)로 packet을 만든다. - sender가
udt_send(packet)으로 하위 채널에 packet을 넘긴다. - receiver의
rdt_rcv(packet)이벤트가 발생한다. - receiver가
extract(packet, data)로 data를 꺼낸다. - receiver가
deliver_data(data)로 application에 data를 전달한다.
왜 ACK가 필요 없는가
ACK는 sender가 "내 packet이 receiver에게 정상적으로 도착했는지"를 알기 위해 필요하다. 하지만 rdt 1.0에서는 하위 채널이 완전히 신뢰적이라고 가정하므로 sender가 확인할 필요가 없다. packet이 손상되지 않고, 유실되지 않고, 순서도 바뀌지 않는다면 ACK는 불필요한 overhead가 된다.
왜 checksum이 필요 없는가
checksum은 bit error를 감지하기 위한 값이다. rdt 1.0은 bit error가 없다고 가정하므로 checksum도 필요하지 않다. 이후 rdt 2.0에서 bit error가 가능한 환경으로 가정이 바뀌면서 checksum이 등장한다.
rdt 1.0의 의미
rdt 1.0은 실전 프로토콜이라기보다 비교 기준이다. 이 모델에서는 sender와 receiver가 할 일이 거의 없다. 오류 가능성이 하나씩 추가될 때마다 어떤 기능이 필요한지 확인하기 위해 출발점을 단순하게 잡은 것이다.
- bit error가 생기면 checksum과 ACK/NAK가 필요해진다. 이것이
rdt 2.0이다. - ACK/NAK가 손상될 수 있으면 sequence number가 필요해진다. 이것이
rdt 2.1이다. - NAK를 없애고 ACK만 쓰는 방식으로 단순화한 것이
rdt 2.2다. - packet loss까지 고려하면 timer와 timeout 재전송이 필요하다. 이것이
rdt 3.0이다.
요약
rdt 1.0은 하위 채널이 완전히 신뢰적이라고 가정한다.- sender는 data를 packet으로 만들어 보내기만 한다.
- receiver는 packet에서 data를 꺼내 application에 전달하기만 한다.
- checksum, ACK, NAK, sequence number, timer가 모두 필요 없다.
- 이 모델은 이후 신뢰적 전송 기능이 왜 추가되는지 설명하기 위한 기준점이다.