21
Chương 3: Tầng giao vận

Tcp

Embed Size (px)

DESCRIPTION

TCP

Citation preview

  • Chng 3: Tng giao vn

  • V. TCP - Giao vn hng ni

    Sau khi nghin cu nhng nguyn l c bn ca truyn d liu tin cy, chng ta s bn n TCP - mt giao thc tng giao vn ca Internet vi c tnh hng ni v tin cy.Chng ta s thy rng c th cung cp dch v truyn d liu tin cy, TCP s dng rt nhiu nguyn l m chng ta cp n phn trc, bao gm c ch pht hin li, truyn li, bin nhn tch lu, timer, trng tiu cho s th t v s bin nhn. TCP c c t trong cc khuyn ngh RFC 793, RFC 1122, RFC 1323, RFC 2018, RFC 2581.

    1. Kt ni TCP

    Chc nng dn knh, phn knh v pht hin li ca TCP ging UDP. Tuy nhin TCP v UDP c nhiu im khc bit. im khc nhau c bn nht l UDP khng hng ni cn TCP hng ni. UDP khng hng ni v n c th gi d liu m khng cn phi thit lp trc ng truyn. TCP hng ni v trc khi tin trnh ng dng c th bt u gi d liu ti mt tin trnh khc, hai tin trnh ny phi c th tc bt tay vi nhau, ngha l chng phi gi mt s gi segment c bit xc nh cc tham s m bo cho qu trnh truyn d liu. Trong giai on thit lp kt ni TCP, hai bn s khi to nhiu bin trng thi TCP cho kt ni.

    Lch s pht trin ca TCP/IP

    u nhng nm 1970, mng chuyn mch gi bt u pht trin mnh m, v mng ARPAnet, tin thn ca mng Internet ch la mt trong cc kiu mng nh vy. Mi kin trc mng u c giao thc ring ca mnh. Hai nh nghin cu, Vinton Clef v Robert Kahn, nhn thy tm quan trng ca vic kt ni cc mng li vi nhau, cng nhau pht trin giao thc lin mng vi tn gi TCP/IP ( vit tt ca Transmission Control Protocol/Internet Protocol). Mc d lc u Vinton Clef, Robert Kahn xem giao thc ny l mt thc th duy nht, nhng ngay sau n c tch ra lm hai thnh phn ring bit, hot ng c lp vi nhau l TCP v IP. Vinton Clef, Robert Kahn cng b v TCP/IP vo 5/1974 trong IEEE transacsions on Communications Technology.

    Giao thc TCP/IP b xng sng ca Internet thi nay, c pht minh trc my tnh c nhn PC v trm lm vic, trc c s thng tr ca Internet v cc cng ngh mng cc b khc, trc Web, trc stream audio v hi thoi trc tuyn. Vinton Clef, Robert Kahn nhn thy s cn thit ca giao thc mng, mt mt h tr cho nhiu kiu chng trnh ng dng (thm ch k c nhng ci cha c), mt khc cho php cc my tnh v giao thc tng lin kt bt k c th lm vic cung nhau.

    Kt ni TCP khng phi kt ni hai thc s gia hai im u mt (end-to-end) ging nh mch TDM hay FDM trong mng chuyn mch knh. N cng khng

  • phi l mch o bi v trng thi kt ni hon ton trn h thng u cui. Giao thc TCP ch hot ng trn thit b u cui v khng hot ng trn cc thit b trung gian (switch, bridge, router). Trong thc t, cc router trung gian ch c th thy cc datagram, khng nhn thy cc kt ni.

    Kt ni TCP cung cp ng truyn d liu hai hng (song cng - full duplex). Nu c kt ni TCP gia tin trnh A chy trn mt my tnh v tin trnh B chy trn my tnh khc, khi d liu ng dng c th truyn t A ti B cng lc vi d liu truyn t B sang A. Kt ni TCP lun lun thuc kiu im ni im, gia mt bn gi v mt bn nhn (point to point). Ch truyn multicasting (tin trnh gi c th gi ng thi mt thng ip ti nhiu tin trnh nhn) khng thc hin c trong TCP.

    By gi ta hy xem kt ni TCP c thit lp nh th no? Gi s c tin trnh ang chy trn mt my tnh mun khi to ng truyn vi tin trnh trong mt my tnh khc. Nh li rng tin trnh no khi to kt ni l tin trnh khch (client) v tin trnh kia l tin trnh phc v (server). u tin tin trnh ng dng client yu cu thc th TCP ca n thit lp ng kt ni ti tin trnh no trn server. Trong phn 2.6, chng trnh java thc hin iu ny bng cch s dng m:

    Socket clientSocket = new Socket (hostname ,port number);

    Sau thc th giao vn trong my client thit lp kt ni TCP ti thc th TCP trn my phc v. Chng ta s tho lun chi tit th tc thit lp ng truyn cui mc ny. By gi chng ta ch cn bit l u tin my khch s gi mt gi tin TCP c bit my server tr li bng mt gi TCP c bit th hai v cui cng client tr li li bng mt gi TCP c bit th ba. Hai gi TCP c bit u tin khng ti, c ngha l khng c d liu thc s t tng ng dng, ch bt u t gi th ba mi mang d liu. Bi v ba gi d liu c bit ny c trao i gia hai my tnh trc khi kt ni, th tc thit lp kt ni c xem l giai on bt tay ba bc (three way handshake).

    Khi ng truyn TCP c thit lp, hai tin trnh ng dng c th trao i d liu vi nhau. TCP l knh truyn song cng nn my tnh c th gi v nhn ng thi. Xt qu trnh gi d liu t tin trnh client ti tin trnh server. Tin trnh client s lung d liu qua socket (ca ca tin trnh - xem mc 2.6). Khi qua ca, tin trnh gi s khng kim sot c d liu m chnh thc th TCP chy trn my client s kim sot. Trong hnh 3.27, TCP y d liu vo b m gi (send buffer), mt trong cc b m c khi to trong qu trnh thit lp kt ni. Sau TCP s ly v gi dn d liu trong b m gi. Tuy nhin, c t TCP khng xc nh r khi no TCP phi gi d liu trong b m. Thng n ch yu cu TCP gi khi thun tin. Lng d liu ng dng ln nht c th t trong mt segment gii hn bi MMS (maximum segement size). Gi tr MMS ph thuc vo chnh phn mm trin khai TCP (thng 1 h iu hnh) v c th cu hnh c. Cc gi tr MMS ph bin thng l 1500 byte, 536 byte hay 512 byte. ( ln ca segment thng c gii hn trnh hin tng phn mnh IP, mt hin tng s c cp trong chng sau). Ch rng MMS l lng d liu ng dng ln nht trong segment, ch khng phi l kch thc ln nht ca segment TCP bao gm c tiu (header).

    HoangXuanHighlight

  • TCP gi mi nhm d liu cng vi TCP header to nn TCP segment. TCP segment c chuyn xung tng mng v li c t trong gi tin ca tng mng (IP datagram). Gi IP datagram c gi trong mng. pha nhn, thc th TCP s t d liu vo b m nhn (receiver buffer) ca kt ni TCP. ng dng s c dng d liu ny t b m. Mi kt ni u c mt b m gi v b m nhn. B m gi v nhn cho d liu i theo mt hng c minh ha trn hnh 3.27

    Chng ta cn ch rng b m, cc bin trng thi, v socket to thnh kt ni TCP ch nm trn hai thit b u cui ch khng nm trn cc thit b trung gian (router, hub, switch ... )

    Hnh 3.27 B m ca thc th TCP

    2. Cu trc TCP Segment

    Sau khi ni qua v TCP, by gi chng ta s xem xt cu trc gi d liu TCP (TCP segment). TCP segment bao gm cc trng tiu v trng d liu. Trng d liu cha mt phn d liu ng dng. Nh ni trn, gi tr MMS gii hn ln trng d liu ca segment. Khi TCP gi mt file ln - v d file nh trong trang web, n phi chia file thnh cc on c kch thc MMS (ngoi tr on cui cng c ln b hn hoc bng MMS). Tuy nhin ln d liu ca cc ng dng tng tc thng nh hn MMS. V d, vi ng dng ng nhp t xa (Telnet), trng d liu trong TCP segment thng ch l 1 byte. ln trng tiu ca TCP l 20 byte (ca UDP l 12 byte). Segment c Telnet gi c th ch c 21 byte.

  • Hnh 3.28 Cu trc gi d liu TCP

    Hnh 3.28 minh ha cu trc ca TCP segment. Tng t UDP, tiu TCP bao gm trng s hiu cng ngun, s hiu cng ch thc hin dch v dn, phn knh d liu cho cc ng dng bn trn v trng checksum. Tuy nhin tiu ca TCP segment cn c cc trng sau:

    Trng s th t (sequence number) 32 bit v trng s bin nhn

    (acknowledge number) 32 bit c bn gi v bn nhn s dng trong vic cung cp dch v truyn d liu tin cy, s c cp k hn trong phn di y.

    Trng ln ca s (window size) 16 bit c s dng kim sot lu lng. y chnh l s lng byte d liu ti a m bn nhn c th chp nhn c.

    Trng di tiu (length field) 4 bit xc nh di ca tiu TCP theo n v l cc t 32 bit. Tiu TCP c th c di thay i ph

  • thuc trng option (Nu trng option rng, th chiu di ca tiu TCP l 20 byte).

    Trng option l tu chn, c th thay i tu . Trng ny c s dng khi bn gi, bn nhn c th thng lng v gi tr MMS hoc gi tr gia tng ca ca s trong mng cao tc. La chn nhn thi gian (timestamping) cng c nh ngha. Xem RFC 854 v RFC 1323 bit thm chi tit.

    Trng c (flag) gm 6 bit. Bit ACK c s dng ch ra rng gi tr t trong trng bin nhn l ng. Cc bit RST, SYN v FIN c s dng trong vic thit lp hay ng kt ni. Khi bit PSH c bt, th y l du hiu yu cu bn nhn phi chuyn d liu ln tng trn ngay lp tc. Cui cng, bit URG c dng bo hiu d liu trong segment c thc th tng trn pha gi to ra l khn cp. V tr byte cui cng ca d liu khn cp c xc nh bi con tr d liu khn 16 bit (ptr to urgent data). TCP phi bo cho tng trn bit c d liu khn v t con tr vo cui d liu khn (Trong thc t, PSH, URG v con tr d liu khn khng c s dng)

    3. S th t v s bin nhn:

    Hai trong s nhng trng quan trng nht ca tiu TCP segment l trng s th t v trng s bin nhn. Trc khi ni n nhng trng ny c s dng cung cp ng truyn d liu tin cy nh th no, chng ta cn ni n nhng trng ny nhn gi tr g.

    TCP xem d liu l dng cc byte khng c cu trc nhng c trt t v TCP s nh s th t cho tng byte ca dng d liu ny. Mi segment cng c mt s th t, l s th t ca byte u tin ca segment. Xt v d sau: Gi s c tin trnh trn my A mun gi dng d liu ti tin trnh trn my B thng qua kt ni TCP. Thc th TCP trn my A s nh s th t cho tng byte trong dng d liu. Nu dng d liu ny cha file c ln 500.000 byte v gi tr MMS ch c 1000 byte, v byte u tin ca dng d liu c nh s th t 0. Xem hnh 3.29, TCP s to ra 500 segment trn dng d liu ny. Segment u tin c s th t 0, segment th hai c s th t l 1000, segment th ba c s th t l 2000,.... Mi s th t nh vy c chn vo trng s th t trong tiu ca TCP segment tng ng.

    Hnh 3.29 Chia nh file d liu vo cc TCP segment

    S bin nhn phc tp hn s th t. V TCP l knh truyn song cng nn my A c th nhn c d liu t my B trong khi n gi d liu ti my B (trn cng kt

    HoangXuanHighlight

  • ni TCP). Mi segment n t my B c mt s th t cho dng d liu i t B sang A. S bin nhn m my A t trong segment ca n s l s th t ca byte tip theo m my A ang ch my B gi ti. c th hiu r hn chng ta xt v d sau: Gi s rng my A nhn c tt c cc byte t byte s 0 n byte s 535 my B gi n v gi s my A cng gi mt segment ti my B. Trong trng hp ny, my A i byte th 536 v ton b cc byte tip theo trong dng d liu ca my B. Khi my A t gi tr 536 vo trng s bin nhn ca segment m n gi ti my B.

    Mt v d khc, gi s rng my A nhn c mt segment t my B bao gm byte 0 n byte 535 v mt segment khc bao gm byte 900 n byte 1000. V l do no , my A khng nhn c byte th 536 n byte 899. Trong trng hp ny, my A s vn i byte th 536 (v cc byte tip theo) to li dng d liu ca my B. Do , trong segment tip theo bn A gi cho bn B, trng s bin nhn vn cha gi tr 536. TCP bin nhn tt c cc byte cho n byte u tin cha nhn c (cn thiu trong dng d liu), cho nn c th ni TCP bin nhn kiu tch lu (cummulative acknowledgement).

    V d cui cng a ra vn quan trng nhng n gin. Bn A nhn c segment th ba (byte th 900 n 1.000) trc khi nhn c segment th hai (byte th 536 n byte 899). Khi segment th ba n khng theo ng th t. Vn y s l my tnh s lm g khi n nhn c mt segment khng ng th t trong kt ni TCP? Rt th v, cc c t RFC TCP khng a ra bt c mt quy tc no gii quyt. Chnh ngi lp trnh phn mm TCP s a ra cch gii quyt. V c bn, c hai la chn: (1) Bn nhn ngay lp tc loi b cc byte khng ng th t hoc (2) bn nhn gi li cc byte khng ng th t v ch n khi nhn c cc byte thiu, to thnh dng d liu lin tc. R rng gii php sau c hiu qu hn nu nh gi theo hiu sut mng, trong khi gii php th nht lm m TCP n gin hn. Trong quyn sch nhp mn ny, chng ta s coi TCP pha nhn loi b cc segment khng ng th t.

    Trong hnh 3.29 chng ta mc nh s th t khi to bt u t s 0. Trong thc t, c hai pha kt ni TCP u chn ngu nhin gi tr s th t khi to ban u. iu ny s gim thiu xc sut c mt gi tin ca mt kt ni kt thc gia hai my tnh tn ti qu lu trn mng v b hiu nhm l mt segment hp l ca mt kt ni khc gia chnh hai my tnh y ([sunshire 1978]).

    4. Telnet : Mt v d v s th t v s bin nhn

    Telnet c t trong khuyn ngh RFC 854 l giao thc ng nhp t xa ph bin tng ng dng. N chy trn nn TCP v c thit k lm vic gia mt cp my bt k. Khng ging cc ng dng trao i d liu cp trong chng hai, Telnet l ng dng mang tnh tng tc. Chng ta tho lun v d Telnet y c th hiu r hn s th t v s bin nhn ca TCP.

    Gi s my A thit lp mt phin Telnet vi my B. V my A thit lp phin lm vic, n ng vai tr client, my B ng vai tr server. Mi k t c ngi dng g vo (ti pha client A) s c gi ti my B; B s gi li A bn sao ca k t . Sau A s hin th k t trong mn hnh Telnet ca ngi s dng. Tn hiu echo back c s dng chc chn rng k t m ngi s dng nhn thy

  • c nhn v x l ti my tnh xa. Nh vy mi k t s c truyn qua mng hai ln trong khong thi gian ngi dng g phm ti khi k t c hin th trn mn hnh ca ngi s dng.

    By gi gi s rng ngi s dng g mt phm bt k, chng hn l C. Hy kim tra xem cc TCP segment c trao i gia client v server. Trn hnh 3.30, chng ta coi s th t bt u ca client l 42 v ca server l 79. Nh ni trn, s th t ca segment chnh l s th t ca byte u tin trong trng d liu. Khi , segment u tin c gi t pha client s c s th t l 42; segment u tin c gi t pha server s c s th t l 79. S bin nhn l s th t ca byte tip theo trong dng d liu ang i nhn. Nh vy, ngay sau khi kt ni TCP c thit lp - nhng trc d liu thc s c gi, bn client s i byte c s th t 79 v bn server s i byte c s th t 42.

    Segment u tin c client gi ti server, cha mt byte m ASCII ca k t C trong trng d liu. Trng s th t ca segment u tin nhn gi tr 42. V client cha nhn c bt k d liu no t server, nn trng s bin nhn trong segment ny nhn gi tr 79.

    Segment th hai c server gi cho client. C hai im ch vi segment ny, u tin server bin nhn cho d liu va nhn c. Vi gi tr 43 trong trng s bin nhn, server bo cho client rng n nhn ng tt c cc byte c s th t khng vt 42 v by gi ang ch nhn byte th 43 . Th hai l segment ny s cha li k t C (phn hi li) Lc y trng d liu ca segment th hai cha m ASCII ca k t C. Gi tr trng s th t ca segment th hai ny l 79, l s th t ca byte u tin trong dng d liu chuyn t server sang client. Ch rng bin nhn cho d liu t client ti server c t ngay trong segment cha d liu t server ti client. y gi l bin nhn ghp ui (piggybacking).

    Segment th ba c gi t client ti server. Mc ch duy nht ca n l bin nhn d liu nhn c t server (ch segment th hai cha d liu l k t C t server ti client). Segment th ba c trng d liu rng (bin nhn khng i km vi d liu gi n server). Trng s bin nhn ca segment ny nhn gi tr 80 v client nhn c tt c cc byte c s th t khng vt 79 v ang i byte c s th t 80. C l bn nghe tht khng bnh thng khi segment ny cng c s th t khi n chng cha d liu. Nhng tiu TCP c trng s th t, nn phi t gi tr no vo trong trng ny.

  • Hnh 3.30 S th t v s bin nhn trong v d Telnet

    5. Truyn d liu tin cy

    Dch v tng mng ca Intemet khng tin cy: IP khng m bo vic chuyn datagram, khng m bo gi datagram ng th t cng nh khng m bo tnh ton vn d liu. Vi dch v IP, datagram c th b trn ti b m router v o khng bao gi n c ch, d liu c th n khng ng th t hay cc bit trong datagram c th b li. Bi v segment ca tng giao vn c t trong IP datagram truyn qua mng nn segment ca tng giao vn cng c th phi gp nhng vn nu trn.

    TCP to ra mt ng truyn d liu tin cy trn dnh v khng tin cy ca IP. Dch v truyn d liu tin cy ca TCP m bo dng d liu ti tin trnh nhn khng c li, lin tc, khng trng gp d liu, ng th t. C ngha l dng byte nhn c ging ht dng byte gi i. Mc ny nghin cu cch thc cung cp dch v truyn d liu tin cy ca TCP. Chng ta s thy rng dch v truyn d liu tin cy ca TCP s dng rt nhiu nguyn l c bn nghin cu cc mc trn.

    n gin, chng ta coi kt ni TCP gia hai my A v B chuyn d liu t my A ti my B. Ti pha gi (my A), thc th TCP ly d liu ca tng ng dng, ng gi trong cc segment v chuyn cho tng mng. Do nhn d liu t tng ng dng, ng gi d liu trong cc segment v gi segment i chnh l s kin quan trng u tin m thc th TCP bn gi phi x l. Ngay sau khi chuyn segment cho IP, TCP khi ng timer cho segment . Thi gian i ht (timeout) gy ra mt ngt ti my A. TCP phn ng vi s kin timeout, y chnh l s kin

  • th hai m bn gi TCP phi x l bng cch truyn li segment gy ra ngt thi gian.

    S kin th ba m bn gi TCP phi x l l nhn c mt segment bin nhn (ACK) t bn gi (chnh xc hn l mt segment cha gi tr trng bin nhn ACK hp l) y, thc th TCP pha gi phi quyt nh l ACK ln u tin nhn c (tc l bin nhn cho mt segment gi nhng cha c bin nhn) hay ch l ACK trng lp (bin nhn li mt gi tin tng c bin nhn). Trong trng hp l ACK u tin th bn gi s bit rng tt c cc byte c s th t khng vt gi tr bin nhn va nhn c c nhn ng ti pha bn nhn. Khi , bn gi c th cp nht bin trng thi TCP kim sot s th t ca byte cui cng m n cho rng c nhn chnh xc v theo ng th t ti pha bn nhn.

    TCP cung cp ng truyn tin cy bng cch s dng ACK v timer. TCP bin nhn cho d liu c nhn chnh xc, v truyn li segment nu cho rng segment hay bin nhn tng ng ca n b mt hoc c li. Phin bn hin thi ca TCP cng c c ch NAK n, y la c ch truyn li nhanh ca TCP khi nhn c 3 ACK cho cng mt segment c gi. TCP s dng s th t cho php bn nhn xc nh segment b mt hoc trng lp. Ci ny tng t nh trng hp giao thc truyn d liu tin cy ca chng ta. TCP khng chc chn c segment hay bin nhn ca n b li, b mt hay ch n tr, n x l ging nh nhau: truyn li.

    TCP cng thc hin vic gi lin tc (c ch ng ng), cho php bn gi c th gi nhiu segment m cha cn nhn bin nhn ngay. C ch nay cho php nng cao ng k hiu sut ca n truyn. S lng ti a cc segment c gi cha cn bin nhn ngay ph thuc vo c ch kim sot lu lng v kim sot tc nghn ca TCP.

    hiu v phn ng ca bn gi khi nhn c ACK trng lp, u tin chng ta phi xt ti sao bn nhn gi ACK trng lp. Bng 3.1 tm tt cc chnh sch chung ca thc th TCP nhn. Khi bn nhn TCP nhn segment c s th t ln hn s th t ng th t ang c mong i, n pht hin c on trng trong dng d liu - ngha l thiu segment. V TCP khng s dng bin nhn ph nh (NAK) nn bn nhn khng th gi bin nhn ph nh. Thay vo , n bin nhn li byte ng th t cui cng m n nhn c (to ra ACK trng lp). Nu bn gi TCP nhn c 3 ACK trng lp cho cng mt segment, n s cho rng segment ngay sau segment c bin nhn ba ln b mt. Trong trng hp ny, TCP thc hin c ch truyn li nhanh (fast retransmit) [RFC 258], gi li segment b cho l mt trc khi timer ca segment ht hn (kt thc).

    /* assume sender is not contrained by TCP flow or congestion control, that data from above is less than MSS in size, and that data transfer is in one direction only

    */ sendbase = initial_sequence number

  • nextseqnum = initial_sequence number loop (forever) { switch (event) event: data received from application above create TCP segment with sequence number nextseqnum start timer for segment nextseqnum pass segment to IP nextseqnum = nextseqnum + length(data) break; /* end of event data received from above */ event: timer timeout for segment with sequence number y retransmit segment with sequence number y compute new timeout interval for segment y break: /* end of timeout event */ event: ACK received with ACK field value of y if (y > sendbase) { /* cumulative ACK of all data up to y */ cancel all timers for segments with sequence numbers < y sendbase = y } else {/* a duplicate ACK for already ACKed segment */ Increment number of duplicate ACKs received for y If (number of duplicate ACKs received for y == 3) { /* TCP fast retransmit */ Resend segment with sequence number y Restart timer for segment y } } break; /* end of ACK received event */ } /* end of loop forever */

    Hnh 3.31 Bn gi ca TCP

    S kin Hnh ng tip nhn ca TCP

    Segment n c s th t l s th t mong mun. Tt c d liu n s th t mong mun c bin nhn. Khng c khong trng trong d liu nhn c

    Tr hon ACK. i segment ng th t tip theo trong khong thi gian 500ms. Nu segment ny khng xut hin mi gi ACK

    Segment n c s th t l s th t mong mun. Segment n trc ang i gi bin nhn. Khng c khong trng trong d liu nhn c

    Ngay lp tc gi i ACK tch lu duy nht bin nhn cho c hai segment ng th t.

    Segment khng ng th t n, c s th t cao hn s th t mong mun nhn. Pht hin c khong trng d liu.

    Ngay lp tc gi i ACK trng lp v ch ra s th t ca byte mong mun nhn tip theo.

  • Segment n lp y mt phn hoc ton b trng trong d liu nhn c

    Ngay lp tc gi i ACK bin nhn cho on d khong liu ng th t lin tc ln nht nhn c

    Hnh 3.32 Truyn li vi mt ACK

    Chng ta kt thc tho lun y xem xt vi trng hp n gin. Gi s rng segment ny c s th t l 92 v c 8 byte d liu. Sau khi gi segment ny, my A ch mt segment ACK vi gi tr bin nhn 100 ca my B. Mc d segment gi t my A n my B nhng ACK gi t my B n my A b mt. Trong trng hp ny, khi ht thi gian i, my A truyn li mt segment ging ht cho B. D nhin khi nhn c segment truyn li, my B s pht hin s trng lp nh trng s th t. V vy thc th TCP trn my B s loi b segment truyn li.

    Trong trng hp th hai, my A gi hai segment lin tip. Segment u tin c s th t l 92 v 8 byte d liu, segment th hai c s th t l 100 v 20 byte d liu. Gi s c hai segment ny u n my B nguyn vn v my B gi bin nhn ACK ring r cho tng segment. ACK cho segment u tin c s bin nhn l 100 v cho segment th hai l 120. Li gi s rng c hai ACK u khng n c my A trc khi ht thi gian i ca segment u tin. Khi ht thi gian i, my A gi li segment u tin c s th t 92. Vy my A c gi li segment th hai khng ? Theo quy tc m t trn, my A ch gi li segment th hai nu ht thi gian i trc khi ACK c s bin nhn 120 hoc ln hn n. V vy, nh minh ho trn hnh 3.33, nu ACK th hai khng mt v n trc timeout ca segment th hai th my A s khng phi gi li segment th hai.

  • Trong trng hp th ba v cng l trng hp cui cng, gi s my tnh A gi hai segment ging nh trong v d hai. ACK ca segment u tin b mt, nhng trc khi ht thi gian i ca segment u tin, my A nhn c ACK c s bin nhn 120 - do my A hiu rng my B nhn c tt c cc byte n tn byte th 119, v vy my A khng phi gi li segment no trong hai segment.

    Hnh 3.33 Segment khng cn truyn li v ACK n trc thi ht thi gian i

    Mc d trong phn trc chng ta ni TCP l giao thc kiu Go-Back-N v cc gi tr bin nhn mang tnh tch lu v bn nhn khng bin nhn cho cc segment nhn ng nhng khng theo s th t. TCP bn gi ch cn ghi nh s th t nh nht ca byte c gi nhng cha c bin nhn (sendbase) v s th t cho byte tip theo s c gi i (nextseqnum). Tuy nhin cn lu rng mc d thnh phn truyn d liu tin cy ca TCP ging Go-Back-N, nhng khng phi ging hon ton. phn bit mt s im khc nhau gia TCP v Go-Back- N, chng ta hy xem iu g s xy ra khi bn gi gi cc segment nn tip 1, 2 ..........N, tt c segment ny u c nhn ng th t v khng c li. Gi s ACK ca segment n

  • Hnh 3.34 ACK tch ly trnh vic truyn li segment u tin

    Gn y c mt s xut [RFC 2018; Fall 1996 ; Mathis 1996] m rng c ch bin nhn ca TCP cho ging kiu giao thc Selective Repeat. tng chnh trong nhng xut ny l cung cp cho bn gi nhng thng tin tng minh v segment no c nhn ng v segment no cha nhn c.

    6. Kim sot lu lng

    Nhc li rng, cp thit b u cui mi pha ca kt ni TCP u c b m d liu (buffer). Khi kt ni TCP nhn c ng mt dng byte lin tc (ng th t), n s t dng byte ny vo b m nhn (receive buffer). Tin trnh ng dng nhn tng ng s c d liu t b m ny, nhng khng nht thit l phi c ngay khi d liu n. C th tin trnh ng dng nhn phi thc hin nhiu tc v khc nn cha c c d liu trong b m. Nu ng dng c d liu chm th bn gi c th lm trn b m nhn do d liu c gi qu nhiu v qu nhanh. Chnh v l do ny TCP cung cp dch v kim sot lu lng (flow control) trnh hin tng bn gi lm trn b m bn nhn. Kim sot lu lng l qu trnh lm tng thch (matching) v tc : tng thch gia tc bn gi gi vi tc nhn ca bn nhn. Nh lu phn trc, bn gi TCP cng b gii hn do tc nghn trong mng IP, y chnh l c ch kim sot tc nghn (congestion control) ca TCP. Mc d kim sot lu lng ging kim sot tc nghn (hn ch tc gi ca bn gi), tuy nhin chng c thc hin vi nhng mc ch khc nhau. Nhiu ngi coi hai thut ng ny tng ng nhau, v vy ngi c nn xem xt k phn bit hai trng hp.

  • Hnh 3.35 Bin receive window v b m nhn

    cung cp c ch kim sot lu lng, TCP bn gi s dng bin receive window. y l gi tr m bn nhn bo cho bn gi bit ln vng m cn ri ca n. Trong kt ni hai hng, mi pha kt ni c gi tr receive window phn bit. Gi tr receive window ng, c ngha 1 n s thay i trong thi gian kt ni. Chng ta hy nghin cu gi tr receive window trong v d truyn file. Gi s my A gi mt file ln ti my B qua kt ni TCP. My B s khi to b m cho kt ni ny vi ln RcvBuffer. Tin trnh ng dng trn B c d liu t b m. Chng ta nh ngha mt s bin sau:

    LastByteread = s th t ca byte cui cng trong dng d liu m tin trnh ng dng trong my B c t buffer

    LastByteRcvd = s byte cui cng trong dng d liu n t mng v c trong receive buffer ca my B

    V TCP khng c php trn b m nn chng ta phi c :

    LastByteRcvd LastByteread < RcvBuffer

    Receive window l gi tr RcvWindow, l ln vng m ri:

    RcvWindow = RcvBuffer - [LastByteRcvd LastByteread]

    Bi v ln vng m ri thay i theo thi gian nn gi tr RcvWindow ng. Kt ni s dng bin RcvWindow cung cp dch v kim sot lu lng nh th no? my B bo cho my A ln vng ri m n c trong b m l bao nhiu bng cch t gi tr RcvWindow hin thi vo trong trng window ca tt c cc segment gi ti A. Ban u my B thit lp RcvWindow RcvBuffer. R rng t c iu ny th my B phi kim sot vi bin kt ni.

    My A cng c hai bin LastByteSent v LastByteAcked. lch gia hai bin ny, LastByteSent - LastByteAcked 1 s lng d liu cha c bin nhn m A gi qua kt ni. Bng cch khng ch s lng d liu cha c bin nhn nh hn

  • gi tr RcvWindow, A m bo khng lm trn b m ti B. Do vy trong sut thi gian kt ni, A phi m bo:

    LastByteSent - LastByteAcked

  • trong tiu nhn gi tr client_isn + 1. Cui cng, server chn s th t bt u ca mnh (server_isn) v t gi tr ny vo trng s th t trong tiu ca segment. Vi segment chp nhn kt ni, server ng nhn c t client gi SYN yu cu thit lp kt ni vi s th t bt u t client_isn. Chp nhn thit lp kt ni ny. S th t ca server bt u t server isn". i khi y c gi l SYNACK segment.

    Bc 3: Khi nhn c segment chp nhn kt ni, client cng khi to b m v cc bin phc v kt ni. Client gi segment th ba bin nhn segment chp nhn kt ni ca server (bng cch t gi tr server_isn+1 vo trng s bin nhn trong tiu ca TCP segment). Bit SYN c t gi tr 0 v kt ni c thit lp.

    Hnh 3.36 Giai on bt tay ba bc trong thit lp ng truyn ca TCP

    Sau khi thc hin 3 bc ny th client v server c th trao i segment cha d liu. Bit SYN trong cc segment ny c t gi tr 0. Nh vy, thit lp c kt ni hai my phi trao i 3 segment. V th th tc kt ni c xem

  • l qu trnh bt tay ba bc (three tay

    handshacke).

    Hnh 3.37 Kt thc kt ni TCP

    By gi chng ta xt n vic ng kt ni TCP. C hai tin trnh tham gia kt ni TCP u c th kt thc kt ni. Khi kt ni kt thc th cc ti nguyn (b m v cc bin TCP) trong my c gii phng. V d client quyt nh ng kt ni. Tin trnh ng dng client s a ra lnh ng. Khi TCP client gi mt segment TCP c bit n tin trnh server. y l FIN segment v c FIN trong segment ny c t gi tr 1. Khi server nhn c segment FIN, n s gi li cho client mt segment ACK bin nhn segment FIN ca client. K tip server gi li mt segment kt thc FIN (c bit FIN c t gi tr 1). Cui cng client gi segment ACK bin nhn segment FIN t server. Ti thi im ny th tt c ti nguyn ca hai my u c gii phng.

    Trong sut thi gian kt ni TCP, giao thc TCP chy trn mi my chuyn qua cc trng thi TCP (TCP state). Hnh 3.39 minh ho qu trnh thay i trng thi TCP xy ra bn pha client. TCP client bt u trng thi ng (CLOSED). ng dng bn pha client khi to mt kt ni TCP. iu ny i hi TCP client gi SYN segment ti TCP server. Sau khi gi SYN segment, TCP client chuyn sang trng thi SYN_SENT. Trong trng thi SYN_SENT, TCP client i SYNACK segment (bin nhn cho SYN segment ca n). Khi nhn c segment ny, TCP client chuyn sang trng thi ESTABLISHED. trng thi ESTABLISHED, TCP client c th gi v nhn nhng TCP segment cha d liu (l d liu thc s do ng dng to ra)

  • Hnh 3.38 Dng trng thi ca TCP

    Gi s ng dng client quyt nh ng kt ni (server tng t). Khi TCP client gi FIN segment v chuyn sang trng thi FIN-WAIT_1. Trong trng thi ny, TCP client i segment bin nhn t pha server. Sau khi nhn c segment ny, TCP client chuyn sang trng thi FIN_WAIT_2. Trong trng thi FIN_WAIT_2, TCP client i FIN segment t servr. Sau khi nhn segment ny, TCP client gi segment ACK bin nhn ti server v chuyn sang trng thi TIME_WAIT. Trong trng thi TIME_WAIT, TCP client c th gi li bin nhn ACK trong trng hp ACK trc b mt. Thi gian i trng thi TIME_WAIT ph thuc vo phn mm trin khai TCP, nhng thng nhn cc gi tr 30 giy, mt pht, hai pht. Sau khi ht thi gian i, kt ni chnh thc c ng v tt c ti nguyn pha client (bao gm c s hiu cng) c gii phng.

    Trong hai s bin i trng thi va nghin cu, chng ta tm hiu v c ch thit lp v gii phng ng truyn ca TCP nh th no. c th hiu su v chi tit c th tm c trong [Stevens 1994]

  • Hnh 3.39