# Co je to TCP/IP

## O TCP/IP

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ů:

- Především TCP/IP označuje dva již nastíněné samostatné komunikační protokoly — Transmission Control Protocol a Internet Protocol. Překlad těchto termínů není v češtině příliš úhledný, nicméně rámcově napoví, k čemu protokoly slouží — TCP je "protokol řízení spojení" a IP "mezisíťový protokol". Slovo "internet" zde původně nemělo význam současného globálního Internetu, nicméně v současnosti, kdy je Internet na IP postaven, se nespletete ani s označením "Internet protocol".
- Dále TCP/IP označuje celou rodinu protokolů, které jsou nad TCP nebo IP postaveny. Označení zahrnuje celou řadu různých protokolů počínaje vnitřními organizačními protokoly (jako je ICMP pro vnitřní řízení IP sítí nebo BOOTP či DHCP pro dynamické změny adres počítačů v síti) přes vlastní IP, TCP a UDP (User Datagram Protocol) k protokolům nadřazeným (například RIP nebo OSPF pro informace o cestách v síti, protokol DNS pro správu doménových jmen, FTP pro přenos souborů, protokol TELNET pro vzdálené připojení, SMTP a POP3 pro přenos elektronické pošty nebo (dnes nejvíce známý) HTTP pro přístup k obecně jakýmkoli dokumentům). Každý z těchto protokolů nakonec používá služeb IP, takže všechny tvoří "rodinu" protokolů s jedním předkem — TCP/IP.

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.

### Internet protocol

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.

### IP adresa

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:

- 127.0.0.0/255.0.0.0 — síť vymezená pouze pro lokální počítač. Adresy z tohoto rozsahu se nikdy neobjeví v žádné síti. Obyčejně má každý počítač, který podporuje TCP/IP, implicitně definováno jedno IP rozhraní s adresou 127.0.0.1, takže i když mu žádnou další adresu nepřiřadíte, může normálně pomocí IP komunikovat — i když jen sám se sebou.
- 10.0.0.0/255.0.0.0, 172.16.0.0/255.255.0.0 až 172.31.0.0/255.255.0.0 a 192.168.0.0/255.255.255.0 až 192.168.255.0/255.255.255.0 — sítě vymezené pro použití mimo Internet, tedy pro počítače bez přímého spojení s Internetem. Pokud provozujete separátní síť, která není nijak do Internetu zapojena, měli byste použít právě těchto sítí. Je pravda, že nepřipojená síť v principu může používat libovolné adresy (není-li připojena, nemůže kolidovat), ale z bezpečnostních a organizačních důvodů by se takové adresy neměly používat.

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íť.

- 224.0.0.0/255.0.0.0 až 255.0.0.0/255.0.0.0 — sítě vymezené pro multicasting a budoucí použití. Adresy z těchto rozsahů se nesmí používat.

### Přiřazení IP adresy

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?

- Počítač není zapojen v žádné síti — v tomto případě nejspíše nebude potřeba žádnou IP adresu přiřazovat. Pokud je to však třeba, je možné použít přímo adresy místní (127.0.0.1), nebo definovat některou z adres vymezených pro místní použití.
- Počítač je připojen do vnitřní sítě, která je oddělená od Internetu — zde jsou dvě možnosti: Pokud síť konfigurujete sami, je situace jednodušší, neboť pouze vyberete adresu (z již použité sítě) která ještě není obsazená. Pokud síť spravuje někdo jiný (například se jedná o celopodnikovou síť), je třeba o přidělení IP adresy požádat patřičného správce. V obou případech by však vždy adresy sítí i počítačů měly padnout do rozsahu vymezeného pro místní použití.
- Počítač je připojen do sítě, která je připojená k Internetu — taková síť již nejspíše správce má, a opět je proto pro přidělení IP adresy třeba požádat jeho. Pokud vytváříte novou síť musíte, o přidělení adres požádat vašeho poskytovatele (například CESNET). Teprve až adresy získáte, můžete jednu z nich přidělit počítači.
- Počítač se připojuje do sítě komutovaně — v této situaci se většinou používá implicitní delegace IP adresy poskytovatele, a konfigurací IP adresy počítače se proto nemusíte nijak zvlášť zabývat. Jiná situace nastane, budete-li potřebovat při každém spojení IP adresu shodnou. Tato situace je ekvivalentní situaci třetí, poskytoval musí vyhradit adresy pro vás tak, aby byly dostupné kdykoli se připojíte. Pravidla a procedury pro takovouto delegaci jsou proto shodná s pravidly pro přidělení IP adresy pevně připojené sítě.
- Pokud je počítač do sítě zapojen a nemá přídělenu IP adresu, tak nikdy s adresami neexperimentujte bez zjištění skutečného aktuálního stavu připojení vaší sítě. Volbou chybné adresy můžete například způsobit odpojení celé vaší sítě od Internetu.

