신뢰적인 데이터 전송(Reliable data transfer, RDT)
- 통신을 하면 패킷을 받지 못하거나, 깨지는 경우가 발생한다.
- 이런 경우를 예방하거나 조치를 취하여 신뢰적으로 data를 전송하는 개념이다.
- ex1) Segment를 받지 못했거나 깨진 경우 : 다시 달라고 요청
- ex2) 쪼개져 보내진 파일의 순서가 바뀌는 것을 막기 위해 sequence number을 붙임
함수 정리
- rdt_send() : App이 하위 rdt(TCP)에 data를 전달할 때 호출
- udt_send() : rdt가 하위 udt(비신뢰적인 하위 채널)에 data를 전달할 때 호출
- rdt_rcv() : 상위 rdt에 data를 전달할 때 호출
- deliver_data() : rdt가 상위 layer에 data를 전달할 때 호출
![](https://velog.velcdn.com/images/jsgcom/post/02355801-7dd9-4e15-af79-78ca18b910c2/image.png)
FSM
- 상태(state)를 기반으로 동작을 제어하는 방식을 구현하기 위한 디자인 패턴
- 모든 일은 state, event, action으로 구분.
- state : 나의 현재 상태
- event : 외부에서 나에게 영향을 주는 것
- action : event 발생 시 내가 취하는 행동
![](https://velog.velcdn.com/images/jsgcom/post/7ea96dc3-22fc-4c43-bcfc-2990a1ad2eb3/image.png)
# rdt의 과정을 송신자 측면과 수신자 측면으로 나누어 표현할 수 있는데, 이 때 FSM으로 표현한다.