Uživatelské nástroje

Nástroje pro tento web


pitel:isz:tcp_ip_komunikace

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

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

  1. Klient pošle SYN s náhodným sekvenčním číslem A.
  2. 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.
  3. 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ěď
1)
IM klientu je úplně jedno jestli je připojený přes kabel nebo Wi-Fi
/var/www/wiki/data/pages/pitel/isz/tcp_ip_komunikace.txt · Poslední úprava: 30. 12. 2022, 13.43:01 autor: 127.0.0.1