IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Lekce 8 - Sítě - Internet Protokol - Hlavička

V minulé lekci, Sítě - IPv4 - Tvorba podsítí v praxi, jsme si vysvětlili rozdělení adresního prostoru protokolu IPv4 na praktickém příkladu.

V této lekci se seznámíme s páteřním protokolem dnešního Internetu – naprostá většina dat je přes tuto síť routerů přenášena právě díky Internet protokolu (IP). Prozkoumáme hlavičku IP paketu a jak se používá v dnešním (2015) Internetu.

IP paket a jeho transport

IP_paket - Základy sítí

Jakmile zařízení vytvoří nějaký blok dat (může to být požadavek na webovou stránku, samotná stránka, úsek streamovaného videa, nebo – při používání Voice over IP telefonu – třeba váš hlas) a na jeho začátek přidá IP hlavičku, vytvoří IP paket. Díky informacím v této hlavičce mohou takový paket přeposílat routery od odesílatele k příjemci. Pokud je paket po cestě nějak poškozen, nebo musel být zahozen (viz dále), router odesílateli odešle ICMP zprávu, proč paket nemohl být doručen. K ICMP se ještě dostanu. Zatím bude stačit vědět, že ICMP zprávy slouží k informování o různých chybách a k diagnostice sítě. I tyto zprávy jsou přenášeny v IP paketu.

Takový IP paket však nemůže cestovat v síti „osamocený“ – musí být zapouzdřen (zabalen) v dalším protokolu (aby vznikl rámec). Tento slouží pouze pro komunikaci mezi bezprostředně spojenými zařízeními - například PC a router nebo router a switch. Každé takové zařízení (přesněji každý port takového zařízení) má svou MAC adresu (viz. předchozí díly) a po přijetí rámce zjistí, kam dále ho má poslat.

Protokoly, co mohou nést IP paket, mají tuto obecnou strukturu:

DatalinkFrame - Základy sítí

Hlavička obsahuje obecně tyto pole: cílová adresa, zdrojová adresa a protokol, který rámec nese. Patička (FCS – frame checksum) je kontrolní součet celého rámce – každé zařízení (routery, switche, zesilovače, příjemce, ...) vždy znovu spočítá kontrolní součet rámce. Pokud se neshoduje s původním, znamená to, že se data po cestě poškodila, a zařízení celý rámec zahodí. Jeden takový protokol už známe - Ethernet.

IP hlavička a jednotlivá pole

IP_header - Základy sítí

Pozn. Differentiated services je rozsáhlejší téma a má vyhrazený samostatný článek. Červená pole mají samostatnou kapitolu níže - "Fragmentace paketu a MTU discovery"

Verze

IP, o kterém se nyní bavíme, je verze 4. Ještě existuje verze 6, která je dnes horkým tématem – k tomu později, teď se soustřeďme na IPv4. Hodnota tohoto pole pro IPv4 bude 0100 (4).

Délka hlavičky

Hlavička (na obrázku) je dlouhá 20 bajtů. Na co je potřeba toto pole? Internet protokol byl navrhnut i s tzv. IP options – což měly být pole, které se přidávají hned za hlavičku. Options pole mohou být různých délek a v různém počtu až do velikosti 40 bajtů – IP hlavička tedy má délku 20 – 60 bajtů. Dnes se options již nepoužívá, takže délka je pevná – 20 bajtů.

Problém spíše je, v jakých „jednotkách“ se délka vyjadřuje. Pole je 4 bity velké, takže maximální hodnota je 1111 (15). Pochopitelně to nemůže být délka v bitech, ale ani v bajtech – i nejmenší hlavička je dlouhá 20 bajtů. Délka je zde vyjádřená ve 4 bajtových blocích (neboli 32-bitových slovech), takže pro hlavičku délky 20 bajtů bude hodnota v poli 5 (5x4 = 20 bajtů).

Celková délka

Celková délka IP paketu (hlavička + data) v bajtech. Minimální délka je 20 – pouze hlavička, paket tedy nenese žádná data (ještě jsem se s tím nesetkal), a maximální délka 216 = 65 535 (pole je 16 bitové). Taková délka je ovšem spíše teoretická a prakticky omezena MTU (viz. dále).

Time to live

