TCP/IP komunikace

Vrstvový model

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) IM klientu je úplně jedno jestli je připojený přes kabel nebo Wi-Fi .

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
Relační ISO/OSI vrstva je napůl rozdělená mezi transakční a aplikační TCP/IP vrstvu, a to samé linková je rozdělena mezi síťovou a fyzickou, což Chrome nějak nezobrazuje

TCP/IP

Internet Protocol Suite

TCP/IP je sada protokolů pro komunikaci počítačů přes internet. Definuje několik dílčích protokolů:

TCP (Transmission Control Protocol) – komunikace mezi aplikacemi

UDP (User Datagram Protocol) – komunikace mezi aplikacemi

IP (Internet Protocol) – komunikace mezi počítači

ICMP (Internet Control Message Protocol) – obstarává statistiky a pomáhá řešit chyby

DHCP (Dynamic Host Configuration Protocol) – statické nebo dynamické přidělování adres v síti

TCP a UDP

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.

Řízení a správa toku TCP

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.

Checksum (CRC)

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.

Sekvenční číslo

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.

Potvrzování paketů

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.

Three-way handshake

Transmission Control Protocol#Connection establishment

Klient pošle SYN s náhodným sekvenčním číslem A.

Server odpoví SYN-ACK, ACK bude se sekvenčním číslem A + 1, a sekvenční číslo SYNu bude nějaké náhodné číslo B.

Klient odpoví ACK se sekvenčním číslem B + 1 a své sekvenční číslo nastaví na A + 1.

Sliding window

Sliding Window Protocol

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

Ukázka sliding window

Popsaný algoritmus sliding window je varianta „selective repeat“, která je nejpoužívanější.

IP (Internet Protocol)

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

IPv6

IPv6

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 adresa

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!

Model klient/server

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.

Shrnutí

vrstvový model ISO/OSI vs TCP/IP (internet)

IP: přenos dat v síti, connection-less, ip PAKETY, adresy (v4, v6)

UDP: nespolehlivý přenos mezi aplikacemi na port, connection-less, datagramy

TCP: spolehlivý přenos také na port, handshake, číslování, CRC, sliding window

DHCP: statické a dynamické mapování, ICMP: kontrola spojení

klient-server: požadavek a odpověď