CMSC 417-F01 |
EXAM 1 SOLUTION |
Fall 1999 |
send time sst cw rtt packets
0 4 1 10 0
10 4 2 20 1,2
30 4 4 40 3,4,5,6
70 4 5 timeout 7,8,9,10,11 (11 lost)
270 3 1 10 11
280 3 2 20 12,13
300 3 4 40 14,15,16,17
340 3 5 20 18,19
The file transfer is complete when packet 19 is acked.
From above, this happens at time 360 ms.
Also, 8 windows are sent.
GRADING:
send time sst cw rtt packets
0 4 1 10 0
10 4 2 20 1,2
30 4 4 40 3,4,5,6
70 4 5 timeout 7,8,9,10,11 (11 lost)
270 3 1 10 11
280 3 2 20 12,13
300 3 4 40 14,15,16,17
340 3 5 timeout 18,19,20,21,22 (22 lost)
540 3 1 10 22
550 3 2 20 23,24
...
Thus cw evolves in "saw-tooth" fashion,
cycling through 1,2,4,5.
Each "saw-tooth" cycle lasts 270 ms (= 540-270)
and transfers 11 packets (12 packets are sent but 1 is lost).
So time required is
F*270/11 ms
(ignoring initial and final transients).
GRADING:
Receive(D, data, len, cj) {
// if (cj in receive window)
int tmp := (cj-nr) mod N; |
if (0 <= tmp <= rw-1) { | 4 points
// store data in rbuff locations starting at
// nr-nc+tmp and stopping at nr-nc+tmp+len-1
// (end of data) or nr-nc+rw-1 (end of window),
// whichever is smaller
for i := 0 to min(rw,len)-1 { |
rbuff[nr-nc+tmp+i].data := data[i]; |
rbuff[nr-nc+tmp+i].valid := true; | 3 points
} |
// note: no need to update rbuff[j].data
// if rbuff[j].valid is already true.
// advance nr as much as possible
// decrementing rw correspondingly
while ( rbuff[nr-nc].valid and rw>0 ) { |
nr := nr+1; | 3 points
rw := rw-1; |
} |
}
}
GRADING:
na..ns sw nr..nr+rw-1
0..0 W 0..W-1
Source sends 0,1,...,W-1, Sink receives all
0..W-1 W W..2W-1
Sink receives 0 (either duplicate or retransmit)
and treats it as 2W-1 (because 2W-1 mod N is 0).
GRADING: