``sender'' SendNext = 0; Get packet to send from higher layer do { TransmissionTime = now; Send Frame number ``SendNext'' do { nothing } until ( ack is received or now > TransmissionTime + TimeOut ) if (an ack was received) if Ack.SendNext > SendNext SendNext = Ack.SendNext Get packet to send from higher layer } while ( 1 + 1 == 2 ) ``receiver'' Receivenext = 0; do { do { nothing } until ( packet is received ) If ( packet was intact && packet.num = ReceiveNext ) deliver packet to higher layer ReceiveNext ++ ; Send an ack containing ReceiveNext as ``SendNext'' } while ( 1 == 1 )