www.SAMURAJ-cz.com 

14.12.2017 Lýdie Translate to English by Google     VÍTEJTE V MÉM SVĚTĚ

Články

Adresování v IP sítích

Středa, 21.07.2010 12:39 | Samuraj - Petr Bouška |
Počítačové sítě jsou dnes nejčastěji založeny na rodině protokolů TCP/IP. Z pohledu fyzického i logického nepoužíváme jednu globální síť, ale hierarchické dělení na různé části zvané subnety (podsítě). Aby spolu jednotlivé subnety mohli komunikovat, tak musíme zajistit správné fyzické propojení, ale také přidělit správné adresní prostory. V článku se spolu podíváme na adresy IPv4 (Internet Protocol Version 4), jak se rozdělují a jak se s nimi počítá.

Tento článek jsem napsal pro časopis Connect a vyšel v posledním čísle Connect 07-08/10, zde jej publikuji s laskavým svolením redakce.
Jedná se o čtvrtý díl seriálu o počítačových sítích. Na tomto webu již existuje obsahově shodný (a rozsáhlejší) seriál Počítačové sítě - Computer networks, ale tento článek jsem napsal s určitým časovým odstupem a z trochu jiného pohledu.
Bohužel další díly již následovat nebudou, protože časopis Connect byl zrušen. Je to škoda, protože se podle mne jednalo o jediný český časopis na docela technické úrovni (oproti hrůzám jako je Chip a další). Ale vydavatelství CPress Media koupila Mladá Fronta a rozhodla se řadu časopisů, mezi nimi Connect, zrušit.

Adresy a jejich výpočty v počítačových sítích založených na TCP/IP

Celou řadu termínů z oblasti počítačových sítí jsme probrali v minulých dílech. Nyní si některé termíny zopakujeme a přidáme několik nových, které jsou důležité pro výpočty adres v IP sítích. Zásadním termínem je IP adresa a maska podsítě. V celém článku budeme hovořit o čtvrté verzi IP protokolu, tedy IPv4.

IP adresa a subnet

IP adresa je logická adresa zařízení v počítačové síti (na 3. vrstvě podle OSI modelu), která používá IP protokol. V IP v4 je tato adresa velká 32bitů (4 byte) a zapisuje se pomocí dot-decimal notation. To znamená pomocí čtyř dekadických hodnot (každá velká jeden byte), označovaných jako oktet, oddělených tečkou. Příkladem IP adresy je 193.222.5.15. IP protokol je zde již delší dobu a stále probíhá jeho vývoj, my se budeme bavit o modifikacích, které jsou běžné v dnešních sítích. Veškerý popis se nachází v RFC dokumentech.

IP adresa může nabývat hodnot 0.0.0.0255.255.255.255 (teoreticky, ne všechny adresy je možno v praxi použít), což je adresní rozsah IP sítí a internetu. Sice se zápis adresy provádí standardně v desítkové soustavě, ale vše je optimalizováno pro zpracování počítačem, který používá binární soustavu. Takže pro výpočty adres jsou třeba základy počítání v dvojkové soustavě.

V minulých dílech jsme si vysvětlili základní způsoby komunikace, takže víme, že tento rozsah musíme rozdělit na menší části. Těmto částem říkáme subnety (česky podsítě) někdy i sítě. Síťová zařízení uvnitř subnetu sdílí společný prefix IP adresy.

Maska sítě

IP adresa se skládá z několika částí. V základu jde o dvě části, prefix identifikující síť a adresa uzlu v rámci podsítě. U původních classful sítí byl prefix pevně dán třídou, do které adresa patřila. U dnešních classless sítí můžeme prefix určit z masky podsítě. Nebo adresu rozdělit na tři části, adresu sítě, adresu podsítě a adresu uzlu. Kde adresa sítě je dána třídou IP adresy a adresa podsítě je rozdíl masky a třídy.

classful   <network-prefix><-------host-number-------->
classless  <network-number><subnet-number><host-number>
classless  <-------network-prefix--------><host-number>

Pro to, abychom určily, která část IP adresy je pro podsíť a která pro uzel, se používá maska podsítě (subnet mask). Ta v binárním tvaru obsahuje jedničky následované nulami a pomocí jedniček „vymaskovává“ část síťového prefixu v IP adrese. Jinak řečeno, tam kde jsou v masce jedničky je v IP adrese část podsítě a kde jsou nuly je část uzlu. Síťová část IP adresy určuje podsíť a používá se ke směrování. Část uzlu identifikuje stanici uvnitř daného subnetu.

