IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

5. diel - Siete - Internet protokol - hlavička

V tomto diele sa zoznámime s chrbtovým protokolom dnešného Internet - úplná väčšina dát je cez túto sieť routerov prenášaná práve vďaka Internet protokolu (IP). Preskúmame hlavičku IP paketu a ako sa používa v dnešnom (2015) Internetu.

IP paket a jeho transport

IP_paket - Sieťové technológie

Akonáhle zariadenie vytvorí nejaký blok dát (môže to byť požiadavka na webovú stránku, samotná stránka, úsek streamovaného videa, alebo - pri používaní Voice over IP telefónu - treba váš hlas) a na jeho začiatok pridá IP hlavičku, vytvorí IP paket. Vďaka informáciám v tejto hlavičke môžu taký paket preposielať routre od odosielateľa k príjemcovi. Ak je paket po ceste nejako poškodený, alebo musel byť zahodený (pozri ďalej), router odosielateľovi odošle ICMP správu, prečo paket nemohol byť doručený. K ICMP sa ešte dostanem. Zatiaľ bude stačiť vedieť, že ICMP správy slúži na informovanie o rôznych chybách a k diagnostike siete. Aj tieto správy sú prenášané v IP paketu.

Takýto IP paket však nemôže cestovať v sieti "osamotený" - musí byť zapuzdrený (zabalený) v ďalšom protokole (aby vznikol rámec). Tento slúži len pre komunikáciu medzi bezprostredne spojenými zariadeniami - napríklad PC a router alebo router a switch. Každé takéto zariadenie (presnejšie každý port takéhoto zariadenia) má svoju MAC adresu (viď. Predchádzajúce diely) a po prijatí rámca zistí, kam ďalej ho má poslať.

Protokoly, čo môžu niesť IP paket, majú túto všeobecnú štruktúru:

DatalinkFrame - Sieťové technológie

Hlavička obsahuje všeobecne tieto polia: cieľová adresa, zdrojová adresa a protokol, ktorý rámec nesie. Päta (FCS - frame checksum) je kontrolný súčet celého rámca - každé zariadenie (routery, switche, zosilňovače, príjemcu, ...) vždy znovu spočíta kontrolný súčet rámca. Ak sa nezhoduje s pôvodným, znamená to, že sa dáta po ceste poškodila, a zariadení celý rámec zahodí. Jeden takýto protokol už poznáme - Ethernet.

IP hlavička a jednotlivé polia

IP_header - Sieťové technológie

Pozn. Differentiated services je rozsiahlejšie téma a má vyhradený samostatný článok. Červená pole majú samostatnú kapitolu nižšie - "Fragmentácia paketu a MTU discovery"

Verzia

IP, o ktorom sa teraz bavíme, je verzia 4. Ešte existuje verzie 6, ktorá je dnes horúcou témou - k tomu neskôr, teraz sa sústreďme na IPv4. Hodnota tohto poľa pre IPv4 bude 0100 (4).

Dĺžka hlavičky

Hlavička (na obrázku) je dlhá 20 bajtov. Na čo je potrebné toto pole? Internet protokol bol navrhnutý aj s tzv. IP options - čo mali byť polia, ktoré sa pridávajú hneď za hlavičku. Options polia môžu byť rôznych dĺžok a v rôznom počte až do veľkosti 40 bajtov - IP hlavička teda má dĺžku 20 - 60 bajtov. Dnes sa options už nepoužíva, takže dĺžka je pevná - 20 bajtov.

Problém skôr je, v akých "jednotkách" sa dĺžka vyjadruje. Pole je 4 bity veľké, takže maximálna hodnota 1111 (15). Pochopiteľne to nemôže byť dĺžka v bitoch, ale ani v bajtoch - i najmenšie hlavička je dlhá 20 bajtov. Dĺžka je tu vyjadrená v 4 bajtových blokoch (čiže 32-bitových slovách), takže pre hlavičku dĺžky 20 bajtov bude hodnota v poli 5 (5x4 = 20 bajtov).

Celková dĺžka

Celková dĺžka IP paketu (hlavička + dáta) v bajtoch. Minimálna dĺžka je 20 - iba hlavička, paket teda nenesie žiadne dáta (ešte som sa s tým nestretol), a maximálna dĺžka 2 16 = 65 535 (pole je 16 bitové). Takáto dĺžka je však skôr teoretická a prakticky obmedzená MTU (viď. Ďalej).

Time to live