### Konfigurace IP adresy počítače

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:

- vlastní adresu počítače — adresa musí splňovat všechna popsaná pravidla a musí odpovídat použité síti a její masce. Adresa sítě bývá většinou explicitně definovaná správcem a je především důležitá pro směrovače.
- masku sítě — maska použité sítě. Určité chybné kombinace masky, adresy sítě a adresy počítače mohou způsobit, že počítač komunikuje, ale jen z části — některé z funkcí IP nemusejí být korektně dostupné.
- adresu brány — adresa směrovače, kam bude počítač posílat všechny pakety, které není možné doručit přímo v místní síti. Směrovač již pravděpodobně bude vědět, kam paket poslat. Síť adresy směrovače musí být shodná se sítí adresy počítače.

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

### TCP komunikace

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:

- TCP používá IP jako síťovou vrstvu (podle modelu OSI). Veškerá komunikace TCP je proto rozložena do řady IP paketů, které jsou pomocí IP odesílány k cíli.
- TCP je plně duplexní — současně je možné data posílat i přijímat.
- TCP vytváří virtuální spojení, které existuje jen v počítačích, které jsou spojeny. Žádná další informace o spojení nikde neexistuje.
- TCP zajišťuje sekvenčnost dat — kontroluje příchozí IP pakety a podle svých informací zapomíná duplicitní pakety a řadí do správné posloupnosti pakety ostatní.
- TCP zajišťuje opakované vysílání dat v případě ztráty nějakého paketu.
- TCP kompletně celou komunikaci zabezpečuje a ověřuje pomocí CRC.
- Protože je TCP spojení virtuální, je prakticky neukončitelné — spojení (bez definovaných bezpečnostních časových prodlev) existuje tak dlouho, dokud není řízeně jednou ze stran ukončeno. TCP spojení tak bez sebemenších potíží přežije například fyzické rozpojení komunikujících počítačů.
- TCP spojení je zcela transparentní, vysílací počítač do spojení data zapisuje a druhý je čte bez nutnosti jakéhokoli speciálního ovládání.

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:

- čísla portů 0–1023 jsou rezervována a přiděluje je IANA (Internet Assigned Numbers Authority). Portům s těmito čísly se také někdy říká "well known". Čísla jsou přidělena zpravidla určitému protokolu, takže například port 80 patří HTTP, a všechny HTTP servery standardně očekávají spojení na portu 80.
- čísla portů 1024–5000 jsou vyhrazena pro takzvané "ephemeral ports", neboli pro porty, které nebývají na počítači obsazeny trvale. Porty těchto čísel většinou operační systém přiděluje automaticky klientským aplikacím.
- čísla portů 5001–65535 jsou vyhrazena pro ostatní serverové aplikace. Většinou se však nepoužívají čísla větší než 10 000. Typicky například používají port 8080 HTTP-proxy servery. Control Web používá pro své servery portů 9034–9036.

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

### UDP komunikace

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.

## O vyšších protokolech

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

### HTTP, SMTP, POP3, FTP, TELNET, CW a CWD

Následující seznam stručně popisuje nejznámější protokoly, za zkratkou protokolu je pro informaci uvedeno číslo portu, které protokolu odpovídá:

- HTTP, 80, HyperText Transfer Protocol — v současnosti nejvíce používaný protokol jak v Internetu, tak intranetech. Protokol slouží k přenosu obecných dokumentů, pracuje systémem požadavek-odpověď a jeho spojení jsou aktivní jen po nejnutnější dobu. S protokolem je svázán (ovšem jen logicky!) jazyk HTML, neboť většina dokumentů přenášených tímto protokolem má právě formát HTML. Protokol HTTP používá používá služba WWW (World Wide Web).
- SMTP, 25, Simple Mail Transfer Protocol - základní poštovní protokol, pomocí něhož se přenášejí všechny elektronické dopisy (e-mail) mezi jednotlivými poštovními servery. Protokol pravděpodobně používá i váš poštovní klient, a to v okamžiku odesílání vaší pošty. Pomocí SMTP je pošta dopravena až do schránky patřičného příjemce.
- POP3, 115, Post Office Protocol ver. 3 — druhý z poštovních protokolů, který slouží k obsluze poštovní schránky. Používá se tedy při výběru a čtení pošty, která byla pomocí SMTP doručena do vaší schránky.
- FTP, 21, File Transfer Protocol — jeden ze starších protokolů, který slouží k přenosu souborů z počítače na počítač. V současné době je jeho obsluha většinou zahrnuta do internetového prohlížeče a mnohdy si ani nevšimnete, že prohlížeč plynule přechází při přenosu dat od HTTP k FTP a zase zpět.
- TELNET, 23 — protokol sloužící ke vzdálenému terminálovému připojení k cizímu počítači. Po přihlášení se protokolem TELNET můžete cizí počítač ovládat úplně stejně (textově), jako byste stáli přímo u jeho monitoru a klávesnice.
- CW a CWD, 9034 a 9036 — protokoly používané při spojení dvou systémů Control Web. Pomocí protokolu CWD systémy Control Web zjišťují, jestli na cizím počítači běží požadovaná aplikace, a dále případně spouštějí a zastavují jiné systémy Control Web. Protokol CW používají aplikace pro vlastní distribuovaný běh, pomocí tohoto protokolu jsou komunikována všechna data a příkazy, které jsou nutné pro běh modulární aplikace. O protokolech CW a CWD se můžete dočíst také v kapitole Modulární a distribuované aplikace.

