- ACK, NAK가 만약 데이터 전송 중 손상이 된다면, 재전송이 되는 특성(ARQ)상 중복 패킷이 발생할 수 있다.
- 간단한 해결책으로 데이터 패킷에 새로운 필드 ‘순서 번호’를 추가하는 방식이다. → rdt 2.1

❇️ 정상적으로 송신할 때의 일련의 과정
초기 상태
- 송신자: 상태 0 (Sequence Number 0)
- 수신자: 상태 0 (Sequence Number 0)
데이터 전송 과정
- 송신자가 데이터 전송:
- 송신자가 순서 번호 0을 가진 데이터 패킷을 보냅니다.
- 송신자는 ACK/NAK를 기다리는 상태가 됩니다.
- 수신자가 데이터 수신:
- 수신자가 순서 번호 0을 가진 패킷을 수신합니다.
- 수신자가 패킷의 오류를 검사합니다. (여기서는 오류가 없다고 가정)
- 수신자는 데이터를 상위 계층에 전달하고, ACK(순서 번호 0)를 송신자에게 보냅니다.
- 수신자는 상태를 1로 변경합니다.
- 송신자가 ACK 수신:
- 송신자가 수신자로부터 ACK(순서 번호 0)를 수신합니다.
- 송신자는 상태를 1로 변경합니다.
다음 데이터 전송 과정
- 송신자가 데이터 전송:
- 송신자가 순서 번호 1을 가진 데이터 패킷을 보냅니다.
- 송신자는 ACK/NAK를 기다리는 상태가 됩니다.
- 수신자가 데이터 수신:
- 수신자가 순서 번호 1을 가진 패킷을 수신합니다.
- 수신자가 패킷의 오류를 검사합니다. (여기서는 오류가 없다고 가정)
- 수신자는 데이터를 상위 계층에 전달하고, ACK(순서 번호 1)를 송신자에게 보냅니다.
- 수신자는 상태를 0으로 변경합니다.
- 송신자가 ACK 수신:
- 송신자가 수신자로부터 ACK(순서 번호 1)를 수신합니다.
- 송신자는 상태를 0으로 변경합니다.
요약
- 송신자:
- 상태 0에서 순서 번호 0의 데이터 패킷을 보냄
- ACK(순서 번호 0)를 수신하고 상태를 1로 변경
- 상태 1에서 순서 번호 1의 데이터 패킷을 보냄
- ACK(순서 번호 1)를 수신하고 상태를 0으로 변경
- 수신자:
- 상태 0에서 순서 번호 0의 데이터 패킷을 수신
- ACK(순서 번호 0)를 보내고 상태를 1로 변경
- 상태 1에서 순서 번호 1의 데이터 패킷을 수신
- ACK(순서 번호 1)를 보내고 상태를 0으로 변경