Hodnota zabraňuje nekonečnému cestovanie paketu v sieti (napríklad kvôli chybe tabuľky Routing by paket neustále obiehal koliesko medzi piatimi routery). Odosielateľ ju nastaví na nejakú počiatočnú hodnotu (odporúčaná je 64, môj PC dáva 128) a každý router, ktorý tento IP paket dostane, túto hodnotu zníži o 1. Ak sa hodnota TTL dostane na nulu (a paket nebol doručený cieľovému zariadení), potom router paket zahodí a odosielateľovi odošle ICMP správu "Time exceeded".

Môžete si to skúsiť: Poslúži nám utilita ping, ktorá vysiela (na Windows defaultne štyrikrát) na danú IP adresu ICMP správu "Echo request". Ak je príjemca on-line (tj. Že normálne funguje) a nie je nakonfigurovaný tak, aby na Echo request neodpovedal, tak vám pošle naspäť ICMP "Echo reply". Do príkazového riadka napíšte ping –i 3 www.google.com. Prepínačom "i" meníme práve hodnotu TTL - nastavil som 3, takže ideálne paket prejde vašim routerom, cez vášho ISP, a zastaví sa hneď na ďalšom routeru - TLL klesne na nulu, a dostanete "Time exceeded" správu (TLL expired in transit) :

ping_cmd - Sieťové technológie

Protokol

Pole má rovnakú funkciu ako pri Ethernetu - určí, ktorý typ protokolu IP paket nesie. Napr. pre ICMP je to 1, pre TCP - 6 alebo pre UDP - 17. Transportné protokoly TCP a UDP budú témou niektorého z nasledujúcich dielov.

Kontrolný súčet hlavičky

Kontrolný súčet sa vypočíta z IP hlavičky (vrátane tohto poľa, v čase výpočtu je vyplnené nulami) a umiestni sa sem. Ak je IP paket nesený Ethernetom či iným protokolom s FCS, potom je pole celkom zbytočné - protokol obsahuje FCS celého rámca a pokiaľ ten nesúhlasí, celý rámec je zahodený.

Zdrojová a cieľová IP adresa

Tieto polia sú snáď jasné :-)

Fragmentácia IP paketu a MTU discovery

Než sa budeme baviť o fragmentácii, musíme vedieť, čo je to MTU (maximum transmission unit). Je to maximálna dĺžka IP paketu vrátane hlavičky, ktorý môže prejsť po danom type siete. S jedným MTU sme sa stretli - MTU pre Ethernet - 1500 bajtov. Napr. pre Wi-Fi je to 2300 bajtov. Pre rôzne typy sietí sa stanovili rôzne MTU z ešte různějších dôvodov (predtým značne obmedzená veľkosť vyrovnávacej pamäte - zariadenie jednoducho nemohlo prijať celý paket, dnes skôr ako kompromis medzi efektivitou a chybovosťou - dlhšia pakety sa skôr poškodí). Každopádne, toto MTU je uložené na každom PC / routeru, ktorý má prístup k sieti (čiže má NIC). Ak odosiela paket, prvý zistí jeho dĺžku, a keď je väčší ako MTU, tak paket musí zahodiť. Pokiaľ sa jedná o router, odošle odosielateľovi ICMP správu "Packet too big":

packetTooBigScheme - Sieťové technológie

Fragmentácia paketu

Je prvá možnosť riešenia rôznych MTU. Pracuje nasledovne: Ak má zariadenie odoslať paket, ktorý je väčší než MTU jeho siete, rozporcujeme (fragmentom) paket na diely, ktoré sa do siete "vojdú", pridelí im vlastné IP hlavičku a odošle ich. Fragmenty potom putujú po Internete ako nezávislé IP pakety, kým je nedostane príjemcu. Ten fragmenty zostaví dohromady pomocou informácií, ktoré sú v obrázku IP header (začiatok článku) zafarbené na červeno. O nich budem teraz hovoriť:

Poľa Identifikácia

Každý odoslaný IP paket dostane svoje 16 bitové ID. Nastavuje sa tak, aby pre každé spojenie [odosielateľ | príjemca | protokol] bolo jedinečné (aspoň po určitú dobu, IETF odporúča 2 minúty). Dôležité je, že ak je paket fragmentovaný, tak všetky fragmenty jedného paketu dostanú rovnaké ID. Príjemca tak môže zostaviť paket sa správnych "dielikov".

Flagy

Prvý bit (flag) IETF rezervovalo, a dodnes pre neho nenašli použitie - hodnota vždy 0. Druhý flag, alias Nechcem fragment flag (DF), zakazuje fragmentácii paketu, pokiaľ je nastavený na 1. Takže akonáhle je paket väčšia ako MTU siete, router paket zahodí a odosielateľovi odošle ICMP "packet too big". Opäť si môžete pohrať s príkazovým riadkom:

Skúste príkaz ping -f -l 2000 www.itnetwork.cz. Parameter f nastaví flag DF na 1, al určí, koľko bajtov náhodne vygenerovaných dát sa má poslať na server našej obľúbené webové stránky. Ak jede vaša LAN na Ethernetu (a nezapáral ste sa v nastavení), tak uvidíte chybovú hlášku.

Tretia flag - More fragments flag (MF) - hovorí príjemcovi (ak má hodnotu 1), ktorý si momentálne zhromažďuje fragmenty v pamäti (aby ich mohol zostaviť a ako celok odovzdať ďalšej časti operačného systému pre spracovanie), že paket ešte nie je celý - nasleduje viac fragmentov. Z toho vyplýva, že posledný fragment bude mať tento flag nastavený na 0.

Pozície fragmentu (Fragment offset)

Hovorí príjemcovi, koľko oktetov (Osmica bajtov) od začiatku pôvodného paketu sa dáta vo fragmentu nachádza - doslova "odsadenie" fragmentu od začiatku. Z toho tiež vyplýva, že dĺžka dát (v bajtoch) v každom fragmentu (okrem posledného) musí byť deliteľná ôsmich. Pole je potreba, pretože fragmenty nemusí doraziť v rovnakom poradí, ako boli odosielané. Fragment offset teda vlastne určuje poradie fragmentu v pakete.

Prvý fragment má túto hodnotu vždy 0. Nasledujúce fragment dostane hodnotu predchádzajúceho fragmentu + dĺžka dát v predchádzajúcom fragmentu v bajtoch. Tu je príklad takejto fragmentácia v Ethernetu:

fragmentácia - Sieťové technológie

Keď vezmeme jednotlivé dátové bloky vo fragmentoch, ich Fragment offset hodnoty a poskladáme ich za seba, začína to dávať zmysel:

fragmentOffset - Sieťové technológie

Tieto kusy dát príjemcu extrahuje z jednotlivých fragmentov, a poskladá ich za seba podľa Fragment offset poľa.

Od fragmentácie sa už upustilo (alebo upúšťa), pretože má niekoľko nevýhod. V prvom rade je to práca navyše pre routery (kopírovať IP hlavičky a přeskládávat dáta). Je to práca navyše aj na strane príjemcu, ktorý musí čakať, až dostane všetky fragmenty, ktoré potom zoradia a zostaví pôvodnej paket. Ďalej, ak dôjde k strate len jediného fragmentu, musí sa zahodiť celý zvyšok paketu - nie je možnosť, ako preposlať len jeden fragment.

Namiesto fragmentácia si teda odosielateľ zistí, ako maximálne veľký môže paket byť, aby mohol prejsť celou cestou vcelku.

MTU discovery

Ako hovorí názov - je to metóda pre zistenie MTU pre danú cestu. Neposielajú sa žiadne špeciálne "MTU discovery pakety" alebo niečo podobné. Zisťovanie prebieha za behu:

Odosielateľ (typicky PC) odošle klasický paket s dátami tak veľký, ako mu jeho sieť dovolí, pričom nastaví flag Nechcem fragment na 1. Ak sa po ceste vyskytne sieť s menším MTU, router nemôže paket fragmentovať kvôli DF FLAG. Zahodí teda paket a pošle PC správu "Packet too big" - táto obsahuje aj MTU siete, ktorú paket nemohol prejsť. PC teda zmenší paket na danú hodnotu, a odosiela znova. Postup sa opakuje do tej doby, než paket prejde celou cestou. U Internete platí, že jednotlivé pakety pre rovnakú destináciu môžu cestovať inokade - preto je potom vo všetkých odoslaných paketoch nastavený DF flag vždy na 1, aby sa PC mohol prispôsobiť aj pri zmene trasy.

Väčšina spojov v Internete má MTU rovnakú alebo väčšia ako Ethernet (a Ethernet je globálny štandard pre LAN siete). Fragmentácia teda nie je v súčasnosti veľký problém a prebieha de facto len na PC (resp. Serveroch) pri odosielaní webových stránok či sťahovanie filmov, hier .. Toto však nie je IP fragmentácie, o ktorej sme hovorili. Server pozná svoje MTU a štiepi prúd dát ešte predtým, než začne pripájať protokolovej hlavičky.

V ďalšom diele dokončíme IP hlavičku - polia Differentiated services a jeho mechanizmy. Otázky prosím do komentárov :-)


 

Predchádzajúci článok
Siete - Internet a smerovanie dát
Všetky články v sekcii
Sieťové technológie
Preskočiť článok
(neodporúčame)
Siete - Internet Protocol - Differentiated Services
Článok pre vás napísal Neaktivní uživatel
Avatar
Užívateľské hodnotenie:
1 hlasov
Tento uživatelský účet již není aktivní na základě žádosti jeho majitele.
Aktivity