VyÜlo v t²denφku: | COMPUTERWORLD |
╚φslo: | 5/93 |
RoΦnφk: | 1993 |
Rubrika/kategorie: | Co je Φφm ... v poΦφtaΦov²ch sφtφch |
Dφl: | 57 |
Nejprve si ale znovu p°ipome≥me, ₧e protokol TCP je protokolem transportnφ vrstvy, a ₧e je jednφm ze dvou alternativnφch protokol∙, kterΘ sφ¥ov² model TCP/IP na ·rovni tΘto vrstvy nabφzφ. P°ipome≥me si takΘ d∙vod tΘto nabφdky dvou alternativnφch protokol∙: jednotlivΘ aplikace majφ mo₧nost si vybrat, zda je pro n∞ v²hodn∞jÜφ pou₧φvat na ·rovni transportnφ vrstvy nespolehlivΘ (ale rychlejÜφ) p°enosovΘ slu₧by, zajiÜ¥ovanΘ protokolem UDP (User Datagram Protocol), nebo naopak pomalejÜφ, zato ale spolehlivΘ slu₧by protokolu TCP. V minulΘm dφlu naÜeho serißlu jsme se podrobn∞ji zab²vali protokolem UDP a naznaΦili jsme si, ₧e je vlastn∞ jen jednoduchou obßlkou nad p°enosov²mi slu₧bami sφ¥ovΘ vrstvy, kterß nijak nem∞nφ jejich kvalitu (tj. nespolehlivost) ani povahu (nespojovan² charakter), a pouze je zp°φstup≥uje entitßm aplikaΦnφ vrstvy. ┌kol protokolu TCP je z tohoto pohledu mnohem nßroΦn∞jÜφ - k dispozici mß stejnΘ nespolehlivΘ slu₧by na ·rovni sφ¥ovΘ vrstvy, ale s jejich pomocφ musφ sßm zajiÜ¥ovat slu₧by spolehlivΘ.
DalÜφ v²znamn² rozdφl mezi protokoly UDP a TCP spoΦφvß v tom, ₧e zatφmco UDP nabφzφ nespojovanΘ (connectionless) slu₧by, protokol TCP nabφzφ svΘ p°enosovΘ slu₧by jako spojovanΘ (connection-oriented). P°ed ka₧dou v²m∞nou dat mezi dv∞ma uzly tedy musφ b²t nejprve navßzßno spojenφ, a po skonΦenφ p°enosu musφ b²t toto spojenφ zase zruÜeno. V²hodami i nev²hodami spojovan²ch a nespojovan²ch slu₧eb jsme se zab²vali ji₧ ve 27. dφlu naÜeho serißlu.
Naproti tomu protokol TCP se sna₧φ nabφzet svΘ bezprost°edn∞ vyÜÜφ vrstv∞ p°enos jednotliv²ch byt∙. OΦekßvß tedy, ₧e entity aplikaΦnφ vrstvy mu na stran∞ odesilatele budou postupn∞ p°edßvat jednotlivΘ byty (p°esn∞ji: osmibitovΘ oktety), a na stran∞ p°φjemce si je zase budou po jednom vyzvedßvat. Tφm vznikß iluze proudu (anglicky: stream) jednotliv²ch byt∙, kter² navφc nenφ nijak strukturovßn - tj. vÜechny p°enßÜenΘ byty jsou pova₧ovßny za rovnocennΘ. Ve skuteΦnosti samoz°ejm∞ nejsou jednotlivΘ bity p°enßÜeny ka₧d² zvlßÜ¥. Protokol TCP na stran∞ odesilatele postupn∞ akumuluje jednotlivΘ byty do vhodnΘ vyrovnßvacφ pam∞ti (bufferu), a po jejφm napln∞nφ odeÜle cel² jejφ obsah najednou - v tzv. segmentu, jak se naz²vß blok, p°enßÜen² protokolem TCP. Analogicky na stran∞ p°φjemce, kde se datov² obsah segmentu uklßdß do vyrovnßvacφ pam∞ti, a jednotlivΘ byty jsou entitßm aplikaΦnφ vrstvy poskytovßny z tΘto vyrovnßvacφ pam∞ti. Cel² mechanismus sdru₧ovßnφ jednotliv²ch byt∙ do blok∙ je pln∞ v re₧ii protokolu TCP, kter² se p°enosem v∞tÜφch celk∙ sna₧φ optimalizovat vyu₧itφ p°enosov²ch cest. Pro vyÜÜφ vrstvu je tento mechanismus neviditeln² - vyÜφ vrstva pracuje s p°edstavou proudu jednotliv²ch byt∙.
Existujφ vÜak takovΘ aplikace, pro kterΘ prßv∞ naznaΦen² mechanismus nenφ p°φliÜ vhodn². P°φkladem mohou b²t tzv. vzdßlenΘ terminßlovΘ relace, uskuteΦ≥ovanΘ prost°ednictvφm sφt∞ - kdy jeden uzlov² poΦφtaΦ vystupuje v roli terminßlu jinΘho poΦφtaΦe a jednotlivΘ znaky, zadanΘ z jeho klßvesnice, posφlß ke zpracovßnφ tomuto druhΘmu poΦφtaΦi (kter² mu zase posφlß zp∞t vÜe, co mß b²t zobrazeno na obrazovce terminßlu). Kdyby v takovΘto situaci protokol TCP Φekal, a₧ vstupnφ znaky naplnφ vyrovnßvacφ pam∞¥ na stran∞ odesilatele a teprve pak je skuteΦn∞ odeslal, u₧ivatel by hodn∞ dlouho maΦkal klßvesy bez jakΘkoli odezvy. Protokol TCP vÜak i s tφmto poΦφtß, a nabφzφ odesilateli mechanismus (oznaΦovan² jako push), kter²m si aplikace m∙₧e vynutit skuteΦnΘ odeslßnφ dat i v p°φpad∞, ₧e p°φsluÜnß vyrovnßvacφ pam∞¥ nenφ jeÜt∞ napln∞na.
![]() |
Kdy₧ jsme se ve 30. dφlu zab²vali r∙zn²mi metodami potvrzovßnφ, p°edpoklßdali jsme, ₧e potvrzovan²mi jednotkami jsou celΘ bloky dat. V p°φpad∞ protokolu TCP se p°enßÜenΘ bloky dat oznaΦujφ jako segmenty, a mohou mφt r∙znou dΘlku. V p°φpad∞, ₧e n∞kter² segment nenφ p°enesen bezchybn∞ (resp. nenφ kladn∞ potvrzen do vyprÜenφ ΦasovΘho limitu), je jeho obsah vyslßn znovu, a po n∞m takΘ obsah vÜech nßsledujφcφch segment∙. Jde tedy o tzv. opakovßnφ s nßvratem (Go-Back-N), viz op∞t 30. dφl. PodstatnΘ ale je, ₧e p°i tomto opakovanΘm vysφlßnφ ji₧ jednou vyslan²ch dat nemusφ b²t dodr₧eny p∙vodnφ velikosti segment∙ - znovu vyslan² segment m∙₧e b²t v∞tÜφ ne₧ segment, vyslan² p∙vodn∞. To ale Φinφ potvrzovßnφ cel²ch segment∙ problematickΘ. Proto jsou v protokolu TCP potvrzovan²mi jednotkami dat nikoli celΘ bloky (segmenty), ale jednotlivΘ byty (p°esn∞ji: oktety)!!
KonkrΘtnφ zp∙sob implementace potvrzovßnφ v protokolu TCP vyu₧φvß pln∞ duplexnφho charakteru spojenφ na ·rovni transportnφ vrstvy. Jak naznaΦuje obrßzek 57.1., ka₧d² segment obsahuje krom∞ vlastnφch dat i ·daj o pozici prvnφho bytu t∞chto dat v rßmci celΘho proudu byt∙ (tzv. sequence number). S vyu₧itφm tohoto ·daje pak p°φjemce p∙vodnφ proud byt∙ rekonstruuje. Jednotlivß kladnß potvrzenφ se op∞t vztahujφ k cel²m byt∙m, a jsou vklßdßna do segment∙, p°enßÜen²ch v opaΦnΘm sm∞ru, ne₧ potvrzovanß data. Jde tedy o tzv. nesamostatnΘ potvrzovßnφ (anglicky: piggybacking), viz 30. dφl. KladnΘ potvrzenφ mß p°itom formu Φφsla pozice prvnφho bytu (v rßmci proudu), kter² p°φjemce oΦekßvß jako dalÜφ (tj. prvnφho bytu za poslednφm ·sp∞Ün∞ p°ijat²m) - jde o tzv. acknowledgement number.