VyÜlo v t²denφku: COMPUTERWORLD
╚φslo:7/93
RoΦnφk:1993
Rubrika/kategorie: Co je Φφm ... v poΦφtaΦov²ch sφtφch
Dφl:58

zp∞t do archivu Φlßnk∙ | rejst°φk | p°edchozφ dφl | nßsledujφcφ dφl

Ji°φ Peterka: Co je Φφm ... v poΦφtaΦov²ch sφtφch (58):

Protokol TCP - II.

V minulΘm dφlu jsme se zaΦali zab²vat protokolem TCP. ╪ekli jsme si, ₧e svΘ bezprost°edn∞ vyÜÜφ vrstv∞ poskytuje p°enosovΘ slu₧by spolehlivΘho a spojovanΘho charakteru, i kdy₧ k jejich zajiÜt∞nφ m∙₧e sßm vyu₧φvat jen nespolehlivΘ (a nespojovanΘ) p°enosovΘ slu₧by na ·rovni sφ¥ovΘ vrstvy, poskytovanΘ protokolem IP. NaznaΦili jsme si takΘ, ₧e pot°ebnΘ spolehlivosti dosahuje protokol TCP pomocφ potvrzovßnφ a opakovanΘho vysφlßnφ chybn∞ p°enesen²ch dat. Dnes se zastavφme podrobn∞ji prßv∞ u zp∙sobu opakovßnφ p°enos∙.

P°ipome≥me si vÜak jeÜt∞ jednou to, co jsme si o konkrΘtnφm mechanismu potvrzovßnφ °ekli ji₧ minule: protokol TCP pou₧φvß tzv. kladnΘ potvrzovßnφ (positive acknowledgement), co₧ znamenß, ₧e potvrzuje pouze sprßvn∞ p°ijatß data, zatφmco na chybn∞ p°ijatß data nereaguje nijak. Odesilatel proto poznß, ₧e urΦitß data nebyla p°enesena sprßvn∞, a₧ po vyprÜenφ urΦitΘho ΦasovΘho limitu. SouΦasn∞ s tφm je ale dobrΘ si uv∞domit, ₧e takΘ kladnß potvrzenφ jsou sama p°enßÜena pomocφ stejn∞ nespolehliv²ch p°enosov²ch slu₧eb sφ¥ovΘ vrstvy, jako samotnß data. M∙₧e se proto stßt, ₧e urΦitß data jsou p°enesena bezchybn∞, ale "ztratφ" se jejich kladnΘ potvrzenφ. Odesilatel vÜak nemß mo₧nost oba tyto p°φpady rozliÜit. V₧dy musφ Φekat a₧ do vyprÜenφ ΦasovΘho limitu, zda nedostane kladnΘ potvrzenφ, a pokud ne, musφ data vyslat znovu.

Otßzkou ovÜem je, jak volit p°φsluÜn² Φasov² limit (timeout)? Bude-li p°φliÜ krßtk², m∙₧e dochßzet k situacφm, kdy data budou p°enesena bezchybn∞, ale jejich kladnΘ potvrzenφ dojde odesilateli p°φliÜ pozd∞ - a₧ po vyprÜenφ ΦasovΘho limitu, co₧ odesilatele p°inutφ znovu vyslat ·sp∞Ün∞ p°enesenß data. V opaΦnΘm p°φpad∞ - bude-li Φasov² limit p°φliÜ dlouh² - bude odesilatel zase zbyteΦn∞ dlouho Φekat, ne₧ si bude moci domyslet, ₧e se data nep°enesla sprßvn∞. V obou p°φpadech je v²sledkem neefektivnφ vyu₧itφ p°enosov²ch kapacit.

