해당 포스팅은 한양대학교 이석복 교수님의 컴퓨터네트워크 강의를 정리한 글입니다.
http://www.kocw.net/home/search/kemView.do?kemId=1169634
1. Principles of Reliable Data Transfer
- unreliable하다는 것은 Message error또는 Message lose가 있는 것이다.
1) channel with packet errors (no lose)
- Error detection (에러가 있는지 없는지 우선 판단한다. checksum bits를 사용)
- Feedback (실제로 에러가 있었다면 피드백이 필요하다.)
Acknowledgements (ACKs): 제대로 받았다고 알려주는 것
Negative acknowledgements (NAKs): 에러가 있다고 알려주는 것
- Retransmission
sender는 NAK를 받으면 재전송한다.

- 위 그림처럼 에러를 발견하고 NAKs를 주면 같은 packet를 retransmission한다.
- 이때, receiver측에서는 중복인지 아닌지 어떻게 알 수 있을 것인가?
-> Sequence Number
2) Handling Duplicate Packets
- sender는
sequence number를 각 packet에 추가한다.
- Sender는 현재 packet을 ACK/NAK여부에 따라 재전송한다.
- Receiver는 duplicate packet을 버린다.

packet error를 판단하는 매커니즘은
- Error detection, Feedback, Retransmission, Sequence#
3) NAK-free protocol
- ACKs만 사용하는 프로토콜이다.
- NAK대신, 가장 마지막으로 받아들인 올바른 packet에 대한 ACK를 보낸다.
4) Packet lose
- Packet lose의 경우에는 어떻게 처리할 수 있을까?
-> Timer
- sender는
reasonable한 시간동안 ACK를 기다린다.
- 그래도 오지 않는다면, retransmission

현재 예시는 packet 통신 과정에서 기다리지만, 실제로는 pipelined protocol로 이루어 진다. (한꺼번에 주고 받는 과정)
: go-Back-N, selective repeat
