Menu Zavrieť

4.3. Sieťový protokol IP verzie 4 (IPv4)

IP: internet protocolRFC 791

Protokol IP verzie 4 (IPv4) je v súčasnosti hlavným nosným protokolom sieťovej vrstvy na internete. Postupne by ho mal začať nahrádzať IP protokol verzie 6 (IPv6), ktorý je spomínaný v nasledujúcej prednáške. Protokol IPv6 zatiaľ podporuje málo poskytovateľov internetu a zatiaľ sa nepresadil ani vo firemných sieťach.

Hlavička datagramu protokolu IPv4 je zobrazená na nasledujúcom obrázku.

Význam jednotlivých častí hlavičky IPv4:

  • version – verzia IP protokolu – Má v sebe číslo 4.
  • length – dĺžka hlavičky – Určuje, koľko bitov zaberá hlavička delené 32. Najmenšia dĺžka hlavičky je 20 bajtov, teda 20*8=160 bitov, z čoho vyplýva, že najmenšie číslo v tomto políčku je 160/32=5.
  • type of service – v preklade typ služby – Určuje charakter dát prenášaných v tomto IP datagrame. Typ služby tak určuje prioritu datagramu, ktorá sa môže brať do úvahy pri zaraďovaní vo výstupných radoch rozhraní routrov. V type služby sa dá v prípade potreby špecifikovať požiadavka na malé zdržanie, vysokú priepustnosť a/alebo vysokú spoľahlivosť.
  • total length – celková dĺžka – Predstavuje počet bajtov celého IP datagramu. Maximálna dĺžka je závislá od typu siete a je označovaná aj ako MTU teda maximum transmission unit. V Ethernete sa bežne používa MTU 1500 bajtov. Podľa špecifikácie by malo byť každé zariadenie schopné prijať datagram minimálne veľkosti 576 bajtov. Je však možné, aby boli po sieti zasielané aj kratšie datagramy (rôzne dolné limity sú dané technológiou nižšej vrstvy). Ak router prijme datagram, ktorý je väčší ako MTU spoja, do ktorého má byť tento datagram odoslaný, je nutné robiť fragmentáciu na viac menších datagramov. Na označovanie jednotlivých fragmentov slúžia ďalšie 3 hodnoty hlavičky IP datagramu.
  • identification – Určuje jedinečné číslo datagramu. Toto číslo sa používa na to, že ak po ceste dôjde k fragmentácii datagramu, každý fragment bude mať toto číslo rovnaké a na základe toho bude prijímajúca strana vedieť, ktoré fragmenty patria k sebe. Tieto identifikačné čísla sa vo vysielacej stanici generujú v závislosti od operačného systému rôzne. Niektoré OS zvyšujú čísla datagramov o 1, niektoré ich generujú zakaždým náhodne. Windowsy napríklad zvyšujú čísla o 256.
  • flags – príznaky – Sú iba dva:
    • DF – 0 znamená, že datagram môže byť fragmentovaný a 1 znamená, že nemôže.
    • MF – 0 znamená, že ide o posledný z fragmentov pôvodného datagramu a 1 znamená, že to nie je posledný fragment pôvodného datagramu.
  • fragment offset – Určuje, od ktorej pozície z tela pôvodného datagramu začínajú dáta v tomto fragmente. Pozícia sa určuje v 8 bajtových jednotkách.
  • time to live, často uvádzaný iba ako skratka TTL – Určuje, cez koľko routrov môže datagram na svojej ceste maximálne prejsť. Pri každom prechode routrom sa toto číslo znižuje o 1. Ak na router príde datagram s TTL 1, je datagram automaticky zahodený.
  • protocol – Toto políčko sa použije, až keď datagram príde do cieľovej stanice. Určuje to, aký protokol je použitý v tele datagramu. Typicky to môže byť identifikácia toho, že v datagrame je prenášaný segment transportného protokolu TCP alebo UDP. Je potrebné si uvedomiť, že v tele IP datagramu sú bez tejto informácie iba akési dáta (nejaké jednotky a nuly) bez zmyslu. Ak však vieme, že v tele datagramu je napríklad UDP segment, vieme, že prvých 8 bajtov tela IP datagramu je hlavička UDP datagramu a zvyšok sú dáta pre aplikačnú vrstvu. TCP a UDP nie sú jediné dva protokoly, ktoré môžu byť prenášané v IPv4 datagrame. Stretneme sa ešte napríklad s protokolmi ICMP, IGMP, PIM, ale aj s protokolom IPv6, ktoré tiež sú alebo môžu byť prenášané vo vnútri IPv4 datagramov. Úplný výpis všetkých možností je na stránke organizácie IANA .
  • header checksum – Kontrolný súčet hlavičky sa robí rovnako ako v prípade protokolov TCP a UDP sčítavaním 16 bitových úsekov hlavičky.
  • source address – zdrojová adresa – 32 bitová adresa zdrojovej stanice.
  • destination address – cieľová adresa – 32 bitová adresa cieľovej stanice. Viac o adresácii v IPv4 sieťach je popísané nižšie.
  • options, alebo voľby je nepovinná súčasť hlavičky. Ich použitie často zbytočne znižuje výkon routrov a je snaha ich nepoužívať. Môžu obsahovať rôzne doplňujúce údaje k bezpečnosti, smerovaniu, identifikáciu prúdov dát alebo časové pečiatky.