Maska se v IPv4 zapisuje stejně jako IP adresa pomocí dot-decimal form s tím, že jsou validní pouze adresy, které v binárním zápisu mají zleva jedničky následované nulami (za první nulou smí být pouze nuly). Příkladem síťové masky je 255.255.255.0. Maska 255.255.255.254 není platná, protože uvnitř takového subnetu by se nacházelo 0 uzlů. Maska 255.255.255.255 není maskou podsítě, ale určuje jeden uzel.

Když se bavíme o masce sítě, tak ještě musíme zmínit občas používaný speciální zápis, který se označuje jako inverse mask nebo wildcard mask. Jedná se o obrácenou masku, jednoduše řečeno tam, kde jsou v tradiční masce jedničky jsou nuly a naopak. Pro výpočet v dekadické formě můžeme použít pro každý oktet hodnota = 255 – hodnota oktetu. Například pro masku 255.255.255.240 je inversní maska 0.0.0.15.

Veřejné a privátní adresy

Prvotní princip IP sítí byl takový, že IP adresa musela být unikátní v rámci celé sítě a jednotlivé uzly (stanice, servery a další zařízení s přiřazenou IP adresou) spolu mohli komunikovat. S rozvojem internetu se ukázalo, že počet adres, které je možno v IPv4 vytvořit, rozhodně není dostatečný. Začaly se tedy používat různé metody, jak se  s nedostatkem adres vypořádat. Nejrazantnější je nová verze IP protokolu IPv6, která obsahuje mnohem více adres, ale její nasazování není jednoduché. Dále se objevila technika CIDR a také se IP adresy rozdělili na dva typy, na veřejné a neveřejné IP adresy.

Veřejné IP adresy (public address) tvoří hlavní část adresního rozsahu internetu a tyto adresy jsou routovatelné v rámci celého internetu. Jednoduše řečeno počítač s veřejnou adresou může být dostupný z celého internetu. Tyto adresy musí být unikátní v celé síti (internetu).

Oproti tomu privátní IP adresy (private adress) by se měli používat pouze v rámci LAN sítí a v internetu by přes ISP neměli komunikovat. Firma pak používá jednu (nebo více) veřejnou adresu a pomocí techniky NAT (Network Address Translation) se při komunikaci mimo LAN překládají privátní adresy na tuto veřejnou. Stejné privátní adresy se tak mohou nacházet na mnoha místech v internetu, ale nemohou spolu přímo komunikovat. Následující tabulka ukazuje jednotlivé privátní rozsahy.

síť adresa sítě broadcast adresa adresy uzlů
10.0.0.0/8 10.0.0.0 10.255.255.255 10.0.0.1 - 10.255.255.254
192.168.0.0/16 192.168.0.0 192.168.255.255 192.168.0.1 - 192.168.255.254
172.16.0.0/12 172.16.0.0 172.31.255.255 172.16.0.1 - 172.31.255.254

Některé adresy z veřejných i privátních mají od začátku plánovaný speciální význam. Z těch důležitějších se jedná o rozsah 127.0.0.0/8, což jsou localhost loopback adresy či 169.254.0.0/16, to jsou adresy pro autokonfiguraci (APIPA).

Síťové třídy

Metoda, s kterou se již v dnešní praxi nesetkáme, ale jejíž označení se stále používá, je rozdělování sítí do tříd. V minulosti se adresní prostor rozdělil do pěti tříd (hlavní jsou třída A, B a C), v každé třídě existovalo určité množství podsítí. Třída byla určena prvními čtyřmi bity adresy a ke každé třídě byla napevno přiřazena maska podsítě. Masky navíc mohly mít v daném oktetu pouze jedničky nebo nuly. Protože byly masky pevně dány a daly se podle adresy rozeznat, tak se ani neuváděly (což byl později problém u routování). Pokud používáme síťové třídy, tak mluvíme o classful network. Následující tabulka zobrazuje základní parametry jednotlivých tříd.

třída určující bity rozsah adres maska CIDR maska poznámka
class A 0xxx 0 - 127.x.x.x 255.0.0.0 /8 hlavní
class B 10xx 128 - 191.x.x.x 255.255.0.0 /16 hlavní
class C 110x 192 - 223.x.x.x 255.255.255.0 /24 hlavní
class D 1110 224 - 239.x.x.x multicast
class E 1111 240 - 255.x.x.x   rezervováno

Později se ukázalo, že toto pevné rozdělení sítí je neefektivní a velice plýtvá adresami, které začaly ubývat. Tak vznikl síťový design označovaný jako classless. Ten využívá Variable Length Subnet Mask (VLSM), které povoluje proměnnou délku síťové masky. Na VLSM je založen Classless Inter-Domain Routing (CIDR), který dovoluje libovolně dlouhou masku a používá zkrácený zápis pomocí počtu jedničkových bitů v masce (délka masky). CIDR zápis adresy vypadá například 10.5.0.2/28, tomu odpovídá tradiční maska 255.255.255.240, kterou zapíšeme binárně 11111111.11111111.11111111.11110000.

