same functionality as rdt2.1.

However, we only use ACKs.

Instead of NAK, receiver sends ACK for last pkt received & checksummed, including the sequence number.

ACK corrupted -> resend pkt1 -> duplicate detected -> send ACK1

PKT corrupted -> send ACK0 again -> received ACK0 (Oh previous ack received!) -> resend pkt1

Duplicate ACK at sender results in retransmitting the current pkt.