4.3.1  Fragmentácia a defragmentácia

Všetky fyzické spoje v sieti majú určenú maximálnu veľkosť datagramu sieťovej vrstvy, ktorú sú schopné preniesť. Táto maximálna veľkosť sa označuje MTU = maximum transmission unit. V sieti typu Ethernet sa používa MTU 1500 bajtov, ale napríklad WLAN (Wi-Fi) môže mať MTU až 7981 bajtov. Ak na router príde datagram, ktorý je väčší ako MTU spoja, do ktorého je potrebné tento datagram poslať, vykoná fragmentáciu datagramu na menšie datagramy, ktoré už týmto spojom môžu prechádzať. Tieto fragmenty sa naspäť spájajú až v cieľovej stanici aj v prípade, že táto cieľová stanica je pripojená spojom, ktorý má MTU dostatočne veľké na prenos pôvodného (veľkého) datagramu. Dôvodom je to, že fragmenty môžu cestovať do cieľa rôznymi cestami a tým pádom by sa router na jednej z týchto ciest nemusel dočkať všetkých fragmentov pôvodného datagramu.

Predstavme si situáciu, že na router príde datagram veľkosti 4000 bajtov a je potrebné ho poslať cez spojenie s MTU 1500. Týchto 4000 bajtov sa skladá z 20 bajtov hlavičky IP datagramu a 3980 bajtov tela IP datagramu (napr. TCP segment). Keďže aj fragmenty budú potrebovať IP hlavičku, do každého z nich môžeme dať maximálne 1480 bajtov dát z tela pôvodného datagramu. Rozdelíme teda pôvodných 3980 bajtov na tri časti 1480, 1480 a 1020 bajtov a každej z týchto častí dáme samostatnú hlavičku veľkosti 20 bajtov, čím vzniknú datagramy veľkosti 1500, 1500 a 1040 bajtov.

Pozrime sa na podstatné časti hlavičiek týchto datagramov, ktoré sú potrebné na identifikáciu toho, že ide o fragmenty toho istého datagramu a v akom poradí majú byť pospájané. Najprv predpokladajme, že pôvodný datagram má v hlavičke nasledujúce hodnoty:

total length identification DF MF offset
4000 123456 0 0 0

Pretože výstupné MTU je 1500 bajtov, vzniknú 3 datagramy – fragmenty pôvodného datagramu, s nasledujúcimi hodnotami v hlavičke.

total length identification DF MF offset
1500 123456 0 1 0
1500 123456 0 1 185
1040 123456 0 0 370

Prvý datagram má nastavené MF=1, teda, že nejde o posledný fragment a offset=0, čo znamená, že sú v ňom dáta od nultého bajtu pôvodného datagramu. Druhý datagram má tiež MF=1, lebo tiež nie je posledný fragment. Offset má rovný 185, čo znamená, že sú v ňom dáta od 185*8=1480-teho bajtu pôvodného datagramu. Tretí datagram je už posledným fragmentom, teda má MF=0 a offset=370, čo znamená, že sú v ňom dáta od 370*8=2960-teho bajtu pôvodného datagramu.

Ak by pôvodný datagram mal hodnotu DF=1, fragmentácia nie je možná a paket sa musí zahodiť.

4.3.2  Adresácia v protokole IPv4

V protokole IPv4 sa používajú 32 bitové IP adresy. Tieto adresy sa zapisujú ako 4 osembitové čísla v desiatkovej sústave oddelené bodkami. Napríklad IP adresa 158.197.31.4 je vlastne špeciálne zapísané 32 bitové číslo, ktoré v binárnom zápise vyzerá nasledovne 10011110 11000101 00011111 00000100, lebo 158 v desiatkovej sústave sa binárnej sústave zapíše ako 10011110, 197 ako 11000101, 31 ako 11111 a 4 ako 100.