Hodnota zabraňuje nekonečnému cestování paketu v síti (třeba kvůli chybě v routovací tabulce by paket neustále obíhal kolečko mezi pěti routery). Odesílatel ji nastaví na nějakou počáteční hodnotu (doporučená je 64, můj PC dává 128) a každý router, který tento IP paket obdrží, tuto hodnotu sníží o 1. Pokud se hodnota TTL dostane na nulu (a paket nebyl doručen cílovému zařízení), pak router paket zahodí a odesílateli odešle ICMP zprávu „Time exceeded“.

Můžete si to zkusit: Poslouží nám utilita ping, která vysílá (na Windows defaultně čtyřikrát) na danou IP adresu ICMP zprávu „Echo request“. Pokud je příjemce on-line (tj. že normálně funguje) a není nakonfigurovaný tak, aby na Echo request neodpovídal, tak vám pošle zpátky ICMP „Echo reply“. Do příkazového řádku napište ping –i 3 www.google.com. Přepínačem „i“ měníme právě hodnotu TTL – nastavil jsem 3, takže ideálně paket projde vašim routerem, přes vašeho ISP, a zastaví se hned na dalším routeru – TLL klesne na nulu, a dostanete „Time exceeded“ zprávu (TLL expired in transit):

ping_cmd - Základy sítí

Protokol

Pole má stejnou funkci jako u Ethernetu – určí, který typ protokolu IP paket nese. Např. pro ICMP je to 1, pro TCP - 6 nebo pro UDP - 17. Transportní protokoly TCP a UDP budou tématem některého z následujících dílů.

Kontrolní součet hlavičky

Kontrolní součet se vypočítá z IP hlavičky (včetně tohoto pole, v době výpočtu je vyplněno nulami) a umístí se sem. Pokud je IP paket nesen Ethernetem či jiným protokolem s FCS, pak je pole celkem zbytečné – protokol obsahuje FCS celého rámce a pokud ten nesouhlasí, celý rámec je zahozen.

Zdrojová a cílová IP adresa

Tyhle pole jsou snad jasná :-)

Fragmentace IP paketu a MTU discovery

Než se budeme bavit o fragmentaci, musíme vědět, co je to MTU (maximum transmission unit). Je to maximální délka IP paketu včetně hlavičky, který může projít po daném typu sítě. S jedním MTU jsme se setkali – MTU pro Ethernet – 1500 bajtů. Např. pro Wi-Fi je to 2300 bajtů. Pro různé typy sítí se stanovily různé MTU z ještě různějších důvodů (dříve značně omezená velikost vyrovnávací paměti - zařízení jednoduše nemohlo přijmout celý paket, dnes spíše jako kompromis mezi efektivitou a chybovostí - delší pakety se spíše poškodí). Každopádně, toto MTU je uložené na každém PC / routeru, který má přístup k síti (čili má NIC). Pokud odesílá paket, první zjistí jeho délku, a když je větší než MTU, tak paket musí zahodit. Pokud se jedná o router, odešle odesílateli ICMP zprávu „Packet too big“:

packetTooBigScheme - Základy sítí

Fragmentace paketu

Je první možnost řešení různých MTU. Pracuje následovně: Pokud má zařízení odeslat paket, který je větší než MTU jeho sítě, rozporcuje (fragmentuje) paket na díly, které se do sítě „vejdou“, přidělí jim vlastní IP hlavičku a odešle je. Fragmenty poté putují po Internetu jako nezávislé IP pakety, dokud je nedostane příjemce. Ten fragmenty sestaví dohromady pomocí informací, které jsou v obrázku IP headeru (začátek článku) obarveny červeně. O nich budu teď mluvit:

Pole Identifikace

Každý odeslaný IP paket dostane své 16 bitové ID. Nastavuje se tak, aby pro každé spojení [odesílatel|pří­jemce|protokol] bylo jedinečné (alespoň po určitou dobu, IETF doporučuje 2 minuty). Důležité je, že pokud je paket fragmentován, tak všechny fragmenty jednoho paketu dostanou stejné ID. Příjemce tak může sestavit paket se správných „dílků“.

Flagy

První bit (flag) IETF rezervovalo, a dodnes pro něj nenašli použití - hodnota je vždy 0. Druhý flag, alias Don’t fragment flag (DF), zakazuje fragmentaci paketu, pokud je nastaven na 1. Takže jakmile je paket větší než MTU sítě, router paket zahodí a odesílateli odešle ICMP „packet too big“. Opět si můžete pohrát s příkazovým řádkem:

