Piggybacking
Jedním ze zajímavých momentů vzájemné komunikace dvou subjektů je otázka, kdy a jakou formou si mají obě strany posílat potvrzení o tom, že určitá konkrétní data byla doručena v pořádku, či zda byla nějakým způsobem poškozena. O potřebě a významu takovéhoto potvrzování jsme si povídali již v minulých dílech tohoto seriálu, a tak se dnes zastavme právě u konkrétní formy, jakou mají či mohou mít jednotlivá potvrzení.
Na první pohled je asi nejjednodušším řešením použití speciálních potvrzovacích „bloků" (rámců či paketů, podle úrovně, na které potvrzování probíhá), šitých na míru právě a pouze potřebám potvrzování. Samozřejmě musí být vždy možné je bezpečně odlišit od ostatních přenášených bloků (rámců, paketů), tedy zajistit tzv. transparenci dat, ale to není příliš velkým problémem - stačí opatřit potvrzovací bloky vhodnou hlavičkou, která říká co jsou zač (a také např. vhodným kontrolním součtem, aby se poznalo jejich případné poškození). Již ale z této poznámky vyplývá jedna důležitá skutečnost - pokud je to skutečně uděláno takto, tj. jednotlivá potvrzení jsou vysílána jako samostatné bloky, s vlastním specifickým formátem, vlastní hlavičkou a dalšími řídícími údaji, je s jejich přenosem spojena nenulová režie, projevující se především spotřebou dostupné přenosové kapacity. Je toto na závadu?
Představme si takový přenos, při kterém většina dat „teče" jedním směrem, zatímco druhým směrem je tok dat spíše sporadický. Zde by tedy byla většina potvrzování vysílána tím směrem, který je málo vytížen, a nenulová režie na jejich potvrzování by nemusela přinášet žádné významnější komplikace. Poněkud jinak tomu ale bude v případě intenzivnější a hlavně vyváženější komunikace, při které každá z obou komunikujících stran vysílá srovnatelný objem dat. Tady by již mohla dodatečná režie na samostatná potvrzení být znát.
Nicméně v situaci, kdy data „tečou" oběma směry, není vysílání potvrzení ve formě samostatných bloků nezbytností. Je například možné je „zabudovat" do datových bloků (rámců, paketů), přenášených v opačném směru - příjemce dat by tedy vždy počkal, až bude mít sám nějaká data k odeslání druhé straně, a k nim by pak „přibalil" i potvrzení o přijetí dat v původním směru. Obecně se tato technika označuje poněkud kuriózním termínem piggybacking.
Prostřednictvím techniky piggybacking lze výrazně snížit režii připadající na potvrzování - k přenášených datovým blokům stačí přidat jen skutečně nezbytné minimum bitů, sloužících potřebám potvrzování. Současně s tím se ale objevují i jiné druhy „dodatečné" režie - může se například stát, že jedna strana nebude mít právě co potvrdit, ale přesto bude muset do odesílaných dat zahrnout i povinné potvrzovací bity (nastavené tak, aby indikovaly že se nic nepotvrzuje). Další zajímavá komplikace pak nastává v opačném případě - když jedna strana přijme nějaká data, potřebuje jejich příjem potvrdit, ale právě nemá žádná vlastní data, která by chtěla druhé straně odeslat, a s nimi i potřebné potvrzení. Jak dlouho má takovýto příjemce čekat? Libovolně dlouho čekat nemůže, protože když původní odesilatel nedostane potvrzení do určitého časového limitu, usoudí že se ztratilo buď toto potvrzení nebo celý původní blok, a vyšle jej znovu. A to jistě není žádoucí. Takže v praxi většinou nezbývá než chvilku počkat, a pokud se do předem stanovené doby neobjeví požadavek na odeslání nějakých dat, ke kterým by bylo možné potvrzení „přibalit" (v angličtině se říká také: to be piggybacked), musí být odesláno samostatné potvrzení.