CIDR také obsahuje mechanismus agregace, který dovoluje spojit několik spojitých síťových rozsahů do jednoho supernetu. Použití agregace šetří místo a prostředky při routování. Použitím agregace můžeme spojit subnety 192.168.0.0/24 a 192.168.1.0/24 do 192.168.0.0/23.

Adresy v subnetu

Každá podsíť obsahuje tři typy adres. První adresa z rozsahu se nesmí přiřadit žádnému uzlu. Tato adresa slouží k identifikaci subnetu o označuje se jako network ID nebo adresa sítě či základní adresa. Tato adresa obsahuje pouze nuly v části adresy uzlu. Dále následují standardní adresy uzlů, které můžeme přiřazovat síťovým zařízením. Poslední adresa subnetu se opět nemůže použít pro uzel, jedná se o tzv. broadcast address. Tato adresa se využívá pro subnet directed broadcast, tedy zprávu, kterou chceme zaslat všem stanicím v subnetu. Tato adresa má pouze jedničky v části adres uzlu.

V následující tabulce jsou zobrazeny všechny adresy pro síť 192.168.5.12/30. Masku /30 můžeme zapsat binárně 11111111.11111111.11111111.11111100, takže IP adresa se může měnit pouze v posledních dvou bitech.

IP adresa binárně typ
192.168.5.12 11000000.10101000.00000101.00001100 network ID
192.168.5.13 11000000.10101000.00000101.00001101 uzel
192.168.5.14 11000000.10101000.00000101.00001110 uzel
192.168.5.15 11000000.10101000.00000101.00001111 broadcast

Výpočet maximálního počtu uzlů a podsítí

Maximální počet uzlů a subnetů v určité síti je určen pomocí masky podsítě. Určení, která část IP adresy je částí sítě a která částí hostů, je jednoduché. Když si IP adresu i masku zapíšeme binárně pod sebe, tak tam, kde jsou v masce jedničky, je část síťová a kde nuly část adresy uzlu v rámci subnetu. Jednoduché je to u nejběžnějších masek, kdy v oktetu jsou buď jen jedničky, tedy hodnota 255, nebo nuly.

IP adresa 10.240.5.8 00001010.11110000.00000101.00001000
maska 255.255.255.0 11111111.11111111.11111111.00000000

Když máme masku v CIDR zápisu, tak rovnou víme počet jedniček a počet nul můžeme dopočítat 32 – CIDR hodnota. Síťová část je dána jedničkami v masce sítě, pokud v této části IP adresy změníme nějakou hodnotu, dostaneme jiný subnet. Takže počet kombinací v této části adresy se rovná maximálnímu počtu subnetů. Počet kombinací spočítáme jako 2počet jedniček.

Ve starších dobách se nesměli používat subnety, které měli v adrese samé jedničky nebo nuly (to určovalo staré RFC 950), takže podle této normy by počet subnetů byl 2počet jedniček - 2. Již dlouho ale platí novější RFC 1812, kde můžeme využít všechny adresy. Celkový počet subnetů také záleží na tom, jestli přihlížíme k síťovým třídám, potom počítám počet subnetů v dané síťové třídě, tedy 2počet jedniček v masce – počet jedniček ve třídě.

Maximální počet adres pro uzly spočítáme obdobně pomocí vzorce 2počet nul – 2. Dvojku odečítáme, protože jako adresu uzlu nemůžeme použít network id a broadcast adresu.

Uvedeme si nyní jednoduchý konkrétní příklad, na kterém snad bude dřívější obecný popis jasně pochopitelný. Máme síťovou adresu zapsanou pomocí CIDR 148.25.3.5/22. Takže počet jedniček v masce je 22 a počet nul je 32 - 22 = 10. Pokud budeme uvažovat třídy, tak tato adresa spadá do třídy B (podle prvních dvou bitů IP adresy, první oktet je binárně 10010100) a její maska je /16.  Počet subnetů v rámci třídy B s maskou /22 je 222-16 = 26 = 64. Pokud bychom brali veškeré subnety, tak je to 222 = 4 194 304. Počet hostů, který může být v každém subnetu s touto maskou sítě, je 210 – 2 = 1024 – 2 = 1022.

Jsou dvě adresy ze stejného subnetu?