Každé sieťové rozhranie pripojené do počítačovej siete má vlastnú IP adresu. Sieťové rozhranie je logická časť zariadenia, obvykle priradená jednému fyzickému pripojeniu, typicky sieťovej karte. Jedno koncové zariadenie má obvykle aktívne iba jedno rozhranie na komunikáciu s inými koncovými zariadeniami. Router má samostatné rozhranie pre každé pripojenie, a pre každé má inú IP adresu.

Internet je sieť sietí. Zariadenia z rôznych sietí medzi sebou vedia spolu komunikovať iba cez routre, avšak zariadenia, ktoré sú v jednej sieti dokážu komunikovať v rámci svojej siete bez účasti routra. Zariadenia v rámci jednej siete musia mať IP adresy patriace do rovnakej siete. Čo to znamená, že dve IP adresy patria do rovnakej siete? Majú rovnakú adresu siete, alebo inak, majú rovnakú sieťovú časť IP adresy.

Pôvodné určovanie sieťovej časti IP adresy

Každá IP adresa sa delí na dve časti: časť určujúcu sieť a časť určujúcu stanicu v tejto sieti. Dva počítače v jednej sieti musia mať časť určujúcu sieť rovnakú. Pôvodne, keď bol Internet ešte malý a IP adries bol dostatok, vznikla kategorizácia IP adries, ktorá iba na základe hodnôt prvých pár bitov IP adresy určovala, aká časť 32 bitovej adresy bude určovať sieť. Boli určené 4 triedy IP adries A až D. V triede A bola sieť určená prvými 8 bitmi a zvyšných 24 bitov označovalo stanicu v tejto sieti. Trieda B mala prvých 16 bitov pre sieť a ďalších 16 pre stanice, trieda C mala prvých 24 bitov pre sieť a posledných 8 pre stanice.

Trieda D má všetkých 32 bitov určujúcich sieť, čo znamená, že žiadne zariadenie nemôže mať adresu typu D. Na prvý pohľad to možno vyzerá nelogicky, no tieto IP adresy sa používajú v multicaste na identifikáciu multicastovej skupiny. Multicast budeme širšie rozoberať pri smerovacích algoritmoch. V skratke ide o to, že pri multicaste chce viacej staníc komunikovať tak, že datagram s cieľovou multicastovou IP adresou, ktorý vyšle ľubovoľná z týchto staníc, chcú prijať všetky stanice prihlásené do tohto multicastu. Typickým príkladom využitia multicastu môžu byť videokonferencie alebo vysielanie rádií a televízie.

V nasledujúcej tabuľke sú uvedené triedy IP adries. Všimnite si úvodné bity, ktoré určujú triedu adries. Písmenkom s je označený „ľubovoľný“ bit patriaci sieťovej časti IP adresy a písmenkom x je označený bit v časti určenej pre identifikáciu stanice v tejto sieti.

trieda adresy triedy
A 0sssssss xxxxxxxx xxxxxxxx xxxxxxxx
B 10ssssss ssssssss xxxxxxxx xxxxxxxx
C 110sssss ssssssss ssssssss xxxxxxxx
D 1110ssss ssssssss ssssssss ssssssss

Treba poznamenať, že bola určená aj trieda E, na špeciálne účely, ale to v súčasnosti nie je podstatné.

CIDR: Classless Inter-Domain Routing

Pôvodné delenie má mnohé nevýhody. Keď si vezmeme triedu A, tak tá môže obsahovať vyše 16 miliónov počítačov. Mnohé protokoly využívajú broadcastové správy, t.j. správy určené pre všetky počítače v sieti. Takéto správy od každého z počítačov môžu výrazne zaťažovať sieť. V sieti typu B vieme prideliť IP adresu vyše 65 tisícom počítačom a v sieti typu C 254 počítačom. Tento skok je dosť výrazný. Čo robiť s organizáciami, ktoré majú zhruba 1000 počítačov, ktoré by chceli mať v jednej sieti? Ak by sa im pridelila sieť typu B, tak vyše 64 tisíc IP adries ostane nevyužitých. Keďže IP adries je málo, takýto luxus si nemôžeme dovoliť.

