0
play

!"!#$%$#&'($)**$+$,-..$/0))$ - PowerPoint PPT Presentation

!"!#$%$#&'($)**$+$,-..$/0))$ 1234$5.6745$8923$:;9254$-<7$=255>$ !"#$%&'()*'&+"(,-./ >$? @A $!76@62<$ ! !"#$%&'( ! B9-<5C29@$"-D49$EFG(%B#(H$ ! )*+#,*-.(/(&$$012#%( ! !3"-$%&'( !


  1. rdt_send(): I-..47$8923$-U2N4>$ deliver_data(): I-..47$UD$ rdt $@2$74.6N49$7-@-$@2$-CCk E4kKk>$UD$-CCkHk$(-5547$7-@-$@2$$ 74.6N49$@2$94I46N49$;CC49$.-D49 54<7$ 94I46N4$ 5674 5674 udt_send(): I-..47$UD$97@>$ rdt_rcv(): I-..47$YA4<$C-IJ4@$ -996N45$2<$9INT5674$28$IA-<<4. @2$@9-<5849$C-IJ4@$2N49$$ ;<94.6-U.4$IA-<<4.$@2$94I46N49 /`$

  2. ! BA4$C.-<[$ C2>-#+#26&::'( 74N4.2C$54<749$%$94I46N49$56745$28$ -#:0&9:#(%&6&(6-&2$I#-(=-*6*>*:(<-%6?J(&(P>60*2&:(=-*6*>*:( ! !E8(0$($0+0:&-(6*(LH!(9"6(6**(>*+=:#5(6*(%#$>-09#(&::(&6(*2>#( ! #2<56749$2<.D$;<67694I@62<-.$7-@-$@9-<5849$ ! U;@$I2<@92.$6<82$Y6..$l2Y$2<$U2@A$7694I@62<5^$ ! F54$ P206#($6&6#(+&>302#$(<QKR?(( @2$5C4I68D$54<749>$ 94I46N49$ 4N4<@$I-;56<K$5@-@4$@9-<56@62< -I@62<5$@-J4<$2<$5@-@4$@9-<56@62< K6&6#O $gA4<$6<$@A65$ 5@-@4$ 4N4<@ 5@-@4$ O5@-@4P>$$<4a@$5@-@4$ )$ -I@62<5 /$ ;<6h;4.D$74@4936<47$ UD$<4a@$4N4<@$ E;CC49I-54$"-3U7-$d$43C@D$54@H$ !" V0$

  3. ! F<749.D6<K$IA-<<4.$C4984I@.D$94.6-U.4$ ! X2$U6@$499295$ ! X2$.255$28$C-IJ4@5$ ! 14C-9-@4$,1'5$829$54<749>$94I46N49[$ ! 14<749$54<75$7-@-$6<@2$;<749.D6<K$IA-<<4.$ ! =4I46N49$94-75$7-@-$8923$;<749.D6<K$IA-<<4.$ rdt_send(data) rdt_rcv(packet) Wait for Wait for call from call from extract (packet,data) packet = make_pkt(data) below above deliver_data(data) udt_send(packet) 54<749$ 94I46N49$ V)$

  4. ! F<749.D6<K$IA-<<4.$3-D$ S0=(906$( 6<$C-IJ4@$ ! #A4IJ5;3$@2$74@4I@$U6@$499295$ ! Z;@>$A2Y$72$Y4$94I2N49$8923$499295R$ ! T>.2*,:#%1#+#26$(<TEU$? [$94I46N49$4aC.6I6@.D$@4..5$ 54<749$@A-@$C-IJ4@$94I46N47$&:$ ! 4#1&60M#(&>.2*,:#%1#+#26$(<4TU$?O( 94I46N49$4aC.6I6@.D$ @4..5$54<749$@A-@$C-IJ4@$A-7$499295$ ! 14<749$94@9-<536@5$C-IJ4@$2<$94I46C@$28$XM:$ ! X4Y$34IA-<6535$6<$ rdt2.0 $EU4D2<7$ rdt1.0 H[$ ! !9929$74@4I@62<$ ! =4I46N49$8447U-IJ$ ! #2<@92.$35K5$EM#:>XM:H$K2$8923$94I46N49$@2$54<749$ V/$

  5. rdt_send(data) snkpkt = make_pkt(data, checksum) udt_send(sndpkt) 94I46N49$ rdt_rcv(rcvpkt) && isNAK(rcvpkt) Wait for Wait for rdt_rcv(rcvpkt) && call from ACK or udt_send corrupt(rcvpkt) above NAK (sndpkt) udt_send(NAK) rdt_rcv(rcvpkt) && isACK(rcvpkt) Wait for !" call from below 54<749$ rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) extract(rcvpkt,data) deliver_data(data) udt_send(ACK) VV$

  6. rdt_send(data) snkpkt = make_pkt(data, checksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && isNAK(rcvpkt) Wait for Wait for rdt_rcv(rcvpkt) && call from ACK or udt_send corrupt(rcvpkt) above NAK (sndpkt) udt_send(NAK) rdt_rcv(rcvpkt) && isACK(rcvpkt) Wait for call from !" below rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) extract(rcvpkt,data) deliver_data(data) udt_send(ACK) VW$

  7. rdt_send(data) snkpkt = make_pkt(data, checksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && isNAK(rcvpkt) Wait for Wait for rdt_rcv(rcvpkt) && call from ACK or udt_send corrupt(rcvpkt) above NAK (sndpkt) udt_send(NAK) rdt_rcv(rcvpkt) && isACK(rcvpkt) Wait for call from !" below rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) extract(rcvpkt,data) deliver_data(data) udt_send(ACK) V?$

  8. ! gA-@$A-CC4<5$68$ TEUF ! S-<7.6<K$7;C.6I-@45[$$ 4TU(>*--"=6#% R$ ! 14<749$94@9-<536@5$I;994<@$ C-IJ4@$68$M#:%XM:$K-9U.47$ ! 14<749$7245<i@$J<2Y$ ! 14<749$-775$ $#V"#2>#( YA-@$A-CC4<47$-@$ 2"+9#- $@2$4-IA$C-IJ4@$$ 94I46N49^$ ! =4I46N49$765I-975$E7245<i@$ ! #-<i@$m;5@$94@9-<536@[$ 74.6N49H$7;C.6I-@4$C-IJ4@$ 94I46N49$36KA@$K4@$ 7;C.6I-@4$7-@-$ ! K6*=(&2%(,&06(%#$012( ! 14<749$54<75$)$C-IJ4@>$ @A4<$Y-6@5$829$94I46N49$ 945C2<54$ V\$

  9. K#V"#2>#(W@( rdt_send(data) sndpkt = make_pkt(0, data, checksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) || Wait for Wait for isNAK(rcvpkt) ) ACK or call 0 from udt_send(sndpkt) NAK 0 above rdt_rcv(rcvpkt) rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && notcorrupt(rcvpkt) && isACK(rcvpkt) && isACK(rcvpkt) !" !" Wait for Wait for ACK or call 1 from rdt_rcv(rcvpkt) && NAK 1 above ( corrupt(rcvpkt) || rdt_send(data) isNAK(rcvpkt) ) sndpkt = make_pkt(1, data, checksum) udt_send udt_send(sndpkt) (sndpkt) K#V"#2>#(W@( V*$

  10. rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && has_seq0(rcvpkt) extract(rcvpkt,data) deliver_data(data) sndpkt = make_pkt(ACK, chksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && (corrupt(rcvpkt) rdt_rcv(rcvpkt) && (corrupt(rcvpkt) sndpkt = make_pkt(NAK, chksum) sndpkt = make_pkt(NAK, chksum) udt_send(sndpkt) udt_send(sndpkt) Wait for Wait for 0 from 1 from rdt_rcv(rcvpkt) && rdt_rcv(rcvpkt) && below not corrupt(rcvpkt) && below not corrupt(rcvpkt) && has_seq1(rcvpkt) has_seq0(rcvpkt) sndpkt = make_pkt(ACK, chksum) sndpkt = make_pkt(ACK, chksum) udt_send(sndpkt) udt_send(sndpkt) rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && has_seq1(rcvpkt) extract(rcvpkt,data) deliver_data(data) sndpkt = make_pkt(ACK, chksum) udt_send(sndpkt) V_$

  11. K#2%#-O( L#>#0M#-O( ! 14h$f$-7747$@2$CJ@$ ! ';5@$IA4IJ$68$94I46N47$ ! BY2$54hk$fi5$E0>)H$Y6..$ C-IJ4@$65$7;C.6I-@4$ 5;nI4k$$ X3'Y( ! 1@-@4$6<76I-@45$YA4@A49$0$29$)$ 65$4aC4I@47$C-IJ4@$54h;4<I4$ ! ';5@$IA4IJ$68$94I46N47$ <;3U49$ M#:%XM:$I299;C@47$$ ! =4I46N49$I-<$ ."& $J<2Y$68$6@5$ ! BY6I4$-5$3-<D$5@-@45$ .-5@$M#:%XM:$94I46N47$&:$ ! 1@-@4$3;5@$O94343U49P$ -@$54<749$ YA4@A49$OI;994<@P$C-IJ4@$A-5$ 54h;4<I4$<;3U49$28$0$29$)$ V`$

  12. ! 1-34$ :%.1&-".20-&; $-5$97@/k)$ ! X2$XM:5^$ ! =4I46N49$6<5@4-7$54<75$M#:$829$.-5@$C-IJ4@$ 94I46N47$&:$ ! =4I46N49$3;5@$4aC.6I6@.D$6<I.;74$54h$f$28$C-IJ4@$ U46<K$M#:47$$ ! G;C.6I-@4$M#:$-@$54<749$945;.@5$6<$5-34$ -I@62<$-5$XM:$ ! =4@9-<536@$I;994<@$C-IJ4@$ W0$

  13. rdt_send(data) sndpkt = make_pkt(0, data, checksum) rdt_rcv(rcvpkt) && udt_send(sndpkt) ( corrupt(rcvpkt) || Wait for Wait for isACK(rcvpkt,1) ) ACK call 0 from 0 udt_send(sndpkt) above 54<749$,1'$ 89-K34<@$ rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) rdt_rcv(rcvpkt) && && isACK(rcvpkt,0) (corrupt(rcvpkt) || Wait for has_seq1(rcvpkt)) 94I46N49$,1'$ !" 0 from 89-K34<@$ udt_send(sndpkt) below rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && has_seq1(rcvpkt) extract(rcvpkt,data) deliver_data(data) sndpkt = make_pkt(ACK1, chksum) udt_send(sndpkt) W)$

  14. ! X4Y$-CC92-IA$ ! X4Y$-55;3C@62<$ ! 14<749$Y-6@5$O94-52<-U.4P$ ! F<749.D6<K$IA-<<4.$I-<$ -32;<@$28$@634$829$M#:$$ -.52$ :*$#(=&>.#6$(( ! =4@9-<536@5$68$<2$M#:$ E7-@-$ *-( M#:5H$ 94I46N47$6<$@A65$@634$ ! #A4IJ5;3>$54hk$f>$M#:5>$ ! L8$CJ@$E29$M#:H$65$m;5@$ 74.-D47$U;@$<2@$.25@[$ -<7$94@9-<5365562<5$Y6..$ ! =4@9-<5365562<$Y6..$U4$$ A4.C$U;@$-94$<2@$ 7;C.6I-@4>$U;@$54hk$fi5$52.N45$ 5;nI64<@$ @A65$C92U.43$ ! =4I46N49$3;5@$5C4I68D$54h$f$ 28$CJ@$U46<K$M#:47$ ! =4h;6945$I2;<@72Y<$@6349$ W/$

  15. rdt_send(data) rdt_rcv(rcvpkt) && sndpkt = make_pkt(0, data, checksum) ( corrupt(rcvpkt) || udt_send(sndpkt) isACK(rcvpkt,1) ) start_timer rdt_rcv(rcvpkt) !" Wait !" Wait for timeout for call 0 from udt_send(sndpkt) ACK0 above start_timer rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) rdt_rcv(rcvpkt) && isACK(rcvpkt,1) && notcorrupt(rcvpkt) && isACK(rcvpkt,0) stop_timer stop_timer Wait Wait for timeout for call 1 from udt_send(sndpkt) ACK1 above rdt_rcv(rcvpkt) start_timer !" rdt_send(data) rdt_rcv(rcvpkt) && sndpkt = make_pkt(1, data, checksum) ( corrupt(rcvpkt) || udt_send(sndpkt) isACK(rcvpkt,0) ) start_timer !" WV$

  16. WW$

  17. W?$

  18. ! 97@Vk0$Y29J5>$U;@$ =#-I*-+&2>#($602.$( ! ,29$)$eUC5$.6<J>$)?$35$C92Ck$74.-D>$_000$U6@$C-IJ4@[$ L 8000 bits <"+)0"./)-&)&2,'6)&")$%6=) $ d trans = R 8 microsecon ds = = $21,'&)"%&)".&")+-(') 9 10 bps ! F $54<749 [$;@6.6o-@62<$[$89-I@62<$28$@634$54<749$U;5D$54<76<K$ L / R . 008 U = 0.00027 = = sender 30.008 RTT + L / R microsec ! ):Z$C-IJ4@$4N49D$V0$354I$ ! ;;.7F$#>(63-*"13="6(*M#-(Z(N9=$(:02.( ! X4@Y29J$C92@2I2.$.636@5$;54$28$CAD56I-.$9452;9I45^$ W\$

  19. sender receiver first packet bit transmitted, t = 0 last packet bit transmitted, t=L / R first packet bit arrives RTT last packet bit arrives, send ACK ACK arrives, send next packet, t = RTT + L / R L / R . 008 U = 0.00027 = = sender 30.008 RTT + L / R microsec W*$

  20. 80=#:02021O( 54<749$-..2Y5$3;.@6C.4>$O6<Tl6KA@P>$D4@T@2TU4T -IJ<2Y.47K47$C-IJ4@5$ ! =-<K4$28$54h;4<I4$<;3U495$3;5@$U4$6<I94-547$ ! Z;c496<K$-@$54<749$-<7%29$94I46N49$ ! BY2$K4<496I$82935$28$C6C4.6<47$C92@2I2.5[$$ /">?21,>*)2.5)6'0'1&-@')('$'2&) W_$

  21. sender receiver first packet bit transmitted, t=0 last bit transmitted, t=L / R first packet bit arrives RTT last packet bit arrives, send ACK last bit of 2 nd packet arrives, send ACK last bit of 3 rd packet arrives, send ACK ACK arrives, send next packet, t = RTT + L / R L<I94-54$;@6.6o-@62<$ UD$-$8-I@29$28$V^$ 3 * L / R . 024 U = 0.0008 = = sender 30.008 RTT + L / R microsecon W`$

  22. NAD7TEUD4( KB[BE!C\B(LB8BT!( ! 14<749$ ! 14<749$ ! FC$@2$X$;<M#:47$CJ@5$6<$ ! FC$@2$X$;<M#:47$C-IJ4@5$6<$ C6C4.6<4$ C6C4.6<4$ ! =4I46N49$ ! =4I46N49$ ! &<.D$54<75$I;3;.-@6N4$M#:5$ ! M#:5$6<76N67;-.$CJ@5$ ! G245<i@$M#:$CJ@$68$@A494i5$-$ ! 14<749$ K-C$ ! 14<749$ ! '-6<@-6<5$@6349$829$4-IA$ ;<M#:47$CJ@$ ! S-5$@6349$829$2.745@$;<M#:47$ CJ@$ ! L8$@6349$4aC6945[$94@9-<536@$ 2<.D$;<M#:47$C-IJ4@$ ! L8$@6349$4aC6945[$94@9-<536@$-..$ ;<M#:47$C-IJ4@5$ ?0$

  23. ! JTU6@$54h;4<I4$f$6<$C-IJ4@$A4-749$ ! Og6<72YP$28$;C$@2$X>$I2<54I;@6N4$;<M#:47$CJ@5$-..2Y47$ ! M#:E<H[$M#:5$-..$CJ@5$;C$@2>$6<I.;76<K$54h$f$<$ ! =4849947$@2$-5$-$OI;3;.-@6N4$M#:P$ ! '-D$94I46N4$7;C.6I-@4$M#:5$ A6'')('1'-@'(B) ! B6349$829$2.745@$6<Tl6KA@$C-IJ4@$ ! @6342;@E<H[$94@9-<536@$C-IJ4@$<$ &2%(&::(3013#-( 54h$f$ C-IJ4@5$6<$Y6<72Y$ ?)$

  24. rdt_send(data) if (nextseqnum < base+N) { sndpkt[nextseqnum] = make_pkt(nextseqnum,data,chksum) udt_send(sndpkt[nextseqnum]) if (base == nextseqnum) start_timer nextseqnum++ } else !" refuse_data(data) base=1 nextseqnum=1 timeout start_timer Wait udt_send(sndpkt[base]) udt_send(sndpkt[base+1]) rdt_rcv(rcvpkt) " && corrupt(rcvpkt) udt_send(sndpkt[nextseqnum-1]) !" rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) base = getacknum(rcvpkt)+1 If (base == nextseqnum) stop_timer else start_timer ?/$

  25. default udt_send(sndpkt) rdt_rcv(rcvpkt) && notcurrupt(rcvpkt) && hasseqnum(rcvpkt,expectedseqnum) !" Wait extract(rcvpkt,data) expectedseqnum=1 deliver_data(data) sndpkt = sndpkt = make_pkt(expectedseqnum,ACK,chksum) make_pkt(expectedseqnum,ACK,chksum) udt_send(sndpkt) expectedseqnum++ ! M#:T2<.D[$-.Y-D5$54<7$M#:$829$I2994I@.DT94I46N47$CJ@$Y6@A$A6KA45@$ 1$2'"3," ( 54h$f$ ! '-D$K4<49-@4$7;C.6I-@4$M#:5$ ! X447$2<.D$94343U49$ expectedseqnum ! &;@T28T29749$CJ@[$$ ! G65I-97$E72<i@$U;c49H$Tp$<2$94I46N49$U;c496<K^$E947;I45$I23C.4a6@DH$ ! =4TM#:$CJ@$Y6@A$A6KA45@$6<T29749$54h$f$ ?V$

  26. ?W$

  27. ! =4I46N49$ -.5-@-5%200;) -IJ<2Y.47K45$-..$ I2994I@.D$94I46N47$C-IJ4@5$ ! Z;c495$C-IJ4@5>$-5$<44747>$829$4N4<@;-.$6<T29749$ 74.6N49D$@2$;CC49$.-D49$ ! 14<749$2<.D$9454<75$C-IJ4@5$829$YA6IA$M#:$ <2@$94I46N47$ ! 14<749$@6349$829$4-IA$;<M#:47$C-IJ4@5$ ! 14<749$Y6<72Y$ ! X$I2<54I;@6N4$54h$fi5$ ! MK-6<$.636@5$54h$f5$28$54<@>$;<M#:47$C-IJ4@5$ ??$

  28. ?\$

  29. KB4HBL( LBEBC\BL( ! CJ@$<$6<$$ ! G-@-$8923$-U2N4$[$ q9INU-54>$9INU-54bXT)r$ ! L8$<4a@$-N-6.-U.4$54h$f$6<$ ! 14<7$M#:E<H$ Y6<72Y>$54<7$CJ@$ ! &;@T28T29749[$U;c49$ ! @6342;@E<H[$ ! L<T29749[$74.6N49$E-.52$74.6N49$ ! =454<7$CJ@$<>$945@-9@$@6349$ U;c4947>$6<T29749$CJ@5H>$ ! M#:E<H$6<$ -7N-<I4$Y6<72Y$@2$<4a@$<2@T D4@T94I46N47$CJ@$ q54<7U-54>54<7U-54bXr[$ ! CJ@$<$6<$$ ! '-9J$CJ@$<$-5$94I46N47$ q9INU-54TX>9INU-54T)r$ ! L8$<$65$53-..45@$;<M#:47$CJ@>$ ! M#:E<H$ A&=-6)-6)2)$21,'&)&=2&)+26) $('@-"%60;)('1'-@'58B $ -7N-<I4$Y6<72Y$U-54$@2$<4a@$ ! &@A49Y654[$$ ;<M#:47$54h$f$$ ! LK<294$$ ?*$

  30. ?_$

  31. ! !a-3C.4$ 54h$fi5[$0>$)>$/>$V$ ! Y6<72Y$56o4dV $ ! ! =4I46N49$5445$<2$ 76c494<I4$6<$@Y2$ 5I4<-9625^$ L5$6@$-$94@9-<536@@47$C-IJ4@>$ ! 29$-$<4Y$C-IJ4@R$ L<I2994I@.D$C-5545$7;C.6I-@4$ ! 7-@-$-5$<4Y$6<$E-H$ s[$gA-@$94.-@62<5A6C$65$ <44747$U4@Y44<$54h$f$ 56o4$-<7$Y6<72Y$56o4R$ M[$BY6I4$-5$3-<D$54h$fi5$ ?`$

  32. \0$

  33. ! (26<@T@2TC26<@[$ ! ,;..$7;C.4a$7-@-[$ ! &<4$54<749>$2<4$94I46N49$$ ! Z6T7694I@62<-.$7-@-$l2Y$6<$ ! =4.6-U.4>$6<T29749$ C;&') 5-34$I2<<4I@62<$ 6&'2#D) ! '11[$3-a63;3$54K34<@$ 56o4$ ! X2$O3455-K4$U2;<7-9645P$ ! #2<<4I@62<T2964<@47[$$ ! (6C4.6<47[$ ! S-<75A-J6<K$E4aIA-<K4$28$ ! B#($I2<K45@62<$-<7$l2Y$ I2<@92.$35K5H$6<6@6-.6o45$ I2<@92.$54@$Y6<72Y$56o4$ 54<749>$94I46N49$5@-@4$U48294$ ! E'.5)F)('1'-@')C%G'(6) 7-@-$4aIA-<K4$ ! ,.2Y$I2<@92..47[$ ! 14<749$Y6..$<2@$2N49YA4.3$ application application writes data reads data socket socket 94I46N49$ door door TCP TCP send buffer receive buffer segment \)$

  34. V/$U6@5 F=e[$;9K4<@$7-@-$$ I2;<@6<K$ 52;9I4$C29@$f 745@$C29@$f EK4<49-..D$<2@$;547H UD$UD@45$$ 54h;4<I4$<;3U49 28$7-@-$ M#:[$M#:$f$ E<2@$54K34<@5^H$ -IJ<2Y.47K434<@$<;3U49 N-.67 A4-7$ <2@$ F M ( = 1 , =4I46N4$Y6<72Y (1S[$C;5A$7-@-$<2Y$ .4< ;547 f$UD@45$$ EK4<49-..D$<2@$;547H$ IA4IJ5;3 F9K$7-@-$C26<@49 94I46N49$Y6..6<K$ @2$-II4C@$ &C@62<5$EN-96-U.4$.4<K@AH =1B>$1jX>$,LX[$ I2<<4I@62<$45@-U$ E54@;C>$@4-972Y<$ I233-<75H$ -CC.6I-@62<$ 7-@-$$ L<@49<4@$ EN-96-U.4$.4<K@AH IA4IJ5;3$ E-5$6<$FG(H$ \/$

  35. 14hk$fi5[$ S25@$Z S25@$M ! UD@4$5@94-3$O<;3U49P$ F549$ Seq=42, ACK=79, data = ‘C’ 28$Q95@$UD@4$6<$ @DC45$ 54K34<@i5$7-@- $ t#i M#:5[$ A25@$M#:5$ 94I46C@$28$ ! 54h$f$28$<4a@$UD@4$ C ’ ‘ = a t t#i>$4IA245$ a d 4aC4I@47$8923$2@A49$ , 3 4 = K C A 9 , U-IJ$t#i 7 = 5674$ q e S ! I;3;.-@6N4$M#:$ A25@$M#:5$ s[$A2Y$94I46N49$A-<7.45$ 94I46C@$$ 2;@T28T29749$54K34<@5$ Seq=43, ACK=80 28$4IA247$ ! M[$B#($5C4I$7245<i@$ t#i 5-D>$T$;C$@2$ 63C.434<@49$ @634 563C.4$@4.<4@$5I4<-962 \V$

  36. ! )*,(6*($#6(!E8(60+#*"6( ! )*,(>&2(,#(#$60+&6#( M&:"#Y( L!!Y( ! 1A2;.7$U4$.2<K49$@A-<$ ! '4-5;94$@634$8923$ =BB$E92;<7T@96CT@634H$ 54K34<@$@9-<5365562<$ ;<@6.$M#:$94I46C@$ ! Z;@$=BB$N-9645u$ ! L8$6@$65$@22$5A29@$ ! LK<294$94@9-<5365562<5$ ! (943-@;94$@6342;@$ ! #-..$@A65$O1-3C.4=BBP$ ! 1-3C.4=BB$Y6..$N-9D$ ! F<<4I455-9D$ 94@9-<5365562<5u$ ! g4$Y-<@$-$O5322@A49P$ ! L8$6@$65$@22$.2<K$ 45@63-@47$=BB$ ! 1.2Y$94-I@62<$@2$54K34<@$ ! MN49-K4$54N49-.$94I4<@$ .255$ 34-5;9434<@5>$<2@$m;5@$ I;994<@$1-3C.4=BB$ \W$

  37. ! !aC2<4<@6-.$Y46KA@47$32N6<K$-N49-K4$ ! L<l;4<I4$28$C-5@$5-3C.4$74I94-545$ 4aC2<4<@6-..D$8-5@$ ! BDC6I-.$N-.;4[$ # $d$0k)/?$ EstimatedRTT = (1- # )*EstimatedRTT + # *SampleRTT \?$

  38. RTT: gaia.cs.umass.edu to fantasia.eurecom.fr 350 300 250 RTT (milliseconds) 200 150 100 1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106 time (seconnds) SampleRTT Estimated RTT \\$

  39. ! 14@@6<K$@A4$B#($@6342;@$ ! !5@63@47=BB$C.;5$O5-84@D$3-9K6<P$ ! BA4$.-9K49$@A4$N-96-@62<$6<$!5@63-@47=BB>$@A4$ .-9K49$@A4$5-84@D$3-9K6<$ \*$

  40. ! B#($I94-@45$97@$549N6I4$ ! =4@9-<5365562<5$-94$ 2<$@2C$28$;<94.6-U.4$L($ @96KK4947$UD$ ! ,4-@;945$28$B#($$ ! @6342;@$4N4<@5$ ! (6C4.6<47$54K34<@5$ ! 7;C.6I-@4$M#:5$ ! L<6@6-..D$I2<56749$ ! #;3;.-@6N4$M#:5$ ! B#($;545$56<K.4$ 563C.6Q47$B#($54<749[$ 94@9-<5365562<$@6349$ ! LK<294$7;C.6I-@4$M#:5$ ! LK<294$l2Y$I2<@92.$ ! LK<294$I2<K45@62<$ I2<@92.$ \_$

  41. ! B6342;@[$ ! G-@-$94I46N47$8923$-CC[$ ! =4@9-<536@$54K34<@$@A-@$ ! #94-@4$54K34<@$Y6@A$54h$f$ I-;547$@6342;@$ ! 54h$f$65$UD@4T5@94-3$ ! =45@-9@$@6349$ <;3U49$28$Q95@$7-@-$UD@4$6<$$ ! $M#:$94I46N47[$ 54K34<@$ ! 1@-9@$@6349$68$<2@$-.94-7D$ ! L8$-IJ<2Y.47K45$ 9;<<6<K$E@A6<J$28$@6349$-5$ C94N62;5.D$;<M#:47$ 829$2.745@$;<M#:47$ 54K34<@5$ 54K34<@H$ ! FC7-@4$YA-@$65$J<2Y<$@2$ U4$M#:47$ ! !aC69-@62<$6<@49N-.[$ ! 1@-9@$@6349$68$@A494$-94$$ B634&;@L<@49N-.$$ 2;@5@-<76<K$54K34<@5$ \`$

  42. S25@$M S25@$Z S25@$M S25@$Z Seq=92, 8 bytes data Seq=92, 8 bytes data Seq=100, 20 bytes data 14hd`/$@6342;@ @6342;@ ACK=100 X .255 Seq=92, 8 bytes data Seq=92, 8 bytes data 14<7U-54$ d$)00$ 14hd`/$@6342;@ 14<7Z-54$ d$)/0$ 0 0 1 = K C A 14<7Z-54$ 14<7Z-54$ d$)00$ d$)/0$ @634 @634$ C943-@;94$@6342;@$5I4<-962 .25@$M#:$5I4<-962 *)$

  43. S25@$M S25@$Z Seq=92, 8 bytes data ACK=100 @6342;@ Seq=100, 20 bytes data X .255 0 2 1 = 14<7Z-54$ K C A d$)/0$ @634$ #;3;.-@6N4$M#:$5I4<-962 */$

  44. TCP Receiver action Event at Receiver Delayed ACK. Wait up to 500ms Arrival of in-order segment with for next segment. If no next segment, expected seq #. All data up to send ACK expected seq # already ACKed Immediately send single cumulative Arrival of in-order segment with ACK, ACKing both in-order segments expected seq #. One other segment has ACK pending Immediately send duplicate ACK , Arrival of out-of-order segment indicating seq. # of next expected byte higher-than-expect seq. # . Gap detected Immediate send ACK, provided that Arrival of segment that segment starts at lower end of gap partially or completely fills gap *V$

  45. ! B634T2;@$C49627$$28@4<$ ! L8$54<749$94I46N45$V$ 94.-@6N4.D$.2<K$ M#:5$829$5-34$7-@->$6@$ ! "2<K$74.-D$U48294$ -55;345$@A-@$54K34<@$ 9454<76<K$.25@$C-IJ4@$ -8@49$M#:47$7-@-$Y-5$ ! G4@4I@$.25@$54K34<@5$N6-$ .25@[$ 7;C.6I-@4$M#:5k$ ! Q&$6(-#6-&2$+06 [$9454<7$ ! 14<749$28@4<$54<75$3-<D$ 54K34<@$U48294$@6349$ 54K34<@5$U-IJT@2TU-IJ$ 4aC6945$ ! L8$54K34<@$65$.25@>$@A494$ Y6..$.6J4.D$U4$3-<D$ 7;C.6I-@4$M#:5$829$@A-@$ 54K34<@$ *W$

  46. S25@$M S25@$Z 54h$f$a)$ 54h$f$a/$ 54h$f$aV$ M#:$a)$ X 54h$f$aW$ 54h$f$a?$ M#:$a)$ M#:$a)$ M#:$a)$ @96C.4$ 7;C.6I-@4$ M#:5$ resend seq X2 @6342;@ @634$ *?$

  47. ( ! =4I46N4$5674$28$B#($ Q:*,(E*26-*:O( I2<<4I@62<$A-5$-$94I46N4$ $ U;c49[$ (94N4<@5$ $#2%#- $8923$ *M#-S*,021(-#>#0M#-]$( 9"^#- $UD$@9-<536@@6<K$@22$ 3;IA>$@22$8-5@$ EI;994<@.DH$ -CC.6I-@62<$ L($ B#($7-@-$ ;<;547$U;c49$ $ E6<$U;c49H$ C92I455$ 7-@-K9-35$ 5C-I4$ K=##%(+&6>3021($#-M0>#O( 3-@IA6<K$54<7$9-@4$@2$ 94I46N6<K$-CC.6I-@62<x5$79-6<$ 9-@4$ ! MCC.6I-@62<$C92I455$3-D$U4$ 5.2Y$-@$94-76<K$8923$U;c49$ ! gA-@$68$U;c49$Q..5$;CR$ **$

  48. ! =4I46N49$<2@6Q45$ EI;994<@.DH$ -CC.6I-@62<$ 54<749$28$;<;547$ L($ B#($7-@-$ ;<;547$U;c49$ C92I455$ E6<$U;c49H$ 7-@-K9-35$ 5C-I4$ U;c49$5C-I4$ ! 14K34<@$A4-749$ 9Y<7$ =INZ;c49$ 6<I.;745$@A4$ rwnd $N-.;4$$ ! 14<749$.636@5$f$28$ ! 1;CC254$B#($94I46N49$ ;<M#:47$UD@45$@2$ 765I-975$2;@T28T29749$ 54K34<@5u$ rwnd ! F<;547$U;c49$5C-I4$ ! e;-9-<@445$94I46N49i5$ d$9Y<7$ U;c49$7245<i@$2N49l2Y$ d$ =INZ;c49Tq"-5@ZD@4=IN7$T$"-5@ZD@4=4-7r$ *_$

  49. ! B#($54<749$-<7$94I46N49$ ! BA944$Y-D$A-<75A-J4[$ 45@-U.65A$OI2<<4I@62<P$ ! K6#=(ZO( I.64<@$A25@$54<75$ U48294$4aIA-<K6<K$7-@-$ B#($1jX$54K34<@$@2$ 54K34<@5$ 549N49$ ! #.64<@$6<6@6-@45$I2<<4I@62<$ ! 1C4I6Q45$6<6@6-.$54h$f$ ! #-..5$I2<<4I@EH$@2$-<$L(%C29@$ ! X2$7-@-$ ! K6#=(/O( 549N49$A25@$94I46N45$ ! 149N49$65$I2<@-I@47$UD$I.64<@$ 1jX>$94C.645$Y6@A$1jXM#:$ ! #-..5$-II4C@EH$ 54K34<@$ ! B#($N-96-U.45$6<6@6-.6o47$ ! 149N49$-..2I-@45$U;c495$ YA6.4$45@-U.65A6<K$ ! 1C4I6Q45$549N49$6<6@6-.$54hk$f$ I2<<4I@62<$ ! K6#=(;O $I.64<@$94I46N45$ ! 14h;4<I4$f5$ 1jXM#:>$94C.645$Y6@A$M#:$ ! Z;c495$-<7$l2Y$I2<@92.$6<82$ 54K34<@>$YA6IA$3-D$ E4kKk$=INg6<72YH$ I2<@-6<$7-@-$ *`$

  50. I.64<@ 549N49 #.256<K$-$I2<<4I@62<[$ I.254$ I.64<@$I.2545$52IJ4@$N6-$I.254EH[ $ FIN 1@4C$)[$ I.64<@$5D5@43$54<75$B#($ ,LX$I2<@92.$54K34<@$@2$549N49 $$ I.254$ K C A 1@4C$/[$ 549N49$94I46N45$,LX>$ N I F 94C.645$Y6@A$M#:k$#.2545$ ACK @6347$Y-6@$ I2<<4I@62<>$54<75$,LXk$$ I.2547$ _0$

  51. 1@4C$V[$ I.64<@$94I46N45$,LX>$94C.645$ I.64<@ 549N49 Y6@A$M#:k$$ I.254$ FIN ! !<@495$O@6347$Y-6@P$T$Y6..$ 945C2<7$Y6@A$M#:$@2$94I46N47$ ,LX5$$ I.254$ ! gAD$<2@$I.254$633476-@4.DR$ K C A MN2675$C2@4<@6-.$C92U.435$68$-$ N I .'+ $52IJ4@$EY6@A$5-34$C29@5$ F -<7$L(5H$65$I94-@47>$-<7$@A4<$ ACK @6347$Y-6@$ 2.7$74.-D47$7-@-$65$ 74.6N4947u$ 1@4C$W[$ 549N49>$94I46N45$M#:k$$ #2<<4I@62<$I.2547$ I.2547$ _)$

  52. B#($549N49$.684IDI.4 B#($I.64<@$.684IDI.4 _/$

  53. (96<I6C.45$-<7$B#($1C4I6QI5$ _V$

  54. ! gA-@$65$I2<K45@62<R$ ! L<8293-..D[$O@22$3-<D$52;9I45$54<76<K$@22$3;IA$ 7-@-$@22$8-5@$829$ 2#6,*-.( @2$A-<7.4P$ ! G6c494<@$8923$l2Y$I2<@92.^$ ! '-<6845@-@62<5$ ! "25@$C-IJ4@5$EU;c49$2N49l2Y$-@$92;@495H$ ! "2<K$74.-D5$Eh;4;46<K$6<$92;@49$U;c495H$ _W$

  55. Host A $ $ out $ $ in : original data $ ! BY2$54<7495>$@Y2$ 94I46N495$ Host B $ ! &<4$92;@49>$ unlimited shared output link buffers $ 02P206# $U;c495$$ ! X2$94@9-<5365562<$ ! "6<J$Zg$28$=$ ! [&-1#(%#:&'$( =%/$ YA4<$ I2<K45@47$ ! '-a63;3$ -IA64N-U.4$ @A92;KAC;@$ =%/$ =%/$ _?$

  56. ! &<4$92;@49>$ P206#( U;c495$$ ! 14<749$94@9-<5365562<$28$.25@$C-IJ4@$ Host A $ $ out $ $ in : original data $ $ ' in : original data, plus retransmitted data $ Host B $ finite shared output link buffers $ _\$

  57. ! #-54$-[$14<749$2<.D$@9-<536@5$YA4<$6@$J<2Y5$U;c49$5C-I4$65$ -N-6.-U.4$6<$92;@49$E;<94-.65@6IH$ ! #-54$U[$14<749$94@9-<536@5$2<.D$YA4<$C-IJ4@$65$J<2Y<$@2$U4$.25@$ ! X4Y$I25@$28$I2<K45@62<[$'294$54<749$Y29J$E94@9-<5H$829$K6N4<$ OK227C;@P$ ! #-54$I[$M55;34$54<749$-.52$94@9-<536@5$YA4<$-$C-IJ4@$65$74.-D47$ E<2@$.25@H>$6k4k$-$C943-@;94$@6342;@$EU6KK49$ $ 6< i H$$ ! X4Y$I25@$28$I2<K45@62<[$92;@49$2;@C;@$.6<J$I-99645$3;.@6C.4$I2C645$28$ C-IJ4@$ R/2 R/2 R/2 > $ " in $ " out R/3 $ " in $ " out = $ out $ out $ out R/4 > $ " in $ " out R/2 R/2 R/2 $ in $ in $ in a. b. c. _*$

  58. ! ,2;9$54<7495$ s[ $ YA-@$A-CC4<5$-5$$$$$$ $ " in ! ';.@6A2C$C-@A5$ -<7$$$$$$$$$$6<I94-54R$ $ " in ! B6342;@%94@9-<536@$ Host A $ $ out $ $ in : original data $ $ ' in : original data, plus retransmitted data $ finite shared output link buffers $ Host B $ __$

  59. H $ o o st A $ u $ t H o st B $ ! M$<4Y$I25@$28$I2<K45@62<$$ ! gA4<$C-IJ4@$792CC47>$-<D$;C5@94-3$@9-<5365562<$ I-C-I6@D$;547$829$@A-@$C-IJ4@$Y-5$Y-5@47^$ _`$

  60. !,*(9-*&%(&==-*&>3#$(6*(>*21#$60*2(>*26-*:O( ! 4#6,*-.D&$$0$6#%( ! B2%D#2%(>*21#$60*2( >*21#$60*2(>*26-*:O( >*26-*:O( ! =2;@495$C92N674$ ! X2$4aC.6I6@$8447U-IJ$ 8447U-IJ$@2$4<7$5D5@435$ 8923$<4@Y29J$ ! 16<K.4$U6@$6<76I-@6<K$ ! #2<K45@62<$6<849947$ I2<K45@62<$E1XM>$ 8923$4<7T5D5@43$ G!#U6@>$B#(%L($!#X>$ 2U549N47$.255>$74.-D$ MB'H$ ! T==-*&>3(6&.#2(9'(!E8( ! !aC.6I6@$9-@4$54<749$ 5A2;.7$54<7$-@$ `0$

  61. ! e2-.[$$B#($54<749$5A2;.7$@9-<536@$ &$(I&$6(&$( =*$$09:# >$U;@$Y6@A2;@$I2<K45@6<K$<4@Y29J$ ! S2Y$72$Y4$Q<7$@A4$9-@4$m;5@$U4.2Y$ I2<K45@62<$.4N4.R$ ! G4I4<@9-.6o47$-CC92-IA$+$4-IA$B#($54<749$54@5$6@5$ 2Y<$9-@4>$U-547$2<$ -#$0-1-& $8447U-IJ[$$ ! M#:$6<76I-@45$54K34<@$94I46N47$E-$K227$@A6<K^H$ ! X4@Y29J$<2@$I2<K45@47>$52$6<I94-54$54<76<K$9-@4$ ! "25@$54K34<@$+$-55;34$.255$65$7;4$@2$I2<K45@47$ <4@Y29J>$52$74I94-54$54<76<K$9-@4$ `)$

  62. ! (92U6<K$829$U-<7Y67@A$ ! L<I94-54$@9-<5365562<$9-@4$2<$94I46C@$28$M#:>$;<@6.$ 4N4<@;-..D$.255$2II;95>$@A4<$74I94-54$@9-<5365562<$9-@4$$ M#:5$U46<K$94I46N47>$$ _( .255>$52$74I94-54$9-@4$ 52$6<I94-54$9-@4$ _( _( _( 54<76<K$9-@4$ B#(i5$ _( O5-Y@22@AP$ U4A-N629$ @634$ ! S2Y$8-5@$@2$6<I94-54$29$74I94-54R $ `/$

  63. ! 14<749$.636@5$9-@4$UD$.636@6<K$<;3U49$28$ ;<M#:47$UD@45$O6<$C6C4.6<4P[$ LastByteSent-LastByteAcked % cwnd $ ! cwnd: 76c495$8923$ rwnd EA2Y>$YADRH$ ! 54<749$.636@47$UD min(cwnd,rwnd ) cwnd � ! =2;KA.D>$ UD@45$ IY<7 9-@4$d UD@45%54I =BB =BB$ ! cwnd $EI2<K45@62<$Y6<72YH$65$-$8;<I@62<$28$ C49I46N47$<4@Y29J$I2<K45@62<$ M#:E5H$ ! rwnd $E94I46N49$Y6<72YH$65$4aC.6I6@.D$ IA-<K47$UD$94I46N49$ `V$

  64. 7THO(HT!T([AKK( NAAHO(TEU(LBEBC\BH( ! ;(%"=:0>&6#(TEU$Y( ! K:*,$6&-6(=3&$#( EI2<<4I@62<$5@-9@$29$-8@49$ ! M@$.4-5@$5234$54K34<@5$ K4@@6<K$@A92;KA$E ('1200):26&) @6342;@H[$$ ('&(2.6#-& H$ ! L<I94-54$ cwnd $4aC2<4<@6-..D$ ! #;@$ cwnd $6<$A-.8$ 8-5@$$ ! !0+#*"6Y( ! BA6<J$<-34$65$U-IJY-975R$ ! X2$945C2<54$8923$94I46N49$ BA6<J$O-N2676<K$-$5.2Y$5@-9@P$ ! E*21#$60*2(&M*0%&2># $ ! #;@$ cwnd $@2$)$ ! y49D$-KK94556N4$5.2Y72Y<^$ ! L<I94-54$ cwnd $.6<4-9.D$ `W$

  65. ! gA4<$I2<<4I@62<$U4K6<5>$ S25@$M S25@$Z cwnd $d$)$'11$ ! !a-3C.4[$'11$d$?00$UD@45$]$ one segment =BB$d$/00$354I$ =BB ! L<6@6-.$9-@4$d$/0$JUC5$ two segments ! MN-6.-U.4$U-<7Y67@A$3-D$$ U4$pp$'11%=BB$ ! e2-.[$h;6IJ.D$9-3C$;C$@2$ 945C4I@-U.4$9-@4$ four segments ! C2>-#&$#(-&6#(#5=*2#260&::'( ;<@6.$ Q95@$.255$4N4<@$29$YA4<$@A945A2.7$ 94-IA47$ ! G2;U.4$ cwnd $4N49D$=BB$ ! G2<4$UD$6<I9434<@6<K$ cwnd $UD$ @634 )$829$4N49D$M#:$94I46N47$ `?$

  66. ! 1.2Y$5@-9@$CA-54$3;5@$4<7$ ! L8$Y4$J44C$4aC2<4<@6-..D$6<I94-56<K$2;9$U-<7Y67@A$ ;5-K4>$Y4i94$5;94$@2$I-;54$I2<K45@62<^$ ! gA4<$72$Y4$5@2C$6<I94-56<K$9-C67.DR$ ! Z-547$2<$-$<4Y$N-.;4[$ ssthresh ! 1.2Y$5@-9@$@A945A2.7$3-6<@-6<47$UD$B#($ ! gA4<$ cwnd $pd$ ssthresh [$@9-<56@62<$8923$5.2Y5@-9@$@2$ I2<K45@62<$-N267-<I4$CA-54$ ! 1@-9@5$2c$A6KA$-@$Q95@$ ! 14@$@2$ ssthresh=cwnd/2 $YA4<$7-@-$.255$ 2II;95$ ! =4343U49$EA-.8$28H$B#($9-@4$YA4<$I2<K45@62<$.-5@$2II;9947 `\$

  67. ML'G$ ! X4Y$CA-54[$YA4<$$ cwnd > ssthresh >$$ ! M#:5[$6<I94-54$ cwnd UD$ K92Y$ cwnd $.6<4-9.D$ )$'11$C49$=BB[$-776@6N4$ 6<I94-54$ ! L<I94-54$ cwnd UD$)$'11$ ! .255[$I;@$ cwnd $6<$A-.8$ C49$=BB$$ E<2<T@6342;@T74@4I@47$ ! MCC92-IA$C2556U.4$ .255$H[$3;.@6C.6I-@6N4$ I2<K45@62<$5.2Y49$@A-<$6<$ 74I94-54$ 5.2Y5@-9@$ $ $ ML'G[$M776@6N4$L<I94-54$ ';.@6C.6I-@6N4$G4I94-54$ $ `_$

  68. cwnd > ssthresh slow congestion start avoidance loss: timeout loss: timeout loss: loss: new ACK 3dupACK timeout fast loss: recovery 3dupACK ``$

  69. ! gA4<$ cwnd $ < $ ssthresh >$54<749$6<$$ $:*,D$6&-6(=3&$#( ! g6<72Y$K92Y5$4aC2<4<@6-..Dk$ ! gA4<$ cwnd $ >= $ ssthresh >$54<749$65$6<$$ >*21#$60*2D&M*0%&2>#(=3&$#( ! g6<72Y$K92Y5$.6<4-9.Dk$ ! gA4<$V$7;C.6I-@4$M#:5$94I46N47$ ! ssthresh $54@$@2$ cwnd/2 ! cwnd $54@$@2$z$ ssthresh ! gA4<$@6342;@$2II;95$ ! ssthresh $54@$@2$ cwnd/2 ! cwnd $54@$@2$)$'11k$$ )0)$

  70. 8-69<455$K2-.[$68$:$B#($545562<5$5A-94$5-34$U2@@.4<4IJ$.6<J$ 28$U-<7Y67@A$=>$4-IA$5A2;.7$A-N4$-N49-K4$9-@4$28$=%:$ B#($I2<<4I@62<$) U2@@.4<4IJ$ B#($$ 92;@49$ I2<<4I@62<$/ I-C-I6@D$= )0/$

  71. BY2$I23C4@6<K$545562<5[$ ! M776@6N4$6<I94-54$K6N45$5.2C4$28$)>$-5$@A92;KA2;@$6<I94-545$ ! ';.@6C.6I-@6N4$74I94-54$74I94-545$@A92;KAC;@$C92C29@62<-..D$$ 4h;-.$U-<7Y67@A$5A-94 = @ ; C A K ; .255[$74I94-54$Y6<72Y$UD$8-I@29$28$/ 2 9 I2<K45@62<$-N267-<I4[$-776@6N4$6<I94-54 A @ $ .255[$74I94-54$Y6<72Y$UD$8-I@29$28$/ / $ < I2<K45@62<$-N267-<I4[$-776@6N4$6<I94-54 2 6 @ I 4 < < 2 # B2@-.$U-<7Y67@A$28$U2@A$ #2<<4I@62<$)$@A92;KAC;@ I2<<4I@62<5$ = )0V$

  72. ! Q&0-2#$$(&2%(=&-&::#:( ! Q&0-2#$$(&2%(GH8( !E8(E*22#>60*2$( ! ';.@63476-$-CC5$28@4<$ ! X2@A6<K$C94N4<@5$-CC$8923$ 72$<2@$;54$B#($ 2C4<6<K$C-9-..4.$ ! G2$<2@$Y-<@$9-@4$@A92@@.47$ I2<<4I@62<5$U4@Y44<$/$ UD$I2<K45@62<$I2<@92.$ A25@5k$ ! L<5@4-7$;54$FG($ ! g4U$U92Y5495$72$@A65$$ ! (;3C$-;762%N6742$-@$ ! !a-3C.4[$.6<J$28$9-@4$=$ 5;CC29@6<K$`$I2<<4I@62<5w$$ I2<5@-<@$9-@4$ ! X4Y$-CC$-5J5$829$)$B#(>$K4@5$ ! B2.49-@4$C-IJ4@$.255$ 9-@4$=%)0$ ! FG($I-<$OI92Y7$2;@P$ ! X4Y$-CC$-5J5$829$))$B#(5>$ B#($ K4@5$p$=%/$^$ )0W$

Recommend


More recommend