Uživatelské nástroje

Nástroje pro tento web


pitel:isz:tcp_ip_komunikace

Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.


pitel:isz:tcp_ip_komunikace [30. 12. 2022, 13.43:01] (aktuální) – vytvořeno - upraveno mimo DokuWiki 127.0.0.1
Řádek 1: Řádek 1:
 +====== TCP/IP komunikace ======
 +===== Vrstvový model =====
 +Základním modelem je [[wp>OSI model|model ISO/OSI]]. Má 7 vrstev a je pouze teoretický, v praxi se nepoužívá. Daleko používanějším je [[wp>TCP/IP model|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í((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          |
 +<note>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 :-(</note>
 +
 +===== TCP/IP =====
 +[[wp>Internet Protocol Suite]]
 +
 +TCP/IP je sada protokolů pro komunikaci počítačů přes internet. Definuje několik dílčích protokolů:
 +  * [[wp>Transmission Control Protocol|TCP (Transmission Control Protocol)]] -- komunikace mezi aplikacemi
 +  * [[wp>User Datagram Protocol|UDP (User Datagram Protocol)]] -- komunikace mezi aplikacemi
 +  * [[wp>Internet Protocol|IP (Internet Protocol)]] -- komunikace mezi počítači
 +  * [[wp>Internet Control Message Protocol|ICMP (Internet Control Message Protocol)]] -- obstarává statistiky a pomáhá řešit chyby
 +  * [[wp>Dynamic Host Configuration Protocol|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 ===
 +[[wp>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 ''SYN''u 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 ===
 +[[wp>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).
 +
 +[[http://www3.rad.com/networks/2004/sliding_window/demo.swf|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 ===
 +[[wp>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í [[wp>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 ===
 +[[wp>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ěď