Bolo teda určené (RFC 4632), že IP adresa môže mať ľubovoľnú časť IP adresy, ktorá určuje sieť. To, koľko bitov IP adresy tvorí identifikácia siete, určuje maska siete. Maska siete má rovnako ako IP adresa 32 bitov. Maska vždy vyzerá tak, že v ľavej časti majú všetky bity hodnotu 1 a zvyšok (v pravej časti) tvoria nuly. Ak by sme napríklad chceli, aby sieťová časť IP adresy mala veľkosť 27 bitov, maska by vyzerala tak, že by mala 27 bitov s hodnotou 1 a zvyšných 5 bitov by boli nuly teda 11111111 11111111 11111111 11100000. Aj maska sa zapisuje podobne ako IP adresa, teda ako 4 osembitové čísla v desiatkovej sústave oddelené bodkami. Teda maska s 27 jednotkami v binárnom zápise sa zapíše ako 255.255.255.224, lebo 11111111 je v desiatkovej sústave 255 a 11100000 je v desiatkovej sústave 224.

Predpokladajme, že máme IP adresu 158.197.31.170 s maskou 255.255.255.224. Táto informácia sa dá zapísať aj skrátene, a to úplnou IP adresou 158.197.31.170/27. Číslo 27 za lomkou hovorí, koľko bitov masky siete tvoria jednotky.

Načo je nám vlastne dobré vedieť, aká časť IP adresy predstavuje sieť? Ako sme už spomínali, pokiaľ chcú komunikovať dva počítače z jednej siete, vedia komunikovať priamo, ale pokiaľ nie sú z jednej siete, musia komunikovať cez router. Ako neskôr uvidíme, aj router na základe svojej smerovacej tabuľky musí zisťovať, do ktorej siete má poslať ktorý datagram.

Môžu byť stanice s IP adresami 158.197.31.170/27 a 158.197.31.155/27 v rovnakej sieti? To zistíme tak, že si vypočítame pre každú z týchto adries adresu siete a ak sú rovnaké ich adresy siete, potom sú tieto dva počítače v rovnakej sieti. Ak nie sú ich adresy sietí rovnaké, tieto dva počítače nemôžu byť v rovnakej sieti. Adresa siete sa počíta tak, že sa vykoná logický AND IP adresy a masky siete medzi dvojicami bitov na príslušných pozíciách.

   IP adresa: 10011110 11000101 00011111 10101010 (158.197.31.170)
       maska: 11111111 11111111 11111111 11100000 (255.255.255.224)
-------------------------------------------------
adresa siete: 10011110 11000101 00011111 10100000 (158.197.31.160)

   IP adresa: 10011110 11000101 00011111 10011011 (158.197.31.155)
       maska: 11111111 11111111 11111111 11100000 (255.255.255.224)
-------------------------------------------------
adresa siete: 10011110 11000101 00011111 10000000 (158.197.31.128)

Ako vidíme, stanice s IP adresami 158.197.31.170/27 a 158.197.31.155/27 majú iné adresy siete, a teda nemôžu byť v jednej sieti a musia komunikovať prostredníctvom routra. Ak by sme ich predsa len zapojili do jednej siete, nevedeli by sa na sieťovej vrstve „porozprávať“. Adresa siete je špeciálna adresa, ktorá nemôže byť pridelená žiadnemu rozhraniu.

Okrem adresy siete nemôže byť žiadnemu rozhraniu pridelená ani broadcastová (obežníková) adresa siete. Tá sa vypočíta ako logický OR medzi IP adresou a invertovanou maskou siete. Invertovaná maska má vymenené všetky bity masky za opačné.

          IP adresa: 10011110 11000101 00011111 10101010 (158.197.31.170)
 invertovaná  maska: 00000000 00000000 00000000 00011111
--------------------------------------------------------
broadcastová adresa: 10011110 11000101 00011111 10111111 (158.197.31.191)

          IP adresa: 10011110 11000101 00011111 10011011 (158.197.31.155)
 invertovaná  maska: 00000000 00000000 00000000 00011111
--------------------------------------------------------
broadcastová adresa: 10011110 11000101 00011111 10011111 (158.197.31.159)

Broadcastová adresa sa používa, ak chceme, aby odoslaný datagram bol prijatý a spracovaný všetkými rozhraniami v danej sieti. Môžete si všimnúť, že adresa siete tvorí dolnú hranicu rozsahu adries siete a broadcastová adresa tvorí hornú hranicu adries siete. Všetky adresy medzi adresou siete a broadcastovou adresou môžu byť pridelené rozhraniam zariadení v sieti. Napríklad v sieti s adresou siete 158.197.31.160/27 môžu byť rozhraniam pridelené IP adresy 158.197.31.161 až 158.197.31.190, teda celkovo 30 IP adries.

