Internet protocol suite, bežně označovaná jako TCP/IP, je sada komunikačních protokolů, kde hlavními jsou protokoly Transmission Control Protocol (TCP) a Internet Protocol (IP).
TCP/IP model
Klasický čtyřvrstvý TCP/IP model, někdy zvaný také Internet Reference Model, vychází z OSI modelu, ale více se blíží praxi.
vrstva | jméno CZ | jméno EN | příklady aplikací dané vrtsvy |
---|---|---|---|
layer 4 | Aplikační | Application | Telnet, FTP, POP3, HTTP, DNS, SNMP |
layer 3 | Transportní | Transport | TCP, UDP |
layer 2 | Síťová | Network (Internetwork/Internet) | IP, ICMP, IGMP, ARP, STP |
layer 1 | Síťové rozhranní (přístupová) | Network Interface (Access) | ovladač síťové karty (Ethernet, Frame Relay) |
Někdy se nejnižší vrstva rozděluje na dvě části. Na vrstvu fyzickou (Physical Layer) a vrstvu linkovou (Data link).
Encapsulace při odesílání dat
Při odesílání dat se provádí encapsulace (zapouzdřování - zabalování) od nejvyšší vrstvy dolů. Probíhá to tak, že aplikace vezme data (aplikační vrstva), která chce zaslat jiné stanici a doplní je o aplikační hlavičku. Tato data zašle nižší vrstvě (transportní), která odesílaná data rozdělí na segmenty, zabalí a přidá TCP (nebo UDP) hlavičku a vytvoří TCP segment. Další vrstva (síťová) doplní IP hlavičku a takto vznikne IP paket (někdy označovaný jako IP datagram). V poslední vrstvě (přístupové) se k paketu přidá ethernetová hlavička na začátek a trailer na konec, ten obsahuje FCS (Frame Check Sequence) - kontrolní součet (často se pro jeho výpočet používá CRC - cyclic redundancy check). Takto v posledním kroku vznikne ethernetový rámec (ethernet frame), který se vysílá na komunikační médium.
Pozn.: Výše uvedený popis se týkal protokolu IP, pokud se jedná o nějaký pomocný protokol (třeba ARP, ICMP), tak je situace obdobná.
Když cílové zařízení přijme data, provádí se obrácený postup deencapsulace (rozbalování) od nejnižší vrstvy nahoru a cílová aplikace dostane odesílaná data.
Paket vs. rámec
V souvislosti s daty a jejich přenosem po síti se používají dva důležité termíny, jsou to paket a rámec. Tyto termíny jsou hojně používány v literatuře, na internetu, i v praxi. Bohužel v literatuře existuje několik odlišných vysvětlení a také používání těchto výrazů je různé. Navíc záleží na technologii, u které se používají (podobné termíny se používají třeba i u sériové komunikace). Uvádím zde vysvětlení těchto termínů, které se mi zdá nejsprávnější.
Paket (packet) v překladu znamená balíček a jedná se o formátovaný blok dat, který se přenáší v počítačové síti. O paketech se mluví v souvislosti se síťovou vrstvou. Paket obsahuje IP adresu, další atributy a data. Zabalí se do rámce a následně putuje sítí.
Rámec (frame) je to, co skutečně putuje v síti. Rámce vznikají až na fyzického vrstvě síťového rozhranní. Název naznačuje, že se spíše než o objekt jedná o časový úsek. Rámců existuje více typů, nejpoužívanější je Ethernet II, který umí přepravovat TCP/IP i IPX/SPX.
Maximální velikost dat přenášených v rámci (tedy velikost paketu) je dána pomocí MTU (Maximum transmission unit) a váže se k linkové vrstvě. Standardní velikost MTU v ethernetu je 46 - 1500 bytů. Na začátku komunikace se zařízení pomocí ICMP domluví na velikosti MTU. Pokud vyžaduje druhá strana menší MTU, může se provést fragmentace - rozdělení rámce do více menších. Fragmentaci je možno zakázat příznakem v hlavičce paketu. Pokud je fragmentace zakázána a druhá strana akceptuje pouze menší MTU, tak odpoví chybou ICMP.
V obecné terminologii se používá označení Protocol Data Unit (PDU), což je datová jednotka na libovolné vrstvě (IP paket, rámec .). Když se PDU předá na nižší vrstvu, tak se označuje jako Service Data Unit (SDU), tam se doplní o Protocol Control Information (PCI), tedy hlavičku, a vznikne nové PDU.
Formát paketu - rámce
Základní tvar rámce je hlavička (header), data (payload) a zakončení (trailer). Data jsou složena ze zapouzdřených dat vyšších vrstev. Následující obrázek zobrazuje čtyři vrstvy TCP/IP modelu spolu s hrubým formátem dat, jak jsou zapouzdřována odshora dolů. Uvedený příklad je pro protokol TCP, ale obecný model je shodný.
jméno PDU | vrstva | ||||||
appl header | user dat | message | Application | ||||
TCP header | application data | TCP segment | Transport | ||||
IP header | TCP header | application data | IP packet | Network | |||
ethernet header | IP header | TCP header | application data | ethernet trailer | Ethernet frame | Data-Link |
Ethernetová hlavička
Ethernetová hlavička obsahuje zdrojovou a cílovou MAC adresu (fyzickou adresu od hopu k hopu) a typ/délku. Typ v hlavičce určuje jaký protokol je použit na vyšší vrstvě (IP, ARP, atp.). Pro rozlišení jednotlivých rámců se na začátku vysílá speciální úvod (preamble) složený ze sekvence střídajících se jedniček a nul a SFD - oddělovač začátku rámce.
úvod | SFD | cílová MAC adresa | zdrojová MAC adresa | typ / délka | data (payload) | CRC |
7B | 1B | 6B | 6B | 2B | 46-1500B | 4B |
IP hlavička
IP hlavička obsahuje zdrojovou a cílovou IP adresu (logickou adresu komunikujících stran), dále určení protokolu pro další vrstvu (TCP, UDP, ICMP, apod.), kontrolní součet hlavičky a další hodnoty. Standardní velikost IP hlavičky je 20B, ale může ještě obsahovat volitelné vlastnosti. Tvar IP hlavičky záleží na použitém protokolu, následující příklad je pro IPv4.
bits | 0-3 | 4-7 | 8-15 | 16-18 | 19-31 |
0 | 4 | header length | Type of Service | total length (header + data) | |
32 | identification | flags | fragment offset | ||
64 | TTL | protocol | header checksum | ||
96 | source IP | ||||
128 | destination IP | ||||
160 | options (if any) | ||||
160/192+ | DATA |
TCP hlavička
TCP hlavička obsahuje zdrojový a cílový port, číslo sekvence a odpovědi (pro zajištění spolehlivosti), příznaky (kam patří SYN a ACK pro navázání spojení), velikost potvrzovacího okna a další. Standardní velikost je opět 20B.
bits | 0-3 | 4-7 | 8-15 | 16-31 |
0 | Source Port | Destination Port | ||
32 | Sequence Number | |||
64 | Acknowledgment Number | |||
96 | Data Offset | Reserved | Flags | Window |
128 | Checksum | Urgent Pointer | ||
160 | Options (optional) | |||
160/192+ | DATA |
Tak opět něco, určitě to neberte jako že si nevážím Vaší práce, spíš mi jde o vylepšení již dobrého ;)
Určitě není správné uvádět Internet Reference model jako 4 vrstvý ... IP pracuje na 3. vrstvě a tak by se to mělo uvádět vždy (sám velice často uvádím právě na "3. vrstvě" místo na "síťové vrstvě").
Zůstaňme na zdrojích cisca ;)
Ať se to vezme z hlediska IP:
http://www.cisco.com/en/US/tech/tk1330/tsd_technology_support_technical_reference_chapter09186a0080759807.html
Nebo z hlediska Ethernetu:
http://www.cisco.com/en/US/tech/tk1330/tsd_technology_support_technical_reference_chapter09186a008075974f.html
Vždy se mluví o tom že ethernet se dělí (na 2 vrstvy, celkem na 3 díly)... a ip začíná na 3. vrstvě ... zbytek vyplývá z toho prvního dokumentu...
2. příklad encapsulace jako jpeg headeru taky není správně.
odpověď na [1]tomfi: No já si o sobě rozhodně nemyslím, že bych byl vševědoucí a opravy či doplnění vítám. Navíc některé věci uvádím pouze pro doplnění celku (a nemám s nimi takové zkušenosti), takže čerpám z různých materiálů.
Co se týče, zda je TCP/IP model čtyř či pěti vrstvý, tak to je asi těžká otázka, i když jsem se nedíval do specifikace. Na netu jsou obě varianty popsány, tak 50 na 50, třeba i u Cisca
http://www.cisco.com/en/US/products/sw/secursw/ps743/products_user_guide_chapter09186a008007f2df.html
http://en.wikipedia.org/wiki/Tcp_ip_model
Jinak také radši používám označování vrstev číslem (a většinou doplňuji, že jde o ISO/OSI model) a pak je to dost matoucí (ten počet vrstev).
Co se týče toho JPGu, tak nevím na co jsem myslel, je to samozřejmě hloupost. Obrázek mohou být data, ta se zapouzdří do aplikačního protokolu (např. HTTP), takže na aplikační vrstvě je hlavička HTTP.
Mate pravdu... člověk se každý den něco přiučí ;)
DoD model je 4 vrstvý(rfc760 a rfc761)... přesně jak říkáte. Omlouvám se.
Ještě na tom textu na cisco.com koukněte na "Figure A-3" jak mají naznačené obalování dat.
Chtěl bych spáááát!! Spáááát!:-O
Fakt obdivuju lidi, kterým dávají tyhle řádky smysl :-) Bez takových jako vy bysme se určitě neobešli ;-)
Zdravim, píšu těď velmi zjednodušený TCP stack do embeded a zdá se mi, že v TCP hlavičce neodpovídá počet bitu dataoffset, který je 8bit a reserved + flags, které se naopak dělí o 1B, tedy 4b a 4b.
Článek pro mě jako víceméně laika zajímavý, dovolím si jen jazykovou poznámku, píše se rozhraní, nikoli rozhranní.
odpověď na [4]Anonym: A prečo teda vňbec čítaš tieto stránky? Či treba špehovať?
dekuji za pochopeni