Při přenosech dat je třeba zajistit, aby příjemce správně rozpoznal a
vyhodnotil to, co mu odesilatel vlastně posílá. To se zajišťuje jinak u
synchronních přenosů, jinak u přenosů asynchronních či arytmických. A co je
bitový proud (bitstream) a jak fungují isochronní a ne-isochronní přenosy?
Každý přenos digitálních dat je ve své podstatě přenosem jednotlivých bitů.
Alespoň na nejnižší úrovni (na úrovni fyzické vrstvy) nás ještě nezajímá, zda
jednotlivé bity nějak "patří k sobě" (třeba proto, že společně tvoří nějaký
datový rámec či paket) a každý z nich přenášíme samostatně a nezávisle na
ostatních bitech.
Přenos každého jednotlivého bitu ale vždy určitou dobu trvá, resp. má nějakou
délku v čase. Pokud by tomu tak nebylo a přenos každého bitu by trval jen
nekonečně krátký okamžik, mohli bychom dosahovat nekonečně velkých přenosových
rychlostí.
Místo toho musíme v praxi počítat s tím, že přenos každého bitu probíhá po
určitý časový interval, kterému se ne náhodou říká "bitový interval". Během
tohoto bitového intervalu se příjemce musí rozhodnout, zda vyhodnotí přijímaný
bit jako 1 nebo 0. Můžeme si to představit tak, že někde uprostřed tohoto
intervalu příjemce sejme stav přenášeného signálu a podle něj se rozhodne, zda
jde o 1 či 0.
Potřeba synchronizace
Již na této jednoduché představě (vzorkování přijímaného signálu během bitového
intervalu) si můžeme názorně ukázat jedno velké nebezpečí. Příjemce totiž musí
správně odměřit začátek i konec každého bitového intervalu, aby se správně
"trefil" se vzorkováním přenášeného signálu.
Asi není těžké si představit, co by se stalo, pokud by příjemce odměřil bitový
interval nesprávně, v důsledku pomalejšího nebo naopak rychlejšího "tikotu"
svých hodinek strefil by se do jiného bitového intervalu a vyhodnocoval
(vzorkoval) by stav signálu v době, kdy již reprezentuje nějaký jiný bit.
Něčemu takovému se říká "ztráta synchronizace" a je to samozřejmě nežádoucí. Co
je naopak žádoucí, resp. pro korektní přenos dat nutné, je udržování
synchronizace během přenosu všech relevantních datových bitů. Můžeme si to
představit také tak, že obě strany (odesilatel i příjemce) mají u sebe vlastní
hodinky, pomocí kterých odměřují jednotlivé bitové intervaly a tyto hodinky
musí tikat v dostatečném souběhu (tzv. synchronně), aby se navzájem příliš
nerozešly a nedošlo k výše popisované nežádoucí situaci (ztrátě synchronizace).
Arytmický přenos
Požadavek na zajištění potřebné synchronizace nemusí nutně znamenat, že by
pomyslné hodinky na straně odesilatele a příjemce musely tikat ve vzájemném
souladu (synchronně) trvale, po libovolně dlouhou dobu. Požadovaného efektu lze
dosáhnout i tak, že přenos dat bude probíhat po částech (po určitých skupinách
bitů) a potřebná synchronizace bude udržována pouze po dobu přenosu těchto
skupin bitů.
Znamená to tu výhodu, že pokud budou uvedené skupiny bitů dostatečně malé,
nebudou na přesnost hodinek příjemce kladeny nijak extrémní nároky. Postačí,
když se vhodně seřídí na začátku každé jednotlivé skupiny bitů a vydrží tikat v
potřebném tempu alespoň po dobu přenosu této krátké skupiny. Pak se už hodinky
příjemce mohou klidně rozejít (ztratit synchronizaci s hodinkami odesilatele),
protože na začátku další skupiny bitů dojde k novému seřízení, a vše se opakuje.
To už jsme ale popsali princip tzv. arytmického přenosu. Skupinkám bitů, které
jsou tímto způsobem přenášeny, se v praxi říká znaky a mají vždy pevnou
velikost. Dnes je to nejčastěji 8 datových bitů, ale v úvahu připadá i pevné
nastavení na 7, 6 či třeba 5 bitů. Kromě toho se na začátek každého znaku
přidává jeden režijní bit, v roli tzv. start bitu. Právě na něm se hodinky
příjemce seřídí a začnou odměřovat bitové intervaly. Na konci znaku pak může
(ale nemusí) následovat ještě tzv. stop bit pro zajištění určitého minimálního
odstupu od dalšího znaku, pak také tzv. paritní bit, sloužící potřebám
zabezpečení přenosu a umožňující detekovat případné chyby v přenosu. Ale k tomu
se dostaneme příště. Zdůrazněme spíše jinou věc: mezi přenosem jednotlivých
znaků mohou být libovolně dlouhé prodlevy. Nemusí tedy být dodržován stejný
"rytmus" odesílání jednotlivých znaků (stejné odstupy mezi nimi). Právě tomuto
aspektu vděčí tento způsob datového přenosu za své označení: arytmický.
Arytmický, nebo asynchronní?
Po přečtení předchozích řádků vás možná napadne, zda je popis arytmického
přenosu míněn vážně a zda nejde o nějaký omyl když se v praxi popsanému způsobu
přenosu se stejně velkými znaky, start bity atd. říká "asynchronní" a nikoli
"arytmický".
Je zde skutečně drobný terminologický zádrhel: věcně správné je označení
arytmický přenos, ale v praxi se mu neřekne jinak než asynchronní přenos. Je to
tedy další příklad toho, kdy se v počítačové branži říká A, ale myslí se B.
Jiným podobným příkladem je použití zkratky RAM (z anglického Random Access
Memory). Ačkoli správně označuje paměť s tzv. přímým přístupem (Random Access),
běžně se zkratkou RAM myslí paměť pro čtení i zápis, která je protipólem k
paměti ROM (Read Only Memory). Správně by ale paměť pro čtení i zápis měla být
označována jako paměť RWM (Read/
/Write Memory).
Ovšem zpět k asynchronním a arytmickým přenosům: skutečně asynchronní přenos je
takový, který zcela postrádá jakoukoli synchronizaci mezi příjemcem a
odesilatelem (proto: asynchronní). Jak ale potom příjemce pozná, kdy začíná a
kdy končí jednotlivé bitové intervaly? Pouze tak, že mu to odesilatel
explicitně řekne. Tedy kromě dvou stavů přenášeného signálu, které reprezentují
"užitečné" datové hodnoty 1 a 0, existuje ještě třetí možný stav, který
indikuje právě začátek a konec bitového intervalu. Je k tomu tedy zapotřebí
alespoň tzv. tříhodnotová logika, což je pro reálně využití problematické.
Spíše zajímavostí je pak to, že jednotlivé bitové intervaly u (skutečně)
asynchronního přenosu mohou být různě dlouhé, jak ostatně naznačuje i obrázek.
Otázkou ale je, k čemu by to bylo dobré.
Synchronní přenos
Vedle asynchronního (správně: arytmického) přenosu je běžně používanou
variantou také tzv. synchronní přenos, resp. "plně synchronní" přenos. Jak už
jeho označení napovídá, je synchronizace mezi odesilatelem a příjemcem
udržována dlouhodobě buď trvale, nebo alespoň po dobu přenosu (libovolně
velkého) datového bloku. Předností je pak vyšší efektivnost přenosu: jelikož se
synchronizace neztrácí, ale udržuje trvale, není nutné oddělovat od sebe
skupinky bitů (znaky). Místo toho je možné přenášet data "souvisle" po větších
datových blocích (v zásadě libovolně velkých).
Jak ale dosáhnout toho, aby odesilatel a příjemce zůstali trvale
synchronizováni, resp. aby se jejich hodinky nikdy nerozešly a stále "tikaly" v
dostatečném vzájemném souladu? Tady už se nedá aplikovat podobný přístup jako u
asynchronního přenosu (správně arytmického): seřídit (synchronizovat) na
začátku datového bloku obě strany (analogie start bitu) a pak se spoléhat na
to, že během přenosu celého bloku se hodinky příjemce nerozejdou více, než je
přípustné. To jde u malých znaků, tvořených jen několika bity, ale už ne u
datových bloků o stovkách bytů či ještě delších.
V případě (plně) synchronního přenosu je nutné udržovat synchronizaci průběžně.
Tedy průběžně seřizovat hodinky příjemce. Ale jak?
Principiálně nejjednodušší by bylo přenášet tikot hodinek odesilatele až k
příjemci, a to pomocí vhodného "hodinového" signálu (pravidelně se měnícího
signálu, který odměřuje tikot hodinek odesilatele). Pak by na straně příjemce
bylo vše jednoduché stav dat by se vyhodnocoval v okamžicích, určených tímto
hodinovým signálem.
Ovšem samostatný hodinový signál pro zajištění plné synchronizace je poměrně
velký luxus, který si většinou můžeme dovolit jen na krátkou vzdálenost. Ke
svému přenosu totiž vyžaduje samostatný vodič (resp. pár vodičů), což je na
delší vzdálenost příliš drahé. Proto se v praxi používá spíše jiné řešení,
které z hlediska efektu vyjde vlastně nastejno, ale vystačí si jen s jedním
vodičem. Spočívá v tom, že se použije pouze jeden vodič, po němž se přenáší oba
signály (hodinový i "datový") současně, sloučené do jednoho výsledného signálu.
Představu zachycuje obrázek.
Konkrétních způsobů, jak sloučit hodinový a datový signál do jednoho výsledného
signálu, existuje více. Poněkud nesprávně se tomu říká "kódování". Dvě taková
často používaná kódování ukazuje další obrázek. Jde o kódování Manchester a
tzv. diferenciální Manchester.
U kódování Manchester, které se používá například v původní desetimegabitové
verzi Ethernetu, jsou oba signály sloučeny tak, že v každém bitovém intervalu
dochází nejméně k jedné změně signálu. Právě tato změna (uprostřed bitového
intervalu) pak nese užitečná data jde-li o změnu z vysoké úrovně signálu do
nízké (ve smyslu obrázku), jde o 0, zatímco hodnota 1 je reprezentována opačnou
změnou (z nízké na vysokou úroveň). Současně tato změna slouží i potřebám
synchronizace při každé takové změně si příjemce může znovu seřídit své hodinky.
Aby však v každém bitovém intervalu mohlo dojít k takové změně signálu, která
potřebným způsobem reprezentuje přenášená data, může být nutná ještě jedna
další změna. Například když se přenáší více stejných bitů (více 0 nebo naopak
více 1), pak je každý z těchto bitů reprezentován stejně orientovanou změnou.
Aby však taková změna mohla v každém bitovém intervalu nastat, musí být vždy
provedena ještě jedna opačná změna viz předchozí obrázek.
Takže obecně musí na každý bitový interval (datový bit) připadnout dvě změny
přenášeného signálu. To je docela plýtvání, které se nevyhýbá ani druhé
variantě diferenciálnímu kódování Manchester. Zde je hodnota 0 reprezentována
změnou signálu (bez ohledu na pointaci této změny), hodnota 1 zase naopak
absencí změny signálu a to na začátku bitového intervalu.
Delší posloupnost hodnoty 1 by však mohla způsobit ztrátu synchronizace. Proto
se u diferenciálního kódování Manchester v každém bitovém intervalu provádí
ještě jedna změna (uprostřed bitového intervalu), která tentokrát již slouží
pouze potřebám časování. Takže zatímco u "normálního" (nikoli diferenciálního)
kódování Manchester slouží jedna hrana oběma účelům současně (a případná druhá
hrana vlastně jen připravuje půdu pro novou změnu), u diferenciálního kódování
Manchester má každý účel svou vlastní hranu.
Bit stuffing
Potřeba dvou změn signálu na každý datový bit, vynucená potřebami
synchronizace, je skutečně velký luxus. Ve své podstatě znamená, že
"spotřeba" (ve smyslu počtu změn, resp. modulační rychlosti) je dvojnásobná
oproti "užitku" (přenosové rychlosti v bitech za sekundu). Něco takového je
možné si dovolit tam, kde je přenosové kapacity dostatek, ale to není zdaleka
všude.
Snaha odstranit naznačené plýtvání je dobře patrná například u Ethernetu, jehož
původní desetimegabitová verze používá kódování Manchester, ale jeho rychlejší
verze (stomegabitový Ethernet, gigabitový Ethernet atd.) již používají
efektivnější metody.
Všechny tyto efektivnější metody jsou přitom založeny na společném principu:
místo toho, aby se "jedna změna navíc", nutná k zajištění synchronizace,
přidávala ke každému jednotlivému datovému bitu (resp. k "datové" změně
signálu), což vlastně představuje 100% režii, přidává se vždy až ke skupince
několika datových bitů (resp. "datových" změn signálu). Pokud se například
přidává ke čtyřem datovým bitům (změnám) jedna režijní změna pro potřeby
zajištění synchronizace, už místo 4 užitečných změn přenáší změn 5, a to
odpovídá o mnoho výhodnější režii ve výši 25 %. Takovéto kódování se pak
označuje jako 4B/5B a používá se konkrétně u stomegabitového Ethernetu.
Pokud bychom v tomto trendu pokračovali co možná nejdéle, mohli bychom se s
výší režie limitně přiblížit až k nule. V takovém ideálním stavu by byly
všechny změny využity pro "užitečná" data, s tím, že příjemce by udržoval
potřebnou synchronizaci právě a pouze podle těchto "datových" změn.
I v tomto ideálním stavu bychom ale stále museli myslet na to, že určitá
posloupnost dat (v závislosti na použitém způsobu kódování, resp.
reprezentování datových bitů prostřednictvím přenášeného signálu) by mohla
způsobit, že příjemce nedostane včas žádnou hranu a jeho hodinky se "rozejdou"
více, než je přípustné.
Řešení naštěstí není nijak komplikované a spočívá v umělém zařazení "bitu
navíc" těsně předtím, než by hrozila ztráta synchronizace. Naznačuje to i další
obrázek: pro případ, že 1 a 0 jsou reprezentovány vysokou, resp. nízkou úrovní
signálu a hodinky příjemce nevydrží v synchronizaci déle než 7 bitových
intervalů. V takovém případě se pak po každé posloupnosti sedmi bitů napevno
zařadí do přenášeného toku dat jeden opačný bit. V angličtině se této technice
říká bit stuffing, doslova "vkládání bitů".
Bitstream (bitový proud)
Když už víme, co je (plně) synchronní přenos, můžeme si jej poněkud zobecnit do
podoby jednoduché přenosové služby, realizované fyzickou vrstvou a označované
jako tzv. bitový proud (anglicky bitstream). Zajišťuje dvoubodové spojení (tedy
vede přímo mezi dvěma uzly), je obvykle obousměrný a chová se jako synchronně
fungující roura: z jedné strany se do ní postupně vkládají jednotlivé bity a z
druhé strany zase tyto bity ve stejném pořadí vystupují.
Hlavní výhodou takovéto přenosové služby, přenášející nijak nečleněný proudu
bitů, je fakt, že nad ní lze realizovat v zásadě jakoukoli přenosovou službu
vyšší úrovně. Tedy nejen přenos dat na principu přepojování paketů (či rámců),
ale také přenos dat na principu přepojování okruhů. První možnost je vhodná pro
datové služby (v praxi například pro přístup k internetu), zatímco druhá je
zase výhodná pro multimediální služby (například pro přenos hlasu či obrazu), s
potřebou garantované kvality a garantovaných parametrů (například přenosového
zpoždění a jeho pravidelnosti).
Bitový proud (bitstream) je tedy jakýmsi "ideálním podložím", nad kterým lze
budovat široké portfolio služeb od negarantovaných datových služeb až po
garantované služby, vhodné pro multimédia. Samotný bitstream se dá realizovat
například na místních smyčkách (účastnických vedeních) pomocí technologií xDSL.
V ČR však podobný bitstream není dostupný. Český Telecom, který vlastní
prakticky všechny místní smyčky, nabízí ostatním operátorům až přenosové služby
vyšší úrovně, realizované na principu přepojování paketů a fungující
negarantovaným způsobem. Jinými slovy: místo samotného "podloží" v podobě
bitstreamu, nad kterým by alternativní operátoři mohli implementovat své
vlastní přenosové služby (vhodné pro data i pro multimediální přenosy), jim
Telecom povinně přidá (a nechá si zaplatit) své vlastní přenosové služby
fungující na principu přepojování paketů, konkrétně na bázi protokolu IP.
Teprve tyto služby pak zprostředkovává alternativním operátorům na
velkoobchodní bázi.
Rozdíl je v tom, že pokud by alternativní operátoři měli přístup k bitstreamu,
mohli by sami určovat to, jaké přenosové služby nad ním vybudují. Pak by
například mohli nabízet ADSL přípojky k internetu s takovými rychlostmi a
stupni sdílení (agregace), jaké si zvolí sami. Místo toho jsou vázáni tím, co
rozhodl a určil Telecom (např. z hlediska rychlostí a agregace) a co zabudoval
do svých přenosových služeb nad bitstreamem.
Isochronní a ne-isochronní přenos
Pro docenění toho, jak univerzální je bitový proud (bitstream), si ještě
řekněme, co je tzv. isochronní přenos. Samotný přívlastek "isochronní" je možné
přeložit jako "probíhající ve stejném čase" nebo alespoň "rovnoměrně v čase".
Isochronní přenos je tedy takový, který doručuje data dostatečně rychle (s
garantovaným maximálním zpožděním) a také pravidelně (s garantovaným maximálním
rozptylem doby zpoždění). Naopak "ne-isochronní" je takový přenos, který toto
nenabízí.
Jistě není těžké nahlédnout, že multimediálním službám (například živému hlasu
a obrazu) svědčí isochronní přenosy, zatímco typickým datovým aplikacím (jako
třeba elektronické poště, přenosu souborů, WWW atd.) plně postačují i
neisochronní přenosy.
Ne-isochronní jsou přitom zejména přenosy na principu přepojování paketů
(anglicky packet switching). Tedy například přenosy, realizované protokolem IP,
z rodiny TCP/IP. To proto, že tento přenosový protokol negarantuje, jak dlouho
se jednotlivé pakety "zdrží po cestě", zejména uvnitř přepojovacích uzlů
(směrovačů). Všem totiž měří stejně, a tak se rychlost "zpracování" každého
jednotlivého paketu odvíjí od momentálního souběhu s dalšími pakety, od jiných
přenosů.
Naproti tomu isochronní jsou přenosy na principu tzv. přepojování okruhů
(anglicky circuit switching). Je to dáno tím, že při přepojování paketů je
každému přenosu vyhrazena určitá přenosová kapacita, o kterou již nemusí
soutěžit s jinými přenosy. Díky tomu může být "zdržení" dat po cestě dostatečně
malé a také dostatečně pravidelné (stejné).
Isochronní způsob fungování zachovává také tzv. časový multiplex, který jsme
popisovali v minulém dílu tohoto seriálu (každému dílčímu přenosu pevně
vyhrazuje určitou přenosovou kapacitu). Naproti tomu tzv. statistický multiplex
již isochronní není, protože obecně negarantuje přenosovou kapacitu žádnému z
dílčích přenosů (ale rozděluje ji podle momentální potřeby s tím, že se "nemusí
dostat na všechny").
Pokud bychom chtěli nějakým způsobem dodatečně vylepšit přenosové služby na
principu přepojování paketů, aby se co možná nejvíce blížily isochronnímu
způsobu fungování, pak by určité možnosti existovaly. Obecně se tomu říká
"zajištění kvality služeb" (QoS, Quality of Service), ale je to drahé a
komplikované.
Mnohem jednodušší a efektivnější je vybudovat souběžně oba druhy služeb
garantované služby isochronního charakteru a negarantované služby
ne-isochronního charakteru nad takovým "podložím", které jejich souběh
umožňuje. A takovým podložím je právě bitstream. Ten je svou podstatou sám
isochronní, a tak lze jeho kapacitu rovnoměrně rozdělit na dvě části. Jednu
můžeme využít pro isochronní přenosové služby (např. pro potřeby přenosu hlasu
a obrazu) a druhou pro ne-isochronní služby (pro datové služby). Nebo ji lze
využít celou pro ne zcela isochronní služby, ale s lepšími přenosovými
parametry. Podstatné je, že možností je celá řada a nad bit-streamem není žádná
z nich vyloučena.