Občas potřebujeme určit, zda se dvě adresy (které známe včetně masky) nachází ve stejném subnetu (podle toho pak probíhá komunikace apod.). Pokud máme jednoduchou masku, tak to poznáme na první pohled, ale u některých složitějších musíme použít základní  matematiku. Stačí porovnat síťové části adres a pokud jsou stejné, patří adresy do stejné podsítě. Nejjednodušší je převést všechny adresy do binární formy a vše je hned patrné. Důležitým předpokladem je, aby masky podsítí byly shodné.

Příklad si ukážeme na adresách 192.168.5.13/22 a 192.168.7.128/22, hned vidíme, že masky jsou stejné.

dekadicky binárně
192.168.5.13 11000000.10101000.00000101.00001101
192.168.7.128 11000000.10101000.00000111.10000000
255.255.252.0 11111111.11111111.11111100.00000000

Ze zápisu vidíme části IP adres určených jedničkami v masce a jednoduše porovnáme, že jsou obě stejné, tudíž patří obě adresy do stejné sítě.

Nalezení Network ID

Nalezení první adresy podsítě se může zdát jednoduché, ale někdy to na první pohled vidět není. Pak musíme použít logiku nebo matematiku. Network ID se dá vypočítat z binárního zápisu adresy a masky, kdy se provede bitové AND, networ-ID = IP-adresa AND subnet-mask.

Příklad pro adresu 10.217.123.7/20

IP binárně 00001010.11011001.01111011.00000111
maska binárně 11111111.11111111.11110000.00000000
operace AND 00001010.11011001.01110000.00000000
dekadicky 10.217.112.0

Místo matematiky můžeme použít i logické uvažování. Maska /20 znamená, že dochází ke změně ve 3 oktetu, takže první 2 oktety zůstávají zachovány a poslední je nulový. Ve 3. oktetu máme čtyři jedničky a čtyři nuly, takže adresy podsítí jdou po 16ti (24). To znamená 0 až 15, 16 až 31, atd., pro hodnotu 123 je nejbližší nižší hodnota 112.

Nalezení broadcast adresy

Broadcastovou adresu subnetu nalezneme podobně jako network ID. Matematicky můžeme použít bitové OR mezi IP adresou a negovanou maskou, tedy broadcast-adresa = IP-adresa OR NOT(subnet-mask). Příklad pro stejnou adresu jako minule 10.217.123.7/20.

IP binárně 00001010.11011001.01111011.00000111
maska binárně 11111111.11111111.11110000.00000000
negace masky 00000000.00000000.00001111.11111111
operace OR 00001010.11011001.01111111.11111111
dekadicky 10.217.127.255

Jiná možnost výpočtu je, když známe network ID, pak stačí do části uzlů v binárním tvaru zadat samé jedničky.

Jiné výpočty

Otázky na to, co chceme spočítat mohou být různé, ale vše vychází z předchozích úvah. Například chceme najít masku podsítě, aby se v ní nacházel zadaný počet adres. Převedeme počet adres na binární hodnotu, z toho dostaneme jak dlouhá je část uzlů a doplněk je maska podsítě. Tedy například subnet pro 4000 klientů, binárně 1111.10100000, to je délka 12, maska je dlouhá 32 – 12 = 20. Subnet /20 může obsahovat až 4094 adres uzlů.

Jiný příklad může být, když chceme rozdělit síť na určitý počet stejných subnetů. Vezmeme hodnotu počtu subnetů, odečteme 1 (protože nabývá hodnot 0 až n-1), převedeme na binární hodnotu, ta musí obsahovat samé jedničky, jinak není možno dosáhnout tohoto počtu subnetů. Pokud počítáme v rámci nějaké třídy, tak připočteme masku třídy a máme cílovou masku jednoho subnetu, kterých může vzniknout zadaný počet.

Například síť 192.168.100.0/24 v rámci třídy C rozdělit na 8 stejných podsítí. 8 – 1 = 7 binárně 111, v rámci třídy C máme masku 24 + 3 = 27, takže možné subnety jsou 192.168.100.0/27, 192.168.100.32/27, 192.168.100.64/27, 192.168.100.96/27, 192.168.100.128/27, 192.168.100.160/27, 192.168.100.192/27, 192.168.100.224/27.

Kalkulačky
Pro výpočty různých hodnot okolo adresování se používají kalkulačky IP podsítí (IP subnet calculator). Takových aplikací nalezneme celou řadu a velká část jich je online na internetu. Příkladem je subnet-calculator.samuraj-cz.com.

zobrazeno: 47299krát | Komentáře [13]

Autor:

Související články:

Základy počítačových sítí

