Báječný svět počítačových sítí, část IV. - Rodina protokolů TCP/IP
Síťovou architekturou se rozumí celkový pohled na to, jak by počítačové sítě měly být řešeny a jak by měly fungovat. Zahrnuje představu o celkovém počtu vrstev, o tom co má každá vrstva dělat, i o tom jak má fungovat, resp. jaké protokoly má ke svému fungování využívat. V současné době je nejrozšířenější síťovou architektura ta, na které je postaven a na které funguje celosvětový Internet. Základní součástí této architektury jsou protokoly, souhrnně označované jako "rodina protokolů TCP/IP".Rodina protokolů TCP/IP je opravdu početná (má přes 100 "členů"), a neustále se rozrůstá o nově vznikající protokoly. Její základ však vznikl poměrně dávno, alespoň podle "počítačových měřítek" - již v polovině sedmdesátých let. Důvodem byla existence sítě ARPANET, kterou v USA nechali vybudovat (a také zaplatili) tamní vojáci, aby na ní odzkoušeli myšlenku tzv. paketového přenosu. Tedy myšlenku přenosu dat "po vhodně velkých kusech", označovaných právě jako pakety. Dnes tak fungují snad všechny datové a počítačové sítě, ale tedy to byla úplně revoluční myšlenka, která se musela někde odzkoušet. No a k tomu posloužila právě síť ARPANET.
Pro nás je podstatné také to, že když síť ARPANET splnila svůj účel a potvrdila životaschopnost paketového přenosu, její vlastnící (vojáci, resp. resort obrany USA) se rozhodli ji nerušit. Právě naopak, rozhodli se ji zachovat a ponechat akademické sféře (univerzitám) k používání a k řešení výzkumných úkolů. Dokonce aktivně podpořili to, aby se na ARPANET začaly napojovat další univerzity i celé akademické sítě.
K tomu skutečně došlo, a na zárodečný ARPANET se začaly postupně "nabalovat" další a další sítě. Výsledné soustavě vzájemně propojených sítí se pak začalo říkat Internet ….
Jak s tím ale souvisí protokoly TCP/IP? Tak, že když se vojáci v USA rozhodli nerušit ARPANET a předat ho do rutinního používání akademické sféře, bylo zapotřebí vyvinout nové protokoly, na kterých by tato síť fungovala. Původně totiž používala jen experimentální protokoly (hlavně protokol NCP, Network Control Protocol), které se pro rutinní provoz moc nehodily. No a tak resort obrany USA (DoD, Department of Defense) zadal tamní akademické sféře další výzkumný úkol, který také zaplatil ze svých peněz: vyvinout sadu nových protokolů, vhodných pro rutinní používání ARPANETu.
Takovéto zadání přišlo v první polovině sedmdesátých let. V roce 1980 již byla koncepce protokolů TCP/IP připravena, a resort obrany ji odsouhlasil jako "tu správnou" koncepci, na kterou musí celý ARPANET přejít. Na to ponechal ještě dva roky - a k 1. lednu 1983 přestal rodící se Internet používat protokol NCP, a přešel již na výlučné používání protokolů TCP/IP.
S rodinou protokolů TCP/IP je úzce spojena i představa o počtu a struktuře vrstev, do kterých jsou tyto protokoly "zapasovány". Tuto představu ukazuje následující obrázek, který ji srovnává se sedmivrstvým referenčním modelem ISO/OSI.
Protokoly TCP/IP tedy předpokládají existenci pouze čtyř vrstev:
- Aplikační
- Transportní
- Síťové (označované též jako "IP vrstva")
- Vrstvy síťového rozhraní
Z těchto čtyř vrstev však protokoly TCP/IP "obsazují" jen tři nejvyšší. U nejnižší vrstvy (vrstvy síťového rozhraní) se počítá s tím, že zde budou využity takové přenosové mechanismy, jaké jsou k dispozici, a které "pochází odjinud" (tj. nejsou součástí TCP/IP). Může jít třeba o Ethernet, o Wi-Fi, o technologie ATM či FR, nebo o xDSL (ADSL) atd.
Přenosové služby, které zajišťuje vrstva síťového rozhraní, umožňují přenášet "kusy dat" (označované jako rámce) mezi sousedními uzly. Tedy mezi počítači, které mezi sebou mají přímé spojení. Na tom pak staví síťová vrstva, která již zajišťuje přenos "kusů dat" (nyní již označovaných jako pakety) nejen mezi přímými sousedy, ale mezi libovolnými dvěma uzly.
Musí tedy hledat nejvhodnější cestu od odesilatele až ke koncovému příjemci (zajišťovat tzv. směrování, anglicky: routing). Když vhodnou cestu najde, zajistí postupný přenos paketu přes případné mezilehlé uzly. To dělá tak, že pro každý "přeskok" vloží svůj paket do rámce, a požádá vrstvu síťového rozhraní o přenesení rámce i s jeho obsahem k přímému sousedovi. Zde je obsah rámce (paket) vybalen, předán zdejší síťové vrstvě, a ta znovu rozhodne, kterým směrem jej bude předávat dál. Tento princip naznačuje obrázek.
Rodina protokolů TCP/IP "obsazuje" síťovou vrstvu především protokolem IP (Internet Protocol). Ten je pro celou rodinu protokolů natolik významný a charakteristický, že se postaral i o její pojmenování. Ve zkratce TCP/IP je za lomítkem jméno právě tohoto protokolu.
Po protokolu IP jsou také pojmenovány pakety, přenášené na úrovni síťové vrstvy - říká se jim IP pakety, nebo také IP datagramy.
Síťová vrstva, alias IP vrstva, je poslední vrstvou (počítáno odspodu), která se ještě vyskytuje ve všech uzlech - jak ve vnitřních uzlech přenosové sítě (v tzv. směrovačích), tak i v koncových uzlech (což mohou být například pracovní stanice uživatelů). Vyšší vrstvy, konkrétně vrstva transportní a vrstva aplikační, pak jsou přítomné již jen v koncových uzlech sítě.
Transportní vrstva má na starosti vzájemnou komunikaci koncových uzlů. Pokud je to po ní požadováno, zajišťuje například spolehlivost přenosů. Tedy to, aby se přenášená data po cestě neztratila, ani nějak nepoškodila. Kromě toho také transportní vrstva rozlišuje mezi různými entitami v rámci jednoho uzlu. To znamená, že příchozí data rozděluje těm aplikacím, běžícím na daném počítači, kterým jsou určeny. Obdobně přejímá data, určená k odeslání, od jednotlivých počítačů, a předává je k přenosu síťové vrstvě. Ta již nerozlišuje mezi jednotlivými odesilateli a příjemci, a každý uzel sítě považuje za dále nedělitelný celek.
Na úrovni transportní vrstvy jsou v rámci TCP/IP provozovány hned dva hlavní transportní protokoly:
- UDP (User Datagram Protocol)
- TCP (Transport Control Protocol)
Právě protokol TCP je vedle protokolu IP tím, který se dostal do názvu celé rodiny protokolů TCP/IP.
Na úrovni aplikační vrstvy jsou provozovány jednotlivé aplikace. Nikoli ovšem celé, ale jen ty jejich části, které potřebují být navzájem kompatibilní. Třeba u elektronické pošty jde o celé poštovní servery a ty části poštovních klientů, které zajišťují odesílání, přenos a příjem jednotlivých zpráv. Uživatelské rozhraní, které uživatelům umožňuje zprávy číst, tisknout, různě třídit, archivovat atd., již není součástí aplikační vrstvy a nemusí být standardizováno. Díky tomu pak mohou být uživatelská rozhraní jednotlivých aplikací různá, s různým rozsahem funkcí a různým uživatelským komfortem.
Naopak třeba formát zpráv a jejich přenos musí být důsledně sjednoceny (standardizovány), aby se daly přenášet mezi jednotlivými poštovními servery, a aby jim "rozuměli" všichni poštovní klienti.
Chceme-li správně pochopit základní vlastnosti síťové architektury, založené na protokolech TCP/IP, musíme si nejprve říci něco o základní filosofii, ze které vyšli či kterou zvolili autoři TCP/IP. Pomůže nám to i k pochopení toho, proč se právě TCP/IP tak dobře ujalo v reálné praxi a vydrželo bez zásadnějších změn až do dnešních dnů.
Vraťme se znovu do doby, kdy protokoly TCP/IP teprve vznikaly. Když tehdy resort obrany USA zadával akademické sféře úkol vyvinout protokoly TCP/IP, staly se součástí zadání některé konkrétní požadavky.Třeba ten, aby se nepočítalo s žádným centrálním prvkem, na kterém by fungování sítě stálo, ale se kterým by také celé padalo. To je ostatně typické pro uvažování vojáků, kteří se bojí toho, že by nepřítel jako první napadl právě takovýto centrální bod, zničil ho a tím vyřadil z provozu celou soustavu sítí.
Pravdou je, že ani dnešní Internet nemá žádný centrální bod, který by jej řídil a bez kterého by nemohl existovat. Je značně distribuovaný, a díky tomu dokáže jako celek fungovat, i když některé jeho dílčí části jsou právě vyřazeny z provozu (nejspíše z důvodu technické závady). Nás ale zajímají protokoly TCP/IP, které nejsou přesně to samé jako Internet. Vznikly sice pro potřeby Internetu a v něm se také nejvíce rozšířily, ale mohou být použity i mimo Internet, v jakékoli třeba i samostatné počítačové síti.
Takže tedy: i samotné protokoly TCP/IP předpokládají distribuované řešení nejrůznějších funkcí, důležitých pro fungování celé soustavy sítí. Asi nejlépe je to vidět na způsobu, jakým je v rámci protokolu IP (tj. na úrovni síťové vrstvy) řešeno tzv. směrování, neboli hledání cest v síti, pro potřeby přenosu jednotlivých paketů. Neexistuje zde žádná centrální autorita, která by mezilehlým uzlům (tzv. směrovačům) říkala, kam mají dále předávat jednotlivé pakety, tak aby se dostaly ke svému cíli. Místo toho si potřebné směrovací informace získávají jednotlivé směrovače, ve vzájemné spolupráci. Když některý z nich vypadne, nebo se stane neprůchodným nějaký spoj, ostatní si najdou cestu jak výpadek obejít, resp. jak dopravit pakety na místo jejich určení jinou cestou.
Odpovídá to tzv. nespojovanému (anglicky: connectionless) způsobu fungování, při kterém nedochází k navazování spojení mezi odesilatelem a příjemce, a k vytyčení trasy, po které by se následně přenášela všechna data. Pokud by tomu tak bylo, a došlo by k nějaké změně v síti (třeba k výpadku nějakého dílčího spoje), muselo by se to nejprve zjistit a pak napravit - ukončení existujícího spojení a navázáním nového spojení.
U nespojovaného spojení se jednoduše "jede dál", a pro každý paket se nejvhodnější cesta jeho přenosu hledá vždy znovu, podle momentální situace. Díky tomu se může stát, že jednotlivé pakety budou protokolem IP přenášeny ke svému cíli různou cestou, a třeba i dorazí v jiném pořadí, než v jakém byly původně odeslány. Ale to už je na vyšších vrstvách, aby si je správně poskládali zpátky.
Nespojovaný způsob přenosu jednotlivých paketů velmi připomíná fungování běžné listovní pošty. Ta také přenáší jednotlivé dopisy (zásilky) nezávisle na sobě, aniž by předem "navazovala spojení" a dopředu zjišťovala, zda adresát vůbec existuje. Místo toho dopis od odesilatele nejprve převezme, a pak se jej snaží doručit tak, jak nejlépe umí. Také se klidně může stát, že dva současně odeslané dopisy jdou jinou cestou a přijdou svému adresátovi v různou dobu.
Právě kvůli této podobnosti s listovní poštou se také pakety protokolu IP přirovnávají k datagramům, a jsou označovány jako IP datagramy.
Velmi významnou charakteristikou síťového protokolu IP, který má na starosti přenos jednotlivých paketů (IP paketů, resp. IP datagramů), je to že negarantuje jejich doručení. Nedokáže totiž vždy zaručit, že bude mít vždy dostatek kapacit (přenosových i výpočetních) k přenesení všech paketů, které by přenést měl. Dokud mu tyto kapacity budou stačit, bude pochopitelně přenášet všechny pakety. Jakmile jich ale bude příliš mnoho, a jemu se nebude dostávat kapacit, má právo zahazovat ty pakety, které již nedokáže přenést.
Říká se tomu také princip "maximální snahy …" (anglicky: best effort), kvůli tomu že protokol IP se snaží využít všech prostředků a zdrojů, které má k dispozici. Dodatkem pak je "… ale nezaručeného výsledku", kvůli tomu že když maximální snaha protokolu IP nestačí, dochází k zahazování paketů. Z pohledu jejich odesilatelů a příjemců je pak výsledek paketů skutečně nezaručený.
Alternativou k fungování na principu "maximální snahy, ale nezaručeného výsledku …" by bylo garantování kvality přenosových služeb. Tedy situace, kdy konkrétní přenos by měl garantováno, že pro něj budou k dispozici takové a takové zdroje, včetně přenosových a výpočetních kapacit. Pak by se mu nemělo stávat, že na něj zdroje nevystačí a bude nutné některé jeho pakety zahazovat.
Na principu garancí a garantovaných přenosových služeb funguje tzv. přepojování okruhů, které je alternativou k přepojování paketů a používá se hlavně v telekomunikačních sítích. Jeho nevýhodou je ale velmi nehospodárné využití dostupných zdrojů. Ty jsou totiž vyhrazeny pro potřeby jednotlivých přenosů, bez ohledu na to zda jsou či nejsou skutečně využity. Když využity nejsou, nemohou být přenechány ostatním přenosům, které by je naopak mohly potřebovat.
Princip paketového přenosu, označovaný také jako "přepojování paketů", je na rozdíl od přepojování okruhů velmi efektivní právě proto, že účelně hospodaří s dostupnými zdroji, výše popsaným způsobem, na principu "maximální snahy ….".
Protokol IP, který funguje na principu "maximální snahy ….", navíc měří všem přenosům stejně. To znamená, že v situaci kdy se mu již nedostávají dostatečné zdroje, zahazuje pakety bez ohledu na to, co jsou zač - od koho pochází, komu mají být doručeny, či co v sobě nesou (jaký typ dat) atd.
Další významnou charakteristikou protokolu IP je to, že funguje způsobem, kterému se říká "nespolehlivý". Ne snad proto, že by se protokol IP nesnažil přenášet data spolehlivě, to opravdu ne. Otázkou je spíše to, jak se má zachovat, když už dostane nějaká data, která se při přenosu poškodila, typicky v důsledku nějaké chyby při přenosu. Protokol IP, který přijal poškozený paket a měl by jej dále zpracovat, má v principu dvě možnosti:
- postarat se sám o nápravu, obvykle tak, že si ten samý paket nechá znovu zaslat. Tato varianta přenosu se označuje jako "spolehlivá".
- nestarat se o nápravu a poškozený paket zahodit. Právě tato varianta je označována jako "nespolehlivá" .
Nespolehlivá varianta přenosu na první pohled nevypadá moc smysluplně. Autoři protokolů TCP/IP ale byli jiného názoru, a protokol IP koncipovali práv jako nespolehlivý. Tedy tak, že když narazí na poškozený paket, smí jej zahodit a nemusí se starat o nápravu.
Má to svou logiku v tom, že se zajištěním spolehlivosti by byla spojená nemalá režie. Hlavně opakovaný přenos, který by si příjemce poškozeného paketu vyžádal, by nejen spotřeboval další přenosovou kapacitu, ale hlavně by oddálil přenos dalších dat, a tím zvýšil nerovnoměrnost (nepravidelnost) v jejich doručování. Některý aplikacím přitom právě takovéto zpoždění a nerovnoměrnost může vadit více, než poškození či dokonce ztráta určitých dat.
Například při přenosu multimediálních dat (např. digitalizovaného zvuku či obrazu) je pravidelnost doručování jednotlivých částí dat podstatně důležitější, než jejich občasný výpadek. Lidské ucho či oko většinou ani nezaznamená nějaké drobné zkreslení zvyku či malou chybu v obraze, které velmi rychle odezní. Naopak by zaznamenalo jakoukoli změnu v rychlosti (pravidelnosti) přehrávání zvuku či obrazu. Lze to přirovnat k efektu zrychlování či naopak zpomalování magnetofonového pásku či filmového pásu. To je znát podstatně více, než občasný drobný kaz na pásce/pásku.
Autoři protokolů TCP/IP navíc vyšli z předpokladu, že protokol IP by se měl soustředit na to, co je jeho hlavní úkolem - tedy na přenos dat - a už by se neměl zabývat dalšími věcmi, které pro něj nejsou klíčové. Lze to vyjádřit i oblíbeným sloganem: protokol IP by se měl soustředit na svůj hlavní byznys, a neztrácet čas s podružnými věcmi. Mezi tyto "podružné věci" bylo zařazeno i zajišťování spolehlivosti.
Protokol IP, zajišťující přenos paketů na úrovni síťové vrstvy, tedy funguje nespolehlivě, a také nespojovaně. Skutečně se maximálně soustřeďuje "na svůj byznys", a nedělá nic jiného, než přenáší jednotlivé IP pakety. Počítá přitom s tím, že pokud budou vyšší vrstvy (resp. aplikace) potřebovat něco jiného - ať již spojovaný či spolehlivý způsob fungování, stále tu je ještě transportní vrstva, která může jejich přání vyhovět. Autoři TCP/IP skutečně zabydleli transportní vrstvu dvěma vzájemně alternativními transportními protokoly, mezi kterými si aplikace mohou vybírat.
Mohou zvolit protokol UDP (User DatagramProtocol), který je jen velmi lehkou nadstavbou nad protokolem IP a zachovává jeho způsob fungování - tedy nespojovaný a nespolehlivý. Prakticky to jediné, co k funkčnosti protokolu IP přidává, je rozlišování jednotlivých příjemců a odesilatelů v rámci daného uzlu (podle tzv. čísel portů, na rozhraní mezi transportní a aplikační vrstvou).
Naproti tomu druhý transportní protokol, protokol TCP (Transport Control Protocol), už funguje spolehlivě a spojovaně. Sám sice využívá nespolehlivých a nespojovaných služeb protokolu IP, ale zajišťuje navazování spojení mezi komunikujícími stranami (na úrovni transportní vrstvy), a stará se také o spolehlivost. Jinými slovy, pokud protokol IP něco nedoručí tak jak má, protokol TCP se postará o nápravu /vyžádá si opakované odeslání poškozených či úplně ztracených dat).
Hlavně ale: všechny aplikační protokoly mají na vývěr, zda v rámci transportní vrstvy využijí služeb transportního protokolu TCP, nebo protokolu UDP. Vybírat si mohou například podle toho, zda je pro ně důležitější spolehlivost přenosu (pak asi sáhnou po TCP), nebo zda před spolehlivostí dají přednost spíše rychlosti a pravidelnosti doručování (pak sáhnou po protokolu UDP.
Vraťme se ale ještě k protokolu IP a jeho fungování. Jak jsme si již uvedli, na samém počátku, kdy protokoly TCP/IP teprve vznikaly, měly americké univerzity velký zájem připojovat se na zárodečnou síť ARPANET i se svými již existujícími sítěmi. Ty ale byly dosti různorodé, založené na různých přenosových technologiích (odpovídajících vrstvě síťového rozhraní).
Proto autoři protokolů TCP/IP dostali v rámci svého zadání ještě jeden úkol: vyjít takovémuto připojování (resp. propojování) maximálně vstříc a umožnit připojení a provoz protokolů TCP/IP nad jakýmikoli přenosovými technologiemi, schopnými přenášet data.
Dnes, s odstupem 30 let, lze konstatovat že se to autorům povedlo nadmíru dobře. Protokol IP, který "zabydluje" síťovou vrstvu, je skutečně velmi pružný a schopný fungovat "nad čímkoli". Ostatně, vystihuje to i slogan "IP over everything". Nad přenosovými technologiemi vrstvy síťového rozhraní přitom vytváří jakousi "jednotnou pokličku", která zastírá jejich specifické rozdíly a vytváří nad nimi jednotné přenosové prostředí. Díky tomu se pak protokoly vyšších vrstev (transportní vrstvou počínaje) nemusí vůbec zabývat tím, nad jakou technologií nižších vrstev vlastně fungují.
V době vzniku a rozvoje Internetu to mělo zásadní význam pro připojování dalších sítí k ARPANETu. Dnes se této vlastnosti s úspěchem využívá k tomu, aby se lidé mohli připojovat k celosvětovému Internetu opravdu nejrůznějšími způsoby, jaké mají právě k dispozici - třeba přes vytáčenou telefonní linku, před ADSL, přes Wi-Fi, přes kabelovou televizi atd. Ve všech případech je nad uvedenými přenosovými technologiemi nejnižší vrstvy (vrstvy síťového rozhraní) provozován "jednotný" protokol IP, a nad ním již standardním způsobem ostatní protokoly.
Protokoly TCP/IP byly navrženy opravdu dobře, a v praxi se velmi dobře ujaly. Prakticky bez jakýchkoli zásadnějších změn vydržely až do dnešní doby. Samozřejmě se dále vyvíjely, ale "inkrementálním" způsobem, tj. postupným přidáváním dalších a dalších vlastností a schopností, a nikoli zahazováním celých předchozích řešení a zahajováním "od základů". Snad jedinou výjimkou jsou adresy, používané na úrovni síťové vrstvy (tzv. IP adresy). Pro ně bylo vyhrazeno 32 bitů, což ve své době představovalo značnou redundanci (nadbytečnost). Později ale, vzhledem k fenomenálnímu úspěchu celosvětového Internetu, se spotřeba IP adres zvýšila natolik, že začalo hrozit jejich brzké vyčerpání. Našla se ale různá "úsporná" řešení, která úbytek IP adres výrazně zpomalila.
Přesto se muselo hledat i celkové řešení, které se našlo v podobě zcela nového síťového protokolu IP verze 6 (IPv6). Ten bohužel již není vůči stávajícímu protokolu IP (též: IP verze 4) inkrementální, ale musí jej nahradit. Existují však i scénáře pro jejich vzájemnou koexistenci a postupný přechod od jednoho protokolu ke druhému.
Velký úspěch protokolů TCP/IP vedl ještě k jednomu zajímavému jevu. K tomu, že snad všechny úspěšné aplikace a služby, které kdy vznikly v nějakém jiném prostředí než pro TCP/IP a Internet, byly časem převedeny (portovány) právě na platformu TCP/IP. Je to ostatně logické, když jde o aplikace které byly původně vyvinuty pro jiné přenosové sítě, a ty již nejsou být rozvíjeny a jsou naopak čím dál tím více nahrazovány právě sítěmi na bázi TCP/IP. Dnes je stav takový, že snad neexistuje žádná alespoň trochu smysluplná a uživatelná aplikace, která by ještě nebyla přenesena na platformu TCP/IP.
Platí to ostatně i pro tak "odlišné" aplikace a služby, jako je přenos živého hlasu a obrazu. Ty byly dlouhou dobu doménou telekomunikačních sítí, fungujících na principu přepojování okruhů. Dnes se ale čím dál tím více prosazují i do síti s přepojováním paketů, a ponejvíce právě do sítí na bázi protokolů TCP/IP.
Nepříliš správně se pro celý tento trend ujal slogan "Everything over IP" (doslova "cokoli nad IP", což není úplně pravda, protože mezi protokolem IP a samotnými aplikacemi jsou ještě transportní protokoly (TCP nebo UDP). Nicméně i zkratky typu "něco nad IP" jsou dnes již běžně zažité a také používané. Příkladem může být zkratka VOIP (Voice over IP), označující přenos hlasu prostřednictvím protokolu IP.