computer networking A top-down approach의 레퍼런스를 활용하였습니다.
전단계보다 상태가 두배씩 많아졌다. 프로토콜 상태가 현재 (송신자에 의해서) 전송되고 있거나, 아니면(수신자가) 기다리고 있는 패킷이 순서번호 0 또는 1을 가져야 하는지 반영해야하기 때문이다. 0번 패킷이 송신되고 있거나 기다리고 있는 상태에서의 동작은 1번 패킷이 송신되고 있거나 기다리는 상태의 미러 이미지이다. 즉, 단지 순서번호의 차이만 있을 뿐이다. 프로토콜 rdt2.1은 수신자로부터 송신자까지의 긍정 확인 응답과 부정 확인응답을 모두 포함한다. 순서가 바뀐 패킷이 수신되면, 수신자는 이미 전에 수신한 패킷에 대한 긍정 확인응답을 전송한다. 손상된 패킷이 수신되면, 수신자는 부정 확인 응답을 전송한다. NAK를 송신하는 것 대신에 가장 최근에 정확하게 수신된 패킷에 대해 ACK를 송신함으써, NAK를 송신한 것과 같은 효과를 얻을 수 있다. 같은 패킷에 대해 2개의 ACK를 수신한 송신자는 수신자가 두번 ACK한 패킷의 다음 패킷을 정확하게 슈신하지 못했다는 것을 안다. 비트오류를 갖는 채널을 위한 NAK없는 신뢰적인 데이터 전송 프로토콜은 rdt2.2이다.
이 둘 사이의 차이는 수신자가 반드시 ACK메시지에 의해서 확인 응답하는 패킷의 순서번호를 포함해야한다는 것이다. 이것은 수신자의 FSM의 make_pkt()에 ACK, 1인 인수를 포함하는 것에 의해서 수행된다. 그리고 송신자는 수신된 ACK메시지에 의해 확읜응답된 패킷의 순서번호를 반드시 검사해야만한다.
비트가 손상되는 것 외에도 인터넷을 포함하는 오늘날 컴퓨터 네트워크처럼 하위채널이 패킷을 손실하는 경우를 생각해보자. 여기서는 송신자에게 손실된 패킷의 검출과 회복을 책임지게 할 것이다. 송신자가 데이터패킷을 전송하고 패킷 또는 수신자의 패킷에 대한 ACK를 손실했다고 가정하자. 어느 경우에나 송신자에게는 어떠한 응답도 없다. 만약 송신자가 패킷을 잃어버렸다는 것을 확신할 정도로 충분한 시간을 기다릴 수 만 있다면, 데이터 패킷은 간단하게 재전송될 수 있다. 그러나 송신자가 도대체 얼마나 기다려야할까? 송신자는 적어도 송신자와 수신자 사이의 왕복 시간 지연에 수신측에서 패킷을 처리하는 데 필요한 시간을 더한만큼 기다린다. 시간 기반의 재전송 메커니즘을 구현하기 위햐소 주어진 시간이 경과된 후에 송신자 인터럽트할수있는 카운트다운 타이머가 필요하다.