Delenie siete na podsiete

Predstavte si, že ste sieťoví administrátori v novej firme, ktorá dostala od providera k dispozícii sieť 158.197.28.0/22. Môžete teda prideľovať počítačom v sieti IP adresy z rozsahu 158.197.28.1 až 158.197.31.254, čo je dokopy 1022 adries. Je však požiadavka, aby kvôli bezpečnosti boli finančné a manažérske oddelenie v samostatnej podsieti a rovnako aj verejne prístupné servery v svojej samostatnej podsieti. Zvyšok organizácie môže byť v tretej podsieti.

Povedzme si najprv, ako by sme urobili dve podsiete. Máme k dispozícii sieť 158.197.28.0/22. Ak zvýšime počet jednotiek v maske o 1 dostaneme dve podsiete 158.197.28.0/23 s rozsahom možných IP adries počítačov 158.197.28.1 až 158.197.29.254 a sieť 158.197.30.0/23 s rozsahom možných IP adries počítačov 158.197.30.1 až 158.197.31.254.

Ak by sme zvýšili počet jednotiek v maske až o 2, dostali by sme 4 podsiete 158.197.28.0/24, 158.197.29.0/24, 158.197.30.0/24 a 158.197.31.0/24.

Nám však treba vytvoriť tri siete. Keďže môžeme predpokladať, že najväčší počet počítačov nebude na finančnej ani verejnej sieti, ale práve v zvyšku podniku, môžeme vytvoriť nasledovné 3 siete:

  • 158.197.28.0/24 pre finančné oddelenie a management s maximálnym počtom počítačov 254 s IP adresami 158.197.28.1 až 158.197.28.254.
  • 158.197.29.0/24 pre verejné servery s maximálnym počtom počítačov 254 s IP adresami 158.197.29.1 až 158.197.29.254.
  • 158.197.30.0/23 pre zvyšok podniku s maximálnym počtom počítačov 510 s IP adresami 158.197.30.1 až 158.197.31.254.

Poznámka: Ak máte zmätok v tom, že ako bolo delenie siete prevádzané, vypíšte si binárne reprezentácie IP adries a spočítajte si sieťové adresy. Pri výpočte maximálneho počtu počítačov nezabudnite na to, že v každej sieti sú dve špeciálne IP adresy, ktoré sa nemôžu prideliť počítačom a to adresa siete a broadcastová adresa.

Špeciálne IP adresy

Najvyššou autoritou na prideľovanie IP adries je organizácia IANA. Ako si môžete prečítať v jej zozname pridelených IP adries, už neexistuje žiaden nepridelený rozsah IPv4 adries, ktorý by nebol určený na špeciálne využitie. Všetky rozsahy určené pre verejné IP adresy koncových zariadení boli pridelené regionálnym organizáciám, ktoré rozdeľujú IP adresy v rámci „kontinentov“. V našej oblasti je to organizácia RIPE NCC.

Medzi adresami je zopár špeciálnych adries sietí, ktoré nesmú byť použité na internete na adresáciu konkrétnych zariadení alebo sietí. Uvedieme si tie najznámejšie a v praxi najpoužívanejšie.

  • 0.0.0.0/32 je možné použiť ako zdrojovú adresu stanice lokálnej siete (nie cieľovú adresu). Toto sa používa pri úvodnom pripojení, keď stanica ešte nevie svoju IP adresu a žiada DHCP server, aby jej nejakú pridelil. Tiež sa používa v smerovacích tabuľkách (viď nižšie).
  • 255.255.255.255 je broadcastová (obežníková) adresa pre lokálnu sieť. Tá sa používa ako cieľová adresa pre všetky rozhrania v lokálnej sieti.
  • 127.0.0.0/8 je loopback, alebo slučka, ktorá určuje „sieť“ vlastného zariadenia – samého seba. V praxi sa používa z tohto rozsahu iba IP adresa 127.0.0.1, označovaná ako localhost alebo aj „moja IP adresa“. Datagramy s cieľovou adresou z rozsahu siete 127.0.0.0/8 nikdy neopustia počítač.
  • 10.0.0.0/8172.16.0.0/12 a 192.168.0.0/16 sú adresy sietí, ktoré sa nevyskytujú vo verejnom internete. Sú určené pre privátne siete. Sú používané hlavne v sieťach s NAT routrom, alebo vo VPN sieťach.