### Systém doménových jmen

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:

- Jména počítačů jsou složena z takzvaných domén oddělených tečkami.
- Domény jsou hierarchicky uspořádány, přičemž nejvyšší důležitost ve jménu počítače má nejpravější doména — doména prvého řádu = top level domain = TLD. Ostatní domény ve jméně (směrem zprava doleva) jsou řádu druhého, třetího, atd.
- Informace o každé z domén jsou vždy umístěny na nejméně dvou počítačích, přičemž každá z domén udržuje pouze informace o svých nejbližších podřízených doménách — tedy o doménách nejblíže vyššího řádu.
- Každý počítač s aktivní informací o doménách zná IP adresy osmi počítačů, které obsluhují domény nultého řádu, tedy domény, které mají informace o všech TLD.

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:

1. Počítač s prohlížečem položí dotaz nejbližšímu DNS (Domain Name Server), který je zapsán v konfiguraci počítače. Tento DNS spravuje doménu firma.anet.cz a proto dotazu www.mii.cz nerozumí. Pošle tedy dotaz jednomu z osmi nejvyšších serverů.
2. Server spravující doménu řádu 0 požadavek přijme a zjistí, že TLD dotazu je cz. Vyhledá proto ve svých záznamech IP adresy počítačů, které doménu cz spravují, a původní dotaz pošle jednomu z nich.
3. Server spravující doménu cz (to je například server ns.eu.net) zjistí, že doména druhého řádu je mii a vyhledá proto ve své databázi IP adresy počítačů, které doménů mii.cz spravují. Jednomu z těchto počítačů opět pošle původní dotaz.
4. Dotaz se propracoval až k počítači spravujícímu doménu mii.cz. Tento počítač má informace o všech doménách třetího řádu, tedy i o doménovém jméně www, a snadno proto zjistí, že počítači www.mii.cz odpovídá IP adresa 194.108.72.2. Zjištěnou IP adresu pošle zpět počítači ns.eu.net.
5. Server ns.eu.net pošle zodpovězený dotaz počítači spravujícímu doménu řádu 0 a ten pošle odpověď počítači, který o jméno požádal, a ten definitivně získanou IP adresu pošle zpět počítači pc24.firma.anet.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ží.

## Shrnutí

- TCP/IP je standard popisující několik protokolů, které jsou schopny pokrýt požadavky všech vrstev komunikace podle modelu OSI.
- Internet protocol (IP) je navržen primárně pro použití v heterogeních sítích s možností násobných cest a s možností zotavení se z potenciálních poruch.
- IP dokáže přepravit blok dat — IP paket — z jednoho počítače na druhý. Automaticky si přitom pomocí směrování hledá cestu v síti tak, aby byl paket doručen. IP nezaručuje souslednost paketů a nedokáže ani detekovat případný opakovaný výskyt dat.
- Pro rozlišení počítačů v sítí IP používá IP adresu — 32bitové číslo, které unikátně každý počítač identifikuje. Pro použití IP adres platí přísná organizační pravidla.
- Proto existuje TCP, který pomocí virtuálního spojení sleduje, jaká data již přišla a jaká ještě ne, zajišťuje jejich sekvenčnost a v případě potřeby se stará o opětovné vyslání chybějících dat. TCP je logicky nezávislý na stavu sítě a spojení nepřestává existovat i při fyzickém rozpojení sítě.
- TCP identifikuje spojení pomocí dvou IP adres (příjemce a odesílatele) a dvou portů — čísel, která unikátně rozlišují spojení pařící jedné IP adrese. Porty mohou být přiděleny automaticky (to je většinou případ klientů) nebo staticky. Statické porty přiděluje IANA (Internet Assigned Numbers Authority) zpravidla některému standardnímu protokolu.
- Aby bylo možné jednotlivé počítače lépe rozlišit, je většina počítačů pojmenována. Pro jména se v současnosti používá DNS — systém doménových jmen, který hierarchicky dělí všechna jména podle určitých pravidel. Informace v DNS je distribuovaná.