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 |
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).
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.
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).
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.