Zkuste příkaz ping –f –l 2000 www.itnetwork.cz. Parametr f nastaví flag DF na 1, a l určí, kolik bajtů náhodně vygenerovaných dat se má poslat na server naší oblíbené webové stránky. Pokud jede vaše LAN na Ethernetu (a nevrtali jste se v nastavení), tak uvidíte chybovou hlášku.

Třetí flag – More fragments flag (MF) – říká příjemci (pokud má hodnotu 1), který si momentálně shromažďuje fragmenty v paměti (aby je mohl sestavit a jako celek předat další části operačního systému pro zpracování), že paket ještě není celý – následuje více fragmentů. Z toho vyplývá, že poslední fragment bude mít tento flag nastaven na 0.

Pozice fragmentu (Fragment offset)

Říká příjemci, kolik oktetů (osmic bajtů) od začátku původního paketu se data ve fragmentu nachází – doslova „odsazení“ fragmentu od začátku. Z toho také vyplývá, že délka dat (v bajtech) v každém fragmentu (krom posledního) musí být dělitelná osmi. Pole je potřeba, protože fragmenty nemusí dorazit ve stejném pořadí, jak byly odesílány. Fragment offset tedy vlastně určuje pořadí fragmentu v paketu.

První fragment má tuto hodnotu vždy 0. Následující fragment dostane hodnotu předcházejícího fragmentu + délka dat v předcházejícím fragmentu v bajtech. Zde je příklad takové fragmentace v Ethernetu:

fragmentace - Základy sítí

Když vezmeme jednotlivé datové bloky ve fragmentech, jejich Fragment offset hodnoty a poskládáme je za sebe, začíná to dávat smysl:

fragmentOffset - Základy sítí

Tyto kusy dat příjemce extrahuje z jednotlivých fragmentů, a poskládá je za sebe podle Fragment offset pole.

Od fragmentace se již upustilo (nebo upouští), protože má několik nevýhod. V prvé řadě je to práce navíc pro routery (kopírovat IP hlavičky a přeskládávat data). Je to práce navíc také na straně příjemce, který musí čekat, až dostane všechny fragmenty, které pak seřadí a sestaví původní paket. Dále, pokud dojde ke ztrátě jen jediného fragmentu, musí se zahodit celý zbytek paketu – není možnost, jak přeposlat jen jeden fragment.

Místo fragmentace si tedy odesilatel zjistí, jak maximálně velký může paket být, aby mohl projít celou cestou vcelku.

MTU discovery

Jak říká název – je to metoda pro zjištění MTU pro danou cestu. Neposílají se žádné speciální „MTU discovery pakety“ nebo něco podobného. Zjišťování probíhá za běhu:

Odesilatel (typicky PC) odešle klasický paket s daty tak veliký, jak mu jeho síť dovolí, přičemž nastaví flag Don’t fragment na 1. Pokud se po cestě vyskytne síť s menším MTU, router nemůže paket fragmentovat kvůli DF flagu. Zahodí tedy paket a pošle PC zprávu „Packet too big“ – tato obsahuje i MTU sítě, kterou paket nemohl projít. PC tedy zmenší paket na danou hodnotu, a odesílá znovu. Postup se opakuje do té doby, než paket projde celou cestou. U Internetu platí, že jednotlivé pakety pro stejnou destinaci mohou cestovat jinudy – proto je pak ve všech odeslaných paketech nastaven DF flag vždy na 1, aby se PC mohl přizpůsobit i při změně trasy.

Většina spojů v Internetu má MTU stejnou nebo větší než Ethernet (a Ethernet je globální standard pro LAN sítě). Fragmentace tedy není v současnosti velký problém a probíhá de facto jen na PC (resp. serverech) při odesílání webových stránek či stahování filmů, her.. Toto nicméně není IP fragmentace, o které jsme mluvili. Server zná své MTU a štěpí proud dat ještě předtím, než začne připojovat protokolové hlavičky.

V příští lekci, Sítě - Fyzický přenos, MAC adresy a protokoly, si vysvětlíme, jak se fyzicky přenáší bity a co jsou to síťové karty. Následně se podíváme na MAC adresy a základní síťové protokoly.


 

Předchozí článek
Sítě - IPv4 - Tvorba podsítí v praxi
Všechny články v sekci
Základy sítí
Přeskočit článek
(nedoporučujeme)
Sítě - Fyzický přenos, MAC adresy a protokoly
Článek pro vás napsal Neaktivní uživatel
Avatar
Uživatelské hodnocení:
210 hlasů
Tento uživatelský účet již není aktivní na základě žádosti jeho majitele.
Aktivity