Základním modelem je model ISO/OSI. Má 7 vrstev a je pouze teoretický, v praxi se nepoužívá. Daleko používanějším je model TCP/IP. Má 4 vrstvy a používá se například v síti internet. Důležité je, že jednotlivé vrstvy se vzájemně neovlivňují, a pokud něco řešíme na jedné vrstvě, nemusí nás zajímat co dělají ty ostatní1).
ISO/OSI | TCP/IP | Protokoly | Účel |
---|---|---|---|
Aplikační | Aplikační | HTTP, SSH, Quake, … | Vytvoří zprávu |
Prezentační | Dá zprávě formu | ||
Relační | Otevírá a zavírá spojení | ||
Transportní | TCP, UDP | ||
Transportní | Přenáší zprávu | ||
Síťová | Síťová | IP | Musí najít cestu sítí |
Linková | Spojení mezi dvěma uzly | ||
Fyzická | Ethernet, Bluetooth, … | ||
Fyzická | Jedničky a nuly |
TCP/IP je sada protokolů pro komunikaci počítačů přes internet. Definuje několik dílčích protokolů:
Oba protokoly slouží ke komunikaci aplikací. Existuje mezi nimi pár rozdílů, nejdůležitější je ale to, že TCP zaručuje přenos dat přes síť, UDP nikoli. V rámci komunikace TCP se totiž posílají kontrolní zprávy, které informují odesílatele. O TCP se také říká, že je stavový. To v praxi znamená, se nejdřív ustaví oboustranné spojení skrze tzv. handshake, které existuje, dokud ho jedna ze stran nezavře. UDP je bezstavový protokol.
TCP se používá všude, kde je dobré, aby všechna data došla vždy a spolehlivě. Příkladem je třeba HTTP (web stránky). Naopak užití UDP je třeba v situacích, kdy by nebylo vhodné čekat na doručení ztraceného paketu – VoIP, video streaming atd.
Kontrola správnosti obdržených paketů na přijímající straně při TCP spojení je složena ze dvou hlavních věcí: checksum a sekvenční čísla.
Hlavička TCP paketu obsahuje checksum (CRC), který je vypočítaný z ostatních hodnot hlavičky + z obsahu paketu. Tuto hlavičku vypočítá a vloží odesílatel, příjemce ji vypočítá znovu a porovná výsledky. Pokud jsou checksumy stejné, je to v pořádku.
TCP má omezenou velikost jednoho paketu. Tím pádem musí být větší data fragmentována. Sekvenční číslo slouží k odhalení, zda se data při přenosu nepřeházela. Za každý odeslaný byte se u TCP sekvenční číslo zvětšuje o 1. Sekvenční číslo celého paketu ukazuje pozici prvního byte dat tohoto paketu v celém proudu dat a příští paket má sekvenční číslo vyšší o počet bytů v aktuálním paketu.
Každý paket, který dorazí, není rozbitý podle checksum a zároveň je očekávaný podle sekvenčního čísla, je potvrzen zpět vysílací straně. K tomu slouží speciální paket označovaný ACK, který obsahuje sekvenční číslo paketu, který přijímací strana očekává. Tzn. pokud dorazil paket 9 a obsahoval 1 byte, posílá se ACK s číslem 10. Pokud vysílací strana určitou dobu nedostane potvrzení o nějakém paketu, posílá ho automaticky znovu.
Transmission Control Protocol#Connection establishment
SYN
s náhodným sekvenčním číslem A.SYN-ACK
, ACK
bude se sekvenčním číslem A + 1, a sekvenční číslo SYN
u bude nějaké náhodné číslo B.ACK
se sekvenčním číslem B + 1 a své sekvenční číslo nastaví na A + 1.Pokud má přijímací strana problém z nějakého důvodu odebírat včas data (např. zahlcení linky), odesilatel nedostává ACKy a zahlcuje příjemce ještě víc. To řeší algoritmus sliding window.
Odesilatel i příjemce si připraví okno (window) o dané velikosti, pro ukázku řekněme 10. Okno pokrývá pakety od prvního sekvenčního čísla po desáté. Odesílatel posílá postupně všechny pakety, které jsou v jeho okně. Pokud dostane odesílatel ack na nějaký paket, posune své okno na další paket po tomto ACKovaném. Tím se odesílateli „odemknou“ další pakety na odesílání. Příjemce má také své okno, které posouvá, jakmile obdrží nejlevější paket/y. Ve sliding window však ACKy neposílá na každý obdržený paket, ale ACKuje zpátky vždy poslední přijatý paket v souvislé řadě (tzn. poslední přijatý paket, nebo poslední před ztrátou nějakého paketu). Přenos zprávy přes sliding window končí ve chvíli, kdy odesilatel dostane ACK na poslední paket.
Pokud tedy příjemce není schopný včas pakety přijímat, posílá odesilatel znovu pouze pakety z okna namísto posílání všech paketů celé zprávy.
V reálu se toto sliding window může zvětšovat a zmenšovat – pokud dostává odesilatel všechny ACKy okamžitě, pokusí se zvětšit okno, aby mohla komunikace probíhat rychleji. Pokud naopak ACKy chodí dost pomalu, okno se zmenší (a tím pádem se sníží zahlcení příjemce).
Popsaný algoritmus sliding window je varianta „selective repeat“, která je nejpoužívanější.
IP je protokol pro komunikaci počítačů, nikoli aplikací. IP rozděluje data do jednotlivých datagramů
(také pakety
), které pak posílá po síti. Tyto datagramy obsahují hlavičku složenou mimo jiné z IP adresy odesílatele a IP adresy přijemce a obsah paketu může být třeba UDP datagram či TCP paket. IP je connection-less
, tzn. není potřeba před odesílaním dat nijak vytvářet spojení.
V současné době se používá IPv4. Především z důvodu docházejících IP adres se přišlo s IPv6. A když už budeme dělat změny, tak pořádné! IPv6 nabízí kromě zásadního zvětšení IP adres (počítá se s tím, že každá měřící bóje v moři bude mít svou IP) IPv6 také vynucuje podporu zabezpečení IPsec, jednodušší routování (ač má IPv6 delší adresy, hlavička se zmenšila jen dvojnásobně, především díky přesunu málo používaných voleb do jiné části paketu), vynucuje podporu multicastu a další bylepšení.
Bohužel je nasazení poměrně pomalé, protože průmysl nevidí žádný důvod proč hrnout dolary do předělávání něčeho co funguje.
IP address
Je 32bitová hodnota, která se obvykle zapisuje jako sekvence čtyř bytových čísel, například 147.229.176.14
. Každý počítač v jedné síti musí mít unikátní IP adresu.
U IPv6 je adresa prodloužena na 128 bitů (16 oktetů) a zapisuje se ve skupinách po 4 hexa znacích oddělených dvojtečkami, například 2001:0db8:85a3:08d3:1319:8a2e:0370:7334
. Pokud je celá čtveřice (nebo více čtveřic za sebou) nulových, je možné je vypustit, a v takovém případě bude v adrese dvojice dvojteček po sobě. Toto zkrácení je ale možné provést jen jednou, jinak by nebylo jasné jak přesně byla adresa zkrácena!
Jde o centralizovaný přístup ke komunikaci v počítačové síti. Jednotliví účastníci modelu se rozdělí na žadatele o služby (klienti) a poskytovalete služby (servery). Klienti pak posílají žádosti (request) serverům, čímž se zahájí poskytování služby serverem.
Příklad: webový prohlížeč je klient, seznam.cz je služba poskytovaná webovým serverem na internetu. Klient pošle žádost o zobrazení stránky seznam.cz, server žádost přijme, zpracuje a zpět pošle obsah stránky.
Model klient/server se obvykle srovnává s jiným přístupem, p2p (peer to peer), kde každý účastník může sloužit zároveň jako klient i server. Rozšířeným příkladem peer to peer je bittorrent – účastník se sice dozví lokaci ostatních uživatelů z nějakého serveru, ale pak už si data posílají účastníci podle potřeby přímo mezi sebou.