``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 )