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,19The 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: