image/svg+xml
Drawing
Drawing
Drawing
Drawing
Wait
Drawing
Drawing
Drawing
l
State variables
u
base
: sequence number of oldest data segment
u
seq
: first available sequence number
u
W
: size of sending window
Drawing
Drawing
Drawing
Group
Drawing
Drawing
Drawing
Drawing
All corruptedsegments arediscarded in all states
All corruptedsegments arediscarded in all states
Recvd(C(OK,t,CRC)) and CRCOK(C(OK,t,CRC))remove acked seqs from buffer;unpack = (t+1) % maxseq;if (unpack==seq) { cancel_timer(); } else{ restart_timer(); }
timer expires for all (i, SDU) in buffer{ send(D(i,SDU,CRC)); }restart_timer();
Data.req(SDU) size(buffer) < w if (seq==unack) { start_timer ; }insert_in_buffer(seq, SDU);send(D(seq,SDU,CRC));seq=(seq+1) % maxseq;