ProblΘm vhodnΘ volby ΦasovΘho limitu je navφc komplikovßn skuteΦnostφ, ₧e protokol TCP m∙₧e b²t pou₧φvßn v r∙zn²ch sφtφch, ve kter²ch se doby p°enosu mohou liÜit i v n∞kolika °ßdech. Nap°φklad v rychlΘ lokßlnφ sφti by p°φsluÜn² Φasov² limit m∞l b²t v²razn∞ kratÜφ ne₧ v rozlehlΘ sφti, kterß pou₧φvß relativn∞ velmi pomalΘ pevnΘ telefonnφ okruhy. Situace je navφc jeÜt∞ komplikovan∞jÜφ u vzßjemn∞ propojen²ch sφtφ (internets, s mal²m "i"), kde jednotlivΘ Φßsti p°enosovΘ trasy (route) majφ obecn∞ r∙znΘ p°enosovΘ kapacity, a kde se navφc trasa mezi dv∞ma koncov²mi ·Φastnφky m∙₧e v pr∙b∞hu p°enosu dynamicky m∞nit (nap°. v d∙sledku zahlcenφ Φi v²padku).

Adaptivnφ chovßnφ

Zp∙sob, jak²m se protokol TCP vyrovnßvß s problΘmem sprßvnΘ volby ΦasovΘho limitu pro opakovanΘ vysφlßnφ (retransmission), lze v prvnφm p°iblφ₧enφ charakterizovat jako adaptivnφ. TCP toti₧ pr∙b∞₧n∞ monitoruje skuteΦnΘ chovßnφ p°enosovΘ sφt∞, a podle n∞j se sna₧φ p°edvφdat jejφ chovßnφ i pro nejbli₧Üφ Φasov² ·sek. Tomu pak p°izp∙sobuje i svΘ chovßnφ.

TCP neustßle m∞°φ dobu obrßtky (RTT, round trip time) jako dobu od odeslßnφ dat do p°ijetφ kladnΘho potvrzenφ o jejich ·sp∞ÜnΘm doruΦenφ. ╚asov² limit pak uzp∙sobuje pr∙m∞rnΘ dob∞ obrßtky, kterou vypoΦφtßvß jako vß₧en² pr∙m∞r (weighted average) jednotliv²ch nam∞°en²ch dob obrßtky.

NejednoznaΦnost potvrzovßnφ

V minulΘm dφlu jsme si takΘ °φkali, ₧e protokol TCP nepotvrzuje celΘ segmenty (jak se naz²vajφ jφm p°enßÜenΘ bloky dat), ale jednotlivΘ byty (p°esn∞ji: oktety) v rßmci p°enßÜenΘho proudu (stream). To mß jeden zßva₧n² d∙sledek pro v²poΦet doby odezvy. P°edstavme si situaci, kdy odesilatel nedostane do ΦasovΘho limitu kladnΘ potvrzenφ o p°ijetφ urΦitΘ Φßsti dat, a tak je vyÜle znovu ve stejn∞ velkΘm segmentu. Dostane-li pak kladnΘ potvrzenφ, nenφ z n∞j schopen rozliÜit, ke kterΘmu segmentu se toto potvrzenφ vztahuje - zda jde o potvrzenφ poprvΘ vyslan²ch dat (kterΘ se n∞kde zdr₧elo), nebo zda jde ji₧ o potvrzenφ podruhΘ vyslan²ch dat (zatφmco poprvΘ vyslanß data se p°enesla s chybou, nebo se jejich kladnΘ potvrzenφ ztratilo). Potvrzovßnφ, pou₧φvanΘ protokolem TCP, je proto v obecnΘm p°φpad∞ nejednoznaΦnΘ (ambiquous).

