Počítačový svět prošel postupem času mnoha změnami, které dosti podstatně upravily jak chování počítačů samotných, tak jejich přístup k uživateli. V současnosti se ukazuje, že jedna z nejdůležitějších vlastností počítačů je jejich vzájemná propojitelnost a tím pádem dostupnost. Rozdíl v práci s počítačovou sítí a jednotlivými samostatnými počítači je obrovský.
Tak jak se vyvíjely požadavky na vzájemnou komunikaci, vyvíjely se hardwareové i programové systémy, které komunikaci realizovaly. Jedna z nejstarších univerzálních koncepcí komunikace začala vznikat již na začátku 60. let(!) v laboratořích americké armády — prvotním zadáním bylo, aby se zcela nezávislé počítače mohly navzájem domluvit pomocí sítě, která pracuje v různých prostředích a potenciálně nestabilně — jednotlivé spoje v síti mohou být nestálé (poruchové). Síť takového charakteru nemá žádné centrum a spoje mezi počítači vznikají interaktivně. Informace je rozprostřena v celé síti a mezi počítači se vyměňuje je-li to třeba. Taková organizace dat je vysoce stabilní vůči poruchám. Vznikly dva protokoly — IP pro přenos elementárních balíků dat a hledání cesty v síti a NCP pro řízení spojení. Pomocí těchto protokolů a telefoních linek vznikla síť amerického ministerstva obrany — ARPANET. NCP postupem času přestal v několika ohledech vyhovovat a byl záhy nahrazen novější variantou — TCP. To již byl konec 60. let.
Od té doby se TCP a IP téměř nezměnily (kromě drobností, které byly vynuceny například zvyšováním kapacit linek) a používají se čím dál více (od těch dob se používají ještě jazyk C a princip operačního systému UNIX). V současnosti je TCP a IP všeobecně přijatým celosvětovým standardem pro síťovou (i místní meziprocesovou) komunikaci — i technologie, které dříve pracovaly s jinými protokoly postupně přecházejí k TCP a IP.
Široce používaná zkratka TCP/IP nabývá běžně dvou následujících významů:
Na tomto místě je vhodné zmínit jednu jazykovou poznámku — možná se vám zdá podivné, že se v předchozím textu vyskytuje IP nebo TCP bez následujícího slova protokol. S češtinou je svízel — napíšete-li "IP protokol" nebo "LED dioda" dostanete po rozvinutí zkratek matoucí sousloví — "internet protocol protokol" nebo "light emitting diode dioda", ve kterých jsou významová slova zdvojena. Takto by to nikdo nikdy neřekl. V textu proto jsou vždy zkratky (vyjadřující jeden celý pojem) bez doplňujících českých slov.
TCP a IP jsou vždy realizovány v rámci nějakého síťového prostředí, které zajišťuje fyzický přenos dat mezi dvěma síťovými zařízeními. Služeb takového síťového prostředí IP (a TCP) využívá. Vzhledem k univerzálnosti IP je lhostejné, jaké vlastnosti použité prostředí má — stejně dobře je možné pomocí IP komunikovat jak přes sériovou linku, tak v sítích Ethernet, TokenRing, nebo ATM.
Základní částí TCP/IP komunikace je IP. Jeho hlavním úkolem je dopravit jeden blok dat — IP paket — z jednoho zařízení do druhého. IP se nezajímá o obsah přenášených dat a neví nic o jejich případné logické příslušnosti k vyšším strukturám. IP paket má typicky délku stovek slabik (byte), obecně platí, že délka paketu je právě taková, aby jej síťové prostředí bylo schopno přenést najednou. Takže v sítích Ethernet bude délka paketu asi 1 500 byte, na sériových linkách méně — například mezi 300 až 1 000 byte.
Paket při cestě z počítače do počítače potkává různá síťová prostředí, která mohou mít různou maximální délku paketu. IP v takovém případě automaticky zaručuje nejprve rozdělení a posléze opětovné složení dat jednoho paketu — tomuto procesu se říká fragmentace. Po sítích tedy putují IP pakety a IP fragmenty, přičemž mezi oběma pojmy není fyzický rozdíl (IP fragment je přenášen také jako IP paket) — jedná se logické dělení, které je zmíněno hlavně kvůli objasnění použitých pojmů.
Cesta sítí z počítače na počítač v drtivé většině případů není přímá (kromě jednoduchých lokálních sítí nikdy). Paket musí projít přes několik síťových zařízení, přičemž každé z nich musí předem vědět, kam paket dále poslat. IP proto musí být schopen rozlišovat v síti cesty a musí být schopen zvolit jednu z nich, která přiblíží paket k cíli. Tento proces (výběr cesty pro paket) se nazývá routing — směrování. Každé zařízení, které je schopno příchozí IP pakety posílat dále se protom nazývá IP router — IP směrovač. Ve skutečnosti je směrování rozlišeno do dvou logických kroků: nejprve se v síti automaticky ustavují vazby a informace o možných průchodech paketů — tento proces mají na starosti speciální směrovací protokoly a programy pro směrování — a posléze se při vlastním směrování IP paketu takto ustavená data jen použijí pro výběr nového postupného cíle. Informace o směrování se mezi směrovači vyměňuje dynamicky a automaticky, a celá struktura sítě se proto může přizpůsobovat aktuálnímu stavu — například výpadkům tras. Dynamické udržování směrovací informace je základní princip podporující stabilitu a robustnost spojů v IP sítích.
Zajímavé na popisovaných skutečnostech je, že nikde neexistují žádné centrální databáze nebo mapy aktuálních spojů. Každý ze směrovačů udržuje jen tu část informace, kterou sám využije a která je nutná pro jeho nejbližší okolí. Směrovač za zdí vaší kanceláře zcela stoprocentně netuší nic o poštovním serveru v Austrálii i přesto, že na něj zrovna míří vaše pošta. Veškeré údaje o cestách v síti jsou zcela distribuované, což opět vysoce napomáhá stabilitě sítě — vypadne-li jeden spoj nebo jeden směrovač, existuje většinou jiná cesta, jak dosáhnout cíle.
Důsledkem popisovaných fakt je skutečnost, že dva po sobě odeslané IP pakety mohou sítí projít zcela odlišnými cestami a mohou k cíli dospět v rozdílných okamžicích. Pošlete-li blok dat dlouhý 15 KB, přijde k cíli ve zcela náhodném pořadí nejméne 10 (ale spíše více) IP paketů. Navíc je docela dobře možné, že některý ze směrovačů krátkodobě vypadne a primární vysílající počítač některý paket pošle vícekrát. Tehdy k cíli přijde z několika míst několik shodných paketů. Všechny tyto potíže jsou však mimo dosah IP, jehož jediným cílem je dopravit sítí od zdroje k cíli jeden jediný paket. Řešení sekvence paketů a detekce násobných výskytů musí vyřešit nadřazený protokol — v tomto případě TCP.
Ne každý počítač v síti je směrovač. Směrování paketů je obecný a potenciálně náročný problém, který je možné řešit dostatečně kvalitně a uspokojivě rychle jen za použití specializovaných zařízení nebo programových balíků. Směrovač musí také splňovat mnohem více kritérií než počítač, který je k síti jen připojen, a navíc, směrování má význam jen v místech, kde se spojuje více různých sítí. V jedné jediné síti na sebe počítače dosáhnou přímo a nepotřebují k tomu žádný směrovač. Příklad — lokální síť podniku (například 10MBps Ethernet) obsahuje 20 počítačů, které spolu mohou okamžitě přímo komunikovat. Jejich připojení k Internetu realizuje 21. počítač, který stojí na rozhraní lokální sítě a vnějšího Internetu, a bude proto muset pracovat jako směrovač, aby počítače v lokální síti mohly posílat své pakety kamkoli. Stejně tak naopak — směrovač bude muset všechny příchozí pakety správně namířit na konkrétní vnitřní počítače. Všem dvaceti počítačům tedy slouží jeden jediný směrovač, který obsahuje všechny potřebné informace o toku paketů tam i zpět.
Počítače ve vnitřní (lokální) síti pro jednoduchost pracují s pakety dvojím způsobem — buď paket míří k počítači na stejné síti, a tehdy je paket odeslán přímo jemu, a nebo paket míří k počítači mimo lokální síť, a tehdy je odeslán směrovači. Ten teprve dokáže paket správně poslat dále. Všimněte si, že takový směrovač musí být rovněž součástí místní sítě, jinak by mu počítače svůj paket nemohly přímo poslat. Směrovač v takové konfiguraci je nazýván bránou — gateway. Přeje-li si počítač vnitřní sítě komunikovat se světem, musí mít ve své konfiguraci bránu správně definovánu.
Zatím bylo popsáno, jak IP sítě v principu pracují. V pozadí všech uvedených pravidel zůstala nejasná jedna skutečnost — jakým způsobem se počítače navzájem identifikují a jak se rozezná, kam paket míří a kam jej má směrovač poslat.
Ke všem těmto účelům slouží jedno 32bitové číslo, nazvané IP adresa. Každý počítač (samozřejmě je-li připojen k síti) musí mít IP adresu definovánu a každá síť rovněž. Je zřejmé, že přiřazení IP adres jednotlivým počítačům musí být globálně unikátní, jinak by nebylo možné rozhodnout, kterému z počítačů se shodnou adresou paket vlastně patří. Unikátnost IP adres je zajištěna pomocí administrativních pravidel (přidělování IP adres) a dynamicky na úrovni jednotlivých směrovačů — IP směrovač má právo ignorovat (odpojit) síť, která pravidla pro IP adresy porušuje.
IP adresa se obyčejně zapisuje v formě čtveřice desítkových čísel navzájem oddělených třemi tečkami. Každé číslo odpovídá jedné slabice (byte) 32bitové adresy a může proto nabývat hodnot 0–255. Tato forma zápisu IP adresy se nazývá "dotted-quad" — "tečkovaná čtveřice". Platné adresy jsou například 195.100.0.12 nebo 20.150.150.240, naopak adresa 194.270.13.32 je chybná.
Každý počítač patří do nějaké místní sítě. Jeho adresa proto musí korespondovat s vlastní IP adresou sítě. Shodně probíhá také přidělování IP adres — z vyšších míst se přidělují zásadně adresy sítí (spolu s vymezeným rozsahem) a z tohoto rozsahu se teprve přidělují jednotlivé IP adresy jednotlivým počítačům v síti. Nastavíte-li počítači adresu, která nevyhovuje adrese sítě, do níž je počítač zapojen, nebude počítač schopen komunikovat.
Velikost IP sítě (počet IP adres, které je možné v rámci dané sítě přidělit jednotlivým počítačům) se obyčejně stanovuje pomocí masky sítě, která definuje, kolik bitů z 32bitové adresy je považováno za adresu sítě. Čím přesněji je určena adresa sítě (čím více bitů adresy je spotřebováno), tím méně adres (bitů) zbývá na počítače v síti. Jednoduchou úvahou dospějete k výsledku, že nejmenší možná IP síť zabírá čtyři IP adresy, což odpovídá 30 obsazeným bitům v masce sítě a dvěma bitům volným pro adresaci počítačů. Menší síť (o rozsahu jedné IP adresy) je nesmyslná, neboť nemůže obsahovat žádný počítač. Ubrání dalšího bitu z masky sítě vždy zdvojnásobí počet v síti použitelných adres — síť s maskou dlouhou 28 bitů bude mít k dispozici 16 IP adres.
Maska je obyčejně zapisována také ve formě "dotted-quad", takže například maska 255.255.255.192 vymezuje pro adresu sítě 26 bitů, takže pro počítače zbývá bitů 6. To odpovídá 64 dostupným adresám.
Ve všech sítích jsou dvě adresy vymezeny pro speciální použití — nejnižší možná adresa z vymezeného rozsahu je adresa sítě, nejvyšší možná adresa z rozsahu je broadcast — adresa, pomocí které je možné v určitých případech najednou poslat data všem počítačům dané sítě. Z počtu adres vymezených maskou sítě proto vždy dvě adresy není možné použít. Nejmenší možná síť (jejíž maska je 255.255.255.252) proto nabízí ze čtyř vymezených adres jen dvě pro adresaci počítačů. Takové malé sítě se používají hlavně při dálkových komunikacích jako spojovací sítě — typickým případem je komutované (dial-up) spojení, kdy vám poskytovatel přiřadí jednu čtyřadresovou IP síť, kde jedna IP adresa je jeho (patří terminálovému serveru) a druhá patří vašemu počítači.
Přímým důsledkem faktu, že adresa počítače musí odpovídat síti, v níž je počítač zapojen, je skutečnost, že každý směrovač má nejméně dvě IP adresy patřící do různých sítí. Je to nutné, neboť má-li směrovač spojovat dvě sítě, musí být do obou zapojen. Větší směrovače mohou být zapojeny do více sítí a podle toho mohou mít patřičný počet různých IP adres. Tento princip je v IP sítích zcela zobecněn a každý počítač tak (nebo směrovač) může mít přidělen libovolné množství IP adres. Každá adresa musí splňovat podmínku globální unikátnosti a musí patřit síti, do které je počítač zapojen. Zobecnění IP adres vedlo k zavedení nového pojmu IP zařízení, které má přiřazenu jen jednu IP adresu. Počítač podle této terminologie obsahuje nejméně jedno IP zařízení, směrovač nejméně dvě.
Požadavek unikátnosti IP adres je na jedné straně bez výhrad nutný, na straně druhé však velmi omezuje provoz na místních úrovních — místních sítích, nebo uvnitř jednoho počítače. Velmi obtížným se také stává například ladění a konstrukce programů komunikujících přes IP sítě. Z celého rozsahu všech IP adres proto byly vybrány následující sítě (jsou uvedeny včetně masek), které slouží speciálním potřebám:
Vypsané adresy je možné použít (a také je to doporučeno) i v sítích, které jsou sice do Internetu připojeny, ale nepřímo prostřednictvím proxy-směrovače. Proxy-směrovač pakety z vnitřní sítě nesměruje (nepropustí je ven), ale překládá tak, že veškeré vnitřní adresy v paketech nahrazuje adresou svou — vnější. Vnější adresa je již samozřejmě globálně unikátní a v Internetu platná. Takovýmto způsobem připojíte do Internetu jakoukoli síť a spotřebujete přitom jen jednu čtyřadresovou síť.
Z předchozího oddílu vyplývá, že IP adresu pro počítač si nelze "jen tak vymyslet". Pro IP adresy platí řada pravidel (některá byla vysvětlena) a jejich distribuce je vázána přísnými pravidly. V principu platí, že každý z poskytovatelů spojení dostane od vyššího poskytovatele určitý rozsah adres, které může podle svých potřeb delegovat na nižší poskytovatele nebo uživatele.
Nejvyšším poskytovatelem IP adres adres je nekomerční sdružení InterNIC, které "vlastní" celý adresový prostor všech IP adres. InterNIC delegoval určité adresy na poskytovatele, ti zase na další poskytovatele a ti již pravděpodobně IP adresy delegovali přímo na vás. Delegace adresy může být explicitní nebo implicitní. Explicitní delegace znamená uzavření smlouvy s poskytovatelem, který vám adresy poskytne. Adresový prostor je od této chvíle váš a můžete s ním naložit podle potřeb. Implicitní delegování spočívá v dočasném přiřazení adresy, obvykle na jedno sezení v případě komutovaných spojení, nebo na jinak definovanou dobu v případě přidělování pomocí DHCP. Implicitní delegování zaručí vzájemnou dostupnost Internetu a počítače, adresa zařízení však není stálá a například všechny síťové servery nemohou s takovou adresou pracovat.
Jak tedy IP adresu počítači přídělit?
Máte-li přiřazenu (nebo vybránu) IP adresu dle vašich potřeb, můžete ji definovat přímo v daném počítači. Při konfiguraci IP adresy je třeba správně zadat tři parametry:
Následující ukázková konfigurace je platná pro počítač enceladus.mii.cz:
IP address = 194.108.72.33 netmask = 255.255.255.192 gateway = 194.108.72.1
Kromě těchto parametrů ještě bývá třeba korektně nastavit DNS, ale o tom pojednává až jedna z následnujících sekcí.
IP dokáže přemístit data v paketu napříč celou sítí od zdrojového až k cílovému počítači. Nedokáže však nijak zajistit koherenci vysílaných a přijímaných dat. K tomuto účelu slouží TCP (Transmission Control Protocol), který všechny tyto úlohy řeší. Charakteristika TCP nejlépe vyplyne z následujícího seznamu:
V souhrnu je TCP extrémně stabilní, bezpečný a robustní protokol, který se velmi snadno používá. Pro uzavření TCP spojení je třeba znát jen adresu cílového počítače, a identifikaci programu, který na cizím počítači běží a který je schopen spojení přijmout.
Programy — servery se navzájem rozeznávají pomocí 16bitového čísla — portu, které je pro danou IP adresu unikátně přiděleno síťovou vrstvou operačního systému. Pro výběr vhodného portu (stejně jako pro samotné IP adresy) platí určitá pravidla:
TCP spojení je tedy navázáno vždy mezi zdrojovým počítačem s IP adresou a portem (tento port přidělí většinou operační systém) a cílovým počítačem s jinou IP adresou a serverovým portem (to bývá většinou "well known" port, nebo port jiný předem známý). Celé TCP spojení je proto plně charakterizováno čtveřicí čísel — dvou IP adres a dvou portů. Změna byť jen jediného z těchto čísel již automaticky identifikuje nějaké jiné spojení. Například — připojíte-li se ze dvou internetových prohlížečů na jeden server, vytvoří se dvě spojení, která se navzájem budou lišit jen portem vašeho (klientského) počítače.
Takto sestavená čtveřice čísel se nazývá obyčejně spojení, nebo také socket. Socket sice označuje v TCP/IP i mnoho jiných věcí, ale tento jeho význam je nejčastější.
Důležitá vlastnost portů souvisí s použitím serverů. Uvědomíte-li si, že server čekající na spojení musí být unikátně dosažitelný a přitom má k dispozici jen polovinu socketu (žádné spojení ještě neexistuje), dojdete k závěru, že více serverů čekajících na jedné IP adrese musí mít různá čísla portů. Většinou je tento požadavek zaručen již IANA tím, že jednotlivé servery používají unikátně přiřazené porty, ale potřebujete-li na jednom počítači například provozovat dva HTTP servery, bude muset jeden z nich používat port jiný než 80 (který je pro HTTP přiřazen IANA) — například 5080.
Číslo portu je možné u každého serveru nastavit a jediný problém potom spočívá ve skutečnosti, že klient, který se chce na takový server připojit, musí číslo portu znát. To již ale se síťovou komunikací samotnou nesouvisí.
Bylo řečeno, že základní vlastností TCP je jeho schopnost vytvořit, udržet a transparetně nabízet nepřerušitelný a stoprocentně sekvenční tok dat. Navázání takového spojení je poměrně komplikovaná věc, a potřebujete-li cizímu počítači poslat jen nějaké krátké jednorázové sdělení, je škoda vytvářet (a ukončovat) kvůli tomu mocný aparát virtuálního spojení.
Proto byl vytvořen UDP — User Datagram Protocol, který dokáže od zdroje k cíli poslat jeden blok dat, většinou s délkou omezenou do 64 KB. Stejně jako TCP používá i UDP jako síťovou vrstvu IP, takže se každý UDP datagram rozloží při vysílání do mnoha IP paketů, které si příjemce opět ve správném pořadí seskládá. UDP nicméně nezaručuje, že se data dostanou k příjemci (v terminologii TCP/IP UDP není "spolehlivý" (reliable)), a ani nezaručuje, že příjemce dostane dva po sobě odeslané datagramy ve shodném pořadí.
UDP tedy vždy slouží k posílání jednorázových zpráv. Potřebuje-li aplikace použít UDP a přitom vyžaduje sekvenční a bezvýpadkový tok dat, musí si jej zajistit vlastními prostředky, musí si tyto vlastnosti sama naprogramovat.
Stejně jako TCP používá i UDP k identifikaci jednorázového spojení socket, tedy dvojici IP adres a portů, takže stejně jako u TCP je k úspěšné komunikaci třeba znát port příjemce.
Popsané protokoly TCP a UDP jsou transportní (podle modelu OSI) a dokáží se znalostí adresy příjemce odeslat balík dat (UDP), nebo vytvořit virtuální spojení (TCP). Jak UDP tak TCP však stále tvoří jen "nosič" na data, která musí poskytovat příslušná aplikace. Samozřejmě, formát aplikačních dat musí být známý a shodný na obou stranách komunikačního kanálu, jinak by se klient se serverem nedokázal domluvit.
Existuje proto celá řada nejrůznějších aplikačních protokolů, které definují akce, odpovědi a příkazy, jimiž se klient i server mohou různým způsobem řídit. Aplikační protokoly bývají zpravidla navrženy co nejjednodušeji, aby se aplikace nemusely příliš zabývat jejich interpretací a zbytečně se nepotřebovávala kapacita komunikačního kanálu. Jednoduchost protokolů je příčinou jejich velkého počtu — jednoduchý protokol může být navržen jen s omezenou množinou fuknčních schopností.
Jednotlivé protokoly může každá aplikace definovat zcela libovolně (tak je to například i v systému Control Web), nebo může použít některého z již standardních protokolů, které jsou definovány a udržovány internetovými sdruženími. Každý ze standardních protokolů má vyhrazen (od IANA) vlastní číslo serverového portu, na kterém je možné standardně navázat spojení.
Následující seznam stručně popisuje nejznámější protokoly, za zkratkou protokolu je pro informaci uvedeno číslo portu, které protokolu odpovídá:
Identifikace počítače pomocí IP adresy je v principu velmi jednoduchá. Sám technický princip však (bohužel) většinou nedokáže zaručit uživatelskou přístupnost a jednoduché použití. Proto byla identifikace počítačů v IP sítících hned od počátku jejich existence zlidšťována pomocí symbolických jmen — každý počítač měl své — víceméně libovolné — jméno. Je příjemnější pamatovat si www.mii.cz místo 194.108.72.2.
Jména byla s IP adresami spojena velmi jednoduše pomocí textového souboru, kde byla každému symbolickému jménu přiřazena správná IP adresa. Stačilo potom napsat telnet snoopy a spojení se navázalo s IP adresou, která byla u jména snoopy uvedena. Systém to byl velmi jednoduchý a dostatečný. Jeho jedinou nevýhodou bylo, že soubor s informacemi o jménech a adresách byl na každém počítači jiný.
Jak postupně narůstal počet počítačů v ARPANET, rostly i konfigurační soubory se jmény. Kolem počtu 1000 počítačů začala být situace neúnosná a bylo třeba sestavit a začít používat nějaký jiný promyšlenější systém. V roce 1983 se jím stal DNS — Domain Name System.
DNS byl navržen následujícím způsobem:
Počítače zařazené do DNS tak spravují vždy jen velmi malé množství informace o své doméně a jsou přitom schopné velmi rychle položit dotaz hlavním (nejvyšším) serverům spravujícím doménu řádu 0.
Podívejme se například, co se stane, napíšete-li do internetového prohlížeče na počítači pc24.firma.anet.cz adresu www.mii.cz:
Uvedený postup prakticky demonstroval principy (popsané v předchozím seznamu), jichž DNS používá. Všimněte si především, že skutečně každý ze serverů systému spravuje jen několik málo záznamů (typicky desítky) a dokáže proto na dotaz odpovědět velmi rychle. Hierarchická organizace domén přitom umožňuje všechny dotazy vyřešit pomocí velmi malého počítačů — v ukázce to bylo počítačů pět i s vaším klientským. V 80 % případů navíc na dotaz odpoví okamžitě první server (server, který spravuje doménu firma.anet.cz), neboť si nejčastěji používané požadavky pamatuje (a postupně případně obnovuje).
Technická jednoduchost systému je dále doplněna administrativními pravidly, která rozdělují domény prvého řádu (TLD) tak, aby se okamžitě dalo rozpoznat, kde počítač přibližně leží a jaké má určení. Každý stát má proto vyhrazenu jednu TLD (Česko má cz, Německo de) a všechny nižší domény druhého a dalších řádů (například mii.cz) logicky (a většinou i fyzicky) do této domény patří. Běžně existují domény rozlišené práve pomocí TLD — například microsoft.com a microsoft.cz. Jedna z domén patří firmě české a druhá firmě americké.
Doména com z posledního příkladu je vyjímečná — firma leží v Americe, a přesto její TLD není us. Tato vyjímečnost plyne z historie — v době, kdy existovala jen ARPANET, byly počítače v Americe rozlišeny pomocí několika domén, které rozlišovaly účel jejich použití: doména com patří komerčním organizacím, doména gov vládním organizacím, doména mil ministerstvu obrany Spojených států, doména org nevýdělečným organizacím a doména net organizacím starajícím se o chod sítě. Protože tyto domény vznikly na americké půdě, platí většinou (i když to přestává být pravidlem), že organizace s takovou doménou v Americe také leží.