Tento seriál jsem napsal pro časopis Connect. Většinu informací obsahuje shodně jako můj starší seriál Počítačové sítě - Computer networks, ale je napsán trochu jiným způsobem. Nejprve jsou stručně shrnuty technologie počítačových sítí a pak se trochu podrobněji probírají od nejnižších vrstev nahoru.

Pokud se Vám článek líbil, tak mne potěšíte, když uložíte odkaz na některý server:

Pokud se chcete vyjádřit k tomuto článku, využijte komentáře níže. Pokud chcete poradit s nějakým problémem či diskutovat na nějaké téma, tak použijte fórum.

Komentáře

  1. [1] Anonymus

    Super článek!! moc díky za osvětlení této problematiky;-)

    Čtvrtek, 22.07.2010 15:09 | odpovědět
  2. [2] pk

    IP kalkulacka, ktera nepotrebuje (krome stazeni) pristup na internet: http://www.slunecnice.cz/sw/ipv4-calculator/

    Pondělí, 06.09.2010 11:37 | odpovědět
  3. [3] Juris

    super článek:-)

    Úterý, 26.10.2010 22:50 | odpovědět
  4. [4] Radek

    Nádhera, krásně vysvětleno !!!;-)

    Středa, 03.11.2010 09:00 | odpovědět
  5. [5] prochy

    pěkný článek

    Pondělí, 03.01.2011 20:13 | odpovědět
  6. [6] Ondro

    Zdravim, vo vete "Počet subnetů v rámci třídy B s maskou /22 je 22^2-16 = 26 = 64." by asi bolo dobre v tom vypocte upravit trochu tie horne indexy/mocniny. Inac pekny clanok, dakujem zan :).

    Sobota, 22.01.2011 22:53 | odpovědět
  7. [7] Samuraj

    odpověď na [6]Ondro: Díky, když jsem to převáděl do HTML, tak jsem to přehlédl. Je vidět, že to někdo opravdu čte :-).

    Neděle, 23.01.2011 11:44 | odpovědět
  8. [8] Tony

    Výborné články!!!;-)

    Neděle, 06.03.2011 17:25 | odpovědět
  9. [9] Karel

    "Použitím agregace můžeme spojit subnety 192.168.0.0/24 a 192.168.1.0/24 do 192.168.0.0/23."

    Bylo by možné uvést princip této agregace? Všechno jsem v článku pochopil, ale tohle spojování mi hlava nebere.

    Středa, 22.08.2012 01:25 | odpovědět
  10. [10] snowman

    odpověď na [9]Karel: "sumarizace" sítě má 2 možnosti buď větší síť např /16 rozjibi na 2 menší kdy každá z menších bude /17 (kdy /17 mohu zase rozdělit na dvě menší která každá bude /18) nebo opačně mám například 2 sítě s /24 a spojím je pod jednu větší síť /23. V konkrétně tomto případě pak pod /23 nebo 255.255.254.0 schovám síť která začíná na 192.168.0.0 a končí 192.168.1.255. stejně pod /22 schován sít začínající ..0.0 a končící 3.255. Na internetu lze další příklady hledat pod pojmy jako subnetting nebo suppernetting

    Čtvrtek, 30.08.2012 16:48 | odpovědět
  11. [11] D

    "Maska 255.255.255.254 není platná, protože uvnitř takového subnetu by se nacházelo 0 uzlů"

    tohle uz taky neni uplne pravda, protoze maska 255.255.255.254 neboli /31 se pouziva na point to point spoje. Tam staci s prehledem 2 adresy, takze vse ostatni by bylo plytvanim ;-)

    Čtvrtek, 22.11.2012 20:15 | odpovědět
  12. [12] ...

    \"Subnet /20 může obsahovat až 4096 adres uzlů.\"

    Ak tomu správne rozumiem, tak len 4096 - 2 uzlov.

    Neděle, 08.06.2014 20:36 | odpovědět
  13. [13] Samuraj

    odpověď na [12]...: Máte pravdu, 4096 je počet všech adres, 4094 je použitelný počet uzlů.

    Čtvrtek, 12.06.2014 12:40 | odpovědět
Přidat komentář

Vložit tag: strong em link

Vložit smajlík: :-) ;-) :-( :-O


Ochrana proti SPAMu, zdejte následující čtyři znaky image code

Nápověda:
  • maximální délka komentáře je 2000 znaků
  • HTML tagy nejsou povoleny (budou odstraněny), použít se mohou pouze speciální tagy (jsou uvedeny nad vstupním polem)
  • nový řádek (ENTER) ukončí odstavec a začne nový
  • pokud odpovídáte na jiný komentář, vložte na začátek odstavce (řádku) číslo komentáře v hranatých závorkách