Z pohledu zabezpeΦenφ spolehlivΘho p°enosu tato nejednoznaΦnost nijak nevadφ, ale problΘm vznikß p°i v²poΦtu doby obrßtky: mß tato b²t vzta₧ena k okam₧iku prvnφho vyslßnφ, nebo naopak k okam₧iku poslednφho opakovanΘho vyslßnφ urΦit²ch dat? Dß se ukßzat, ₧e ob∞ varianty jsou ÜpatnΘ - v p°φpad∞ tΘ prvnφ m∙₧e vß₧en² pr∙m∞r doby obrßtky r∙st nade vÜechny meze, zatφmco ve druhΘm p°φpad∞ sice konverguje k urΦitΘ koneΦnΘ hodnot∞, ale tato je menÜφ, ne₧ by sprßvn∞ m∞la b²t (praktickΘ implementace tΘto varianty ukazujφ, ₧e je tato hodnota p°ibli₧n∞ poloviΦnφ oproti sprßvnΘ, a protokol TCP pak vysφlß vÜechna data prßv∞ dvakrßt).

Karn∙v algoritmus

S jednoduch²m a elegantnφm °eÜenφm poprvΘ p°iÜel radioamatΘr Phil Karn, kdy₧ se sna₧il implementovat TCP/IP protokoly i pro prost°edφ radioamatΘrsk²ch paketov²ch sφtφ (co₧ se mu ostatn∞ povedlo - v²sledkem je znßm² programov² balφk KA9Q, nazvan² podle volacφ znaΦky svΘho autora).

MyÜlenka, se kterou Karn p°iÜel, je velmi jednoduchß - v p°φpad∞ nejednoznaΦnΘho potvrzenφ (tj. v p°φpad∞ opakovanΘho vyslßnφ ji₧ jednou vyslan²ch dat) v∙bec nem∞°it dobu obrßtky, a tudφ₧ i neuzp∙sobovat podle nφ Φasov² limit. Jin²mi slovy: pro stanovenφ ΦasovΘho limitu vyu₧φvat pouze ty p°φpady, kdy data byla vyslßna jen jednou, a je tudφ₧ jasnΘ, jak dobu obrßtky m∞°it.

I toto °eÜenφ vÜak ve svΘ ΦistΘ podob∞ nenφ p°φliÜ pou₧itelnΘ. P°edstavme si toti₧ situaci, kdy nap°φklad vlivem zm∞ny trasy Φi v²padku Φßsti p°enosov²ch kapacit nßhle vzroste zpo₧d∞nφ p°i p°enosu. Potvrzenφ nestihne p°ijφt vΦas, a tak jsou data vyslßna znovu - v d∙sledku toho se pak ale nem∞°φ doba obrßtky, a nijak se nem∞nφ ani Φasov² limit. Bude-li nßr∙st zpo₧d∞nφ trval², v²Üe uveden² algoritmus na n∞j v∙bec nezareaguje!

KonkrΘtnφ algoritmus, kter² Phil Karn navrhl, vÜak °eÜφ i tuto situaci (technikou, oznaΦovanou jako timer backoff): v okam₧iku, kdy zaΦne dochßzet k opakovanΘmu vysφlßnφ dat, p°estßvß tento algoritmus m∞°it dobu obrßtky, a nem∞nφ tudφ₧ ani vß₧en² pr∙m∞r t∞chto dob. ZaΦne ale zv∞tÜovat Φasov² limit (nap°. na dvojnßsobek po ka₧dΘm opakovanΘm vyslßnφ dat). Teprve v okam₧iku, kdy dφky v∞tÜφmu ΦasovΘmu limitu dostane kladnΘ potvrzenφ vΦas (tj. jako jednoznaΦnΘ potvrzenφ), zm∞°φ skuteΦnou dobu obrßtky, znovu zaΦne vypoΦφtßvat vß₧en² pr∙m∞r dob obrßtky, a tomuto pr∙m∞ru pak uzp∙sobφ Φasov² limit.


zp∞t do archivu Φlßnk∙ | rejst°φk | p°edchozφ dφl | nßsledujφcφ dφl
Tento Φlßnek m∙₧e b²t voln∞ Üφ°en, pokud se tak d∞je pro studijnφ ·Φely, na nev²d∞leΦnΘm zßklad∞ a se zachovßnφm tohoto dov∞tku. Podrobnosti hledejte zde, resp. na adrese http://archiv.czech.net/copyleft.htm