TCP/IP - adresy, masky, subnety
TCP/IP - adresy, masky, subnety a výpočty
Upraveno 11.08.2008 10:00 | vytvořeno 05.09.2007 14:53 | Samuraj - Petr Bouška | sítě
Sedmá část seriálu o počítačových sítích je již více zajímavá a přináší praktické informace. Na začátku je popis základních termínů pro sítě a podsítě, IP adresy a masky. Dále se probírají různé síťové třídy a způsoby zápisu subnetů. Druhá část se věnuje praktickým výpočtům síťových rozsahů, masek sítí, počtu hostů a subnetů.
Pro vyzkoušení výpočtů a informací popsaných v tomto článku můžete zkusit moji webovou aplikaci Online IP Subnet Calculator (v AJ), která pro zadanou IP adresu a masku vypočítá a nalezne řadu různých informací. Také se na této adrese nachází obdoba tohoto článku v anglickém jazyce, kterou jsem ale napsal po delší době, takže některé věci popisuje trochu jinak (doporučuji k nahlédnutí).
Pokud potřebujete zjistit vaši veřejnou IP adresu, přes kterou jste připojeni do internetu, tak můžete využít jednoduchou webovou stránku What is my public IP address? (v AJ).
Článek byl doplněn 11.8. 2008.
Co je network a subnet (síť a podsíť)
Počítačová síť - computer network
Počítačová síť vznikne ve chvíli, kdy dva (někdy se říká minimálně tři) nebo více počítačů propojíme dohromady pomocí telekomunikačního systému za účelem sdílení zdrojů. V praxi je dnes nejrozšířenější síť založena na technologii ethernetu a používá protokol TCP/IP. Reprezentantem jedné velké sítě je internet. Sítě se dále dělí podle řady parametrů na LAN, WAN, WLAN, MAN apod., ale pro tento popis to není důležité.
Podsíť - subnet
V praxi není možné komunikovat v celé síti (například internetu) přímo (z řady důvodů fyzických i logických). Proto se síť dělí na podsítě - subnets - subnetworks. Subnety slouží k logickému dělení sítě do menších hierarchických částí. Příkladem je, že velký ISP má určitý síťový rozsah (subnet), ten dělí na části, které přiděluje firmám a ve firmě se ještě dělí na menší části. Ke spojování jednotlivých subnetů slouží routery. Dělení sítě na subnety je důležité nejen proto, že naši síť "fyzicky" oddělíme od jiných sítí, ale také z výkonových důvodů. Řada informací se v rámci lokální sítě (subnetu) šíří pomocí broadcastů, tedy vysílání všem zařízením, což je značná režie pro síť i zařízení. Proto se využívají například VLANy.
Pozn.: V praxi se často používá pojem síť - net - network, i když mluvíme o subnetu. Vychází to z termínu LAN - lokální síť, který označuje síť pokrývající malou geografickou oblast, jako třeba budovu, kancelář, apod. LAN je většinou podmnožinou větší sítě a zkráceně se používá pouze pojem síť.
IP adresa - IP address
IP adresa je logická adresa zařízení v síti IP. Skládá se ze 4 částí zvaných octety, každá část je veliká 8 bitů, a zapisuje se oddělená tečkou. Adresa se většinou zapisuje v dekadické formě, ale pro výpočet je jasnější binární zápis. Teoreticky je tedy adresní rozsah od 0.0.0.0 do 255.255.255.255. Příkladem IP adresy je třeba 68.12.5.10.
Pro práci s adresami je třeba znát základy binární matematiky. Binární soustava má základ 2 a zapisuje se pomocí 0 a 1. Hodnota jedničky v dekadické soustavě je podle pozice (váhy), kde se nachází. Pro převod binárního čísla na dekadické, převedeme jedničky na desítkové hodnoty a tyto sečteme. Osmi bitová binární číslice může nabývat dekadických hodnot od 0 do 255, tedy celkem 256 hodnot.
27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | ||
128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 | součet je 255 |
Broadcast IP adresa je adresa, na kterou se posílá komunikace v případě brodcastového vysílání. Jedná se o adresu, která má binárně samé jedničky, je to tedy IP adresa 255.255.255.255. Tato adresa určuje všechny klienty v síti.
Maska podsítě - Subnet mask
Subnet mask nám pomáhá určit rozdělení sítě na podsítě. Určuje, která část IP adresy je síťová, a která pro hosty. Zápis je stejný jako u IP adresy, ale platné hodnoty jsou pouze ty, které mají v binárním tvaru zleva jedničky a zprava nuly (pokud se zleva na některé pozici objeví nula, dále již musí následovat pouze nuly). Jedničky v masce jsou tzv. network ID a je to část, která je pro daný subnet stále stejná. Nuly jsou tzv. host ID a tedy část, která je proměnná a určuje adresu hosta v daném subnetu. Příkladem jednoduché masky je 255.255.255.0, ta určuje, že prvních 24 bitů adresy je network ID a posledních 8 bitů je hostovská část.
Možné hodnoty jednotlivých octetů pro masku:
00000000 | 0 |
10000000 | 128 |
11000000 | 192 |
11100000 | 224 |
11110000 | 240 |
11111000 | 248 |
11111100 | 252 |
11111110 | 254 |
11111111 | 255 |
Pozn.: Poslední octet nemůže nabývat hodnoty 254, zde totiž neexistuje ani jeden host (viz. dále). Pokud má hodnotu 255, znamená to, že se jedná o unicast, tedy jedinou adresu.
Zkrácený zápis masky - Classless Inter-Domain Routing (CIDR) notace
Subnet mask se může zapisovat také ve zkrácené formě, které se říká CIDR notace. Ta se zapisuje jako IP adresa následovaná lomítkem (/) a číslem, které reprezentuje počet jedničkových bitů v masce podsítě v binární formě. Protože celkový počet bitů v masce je 32, tak počet nul je 32 - počet jedniček. Příklad CIDR notace je 10.0.5.2/20 a tedy maska je 255.255.240.0.
255 . | 255 . | 240 . | 0 | ||
11111111 | 11111111 | 11110000 | 00000000 | ||
8 | 8 | 4 | 0 | = 20 |
Wildcard-Mask
Wildcard mask nebo také inversní maska je speciální zápis síťové masky, který používá například Cisco u Access listů. Jedná se o opak ke klasické masce, počítají se zde nuly místo jedniček. Takže například ke klasické masce 255.255.255.240 je inverzní maska 0.0.0.15. Inverzní masku dostaneme tak, že normální masku zobrazíme binárně, provedeme inverzi a převedeme na dekadickou hodnotu. Nebo jednodušeji stačí, u každého octetu spočítat 255 - hodnota. Tedy v našem příkladě 255-255=0, 255-240=15.
Supernet
Občas se také používá termín supernet, který označuje skupinu několika sdružených po sobě jdoucích subnetů. Jedná se vlastně o technologii CIDR a používá se například pro agregaci routovacích záznamů.
Příklad: Máme dva subnety 192.168.0.0/24 a 192.168.1.0/24, z nich můžeme vytvořit jeden supernet 192.168.0.0/23.
Síťové třídy - classes
Classful network - adresování s třídami
Když vznikl protokol IPv4, byla představa, že adresní prostor je ohromný a nikdy se nemůže vyčerpat. Tento adresní prostor byl rozdělen do základních pěti tříd, kdy se zařazení do patřičné třídy určovalo podle prvních bitů adresy. Při komunikace se nepoužívaly masky podsítě, protože ty byly napevno dány adresou.
class A | 0 | 0 - 127.x.x.x | 255.0.0.0 | /8 |
class B | 10 | 128 - 191.x.x.x | 255.255.0.0 | /16 |
class C | 110 | 192 - 223.x.x.x | 255.255.255.0 | /24 |
class D | 1110 | 224 - 239.x.x.x | 255.255.255.255 | /32 |
class E | 1111 | 240 - 255.x.x.x | rezervováno |
Pozn.: Třída D je určena pro multicastové adresy.
Classless network - adresy bez tříd
Od classful network se již před dlouhou dobou ustoupilo a začalo se používat adresování CIDR, které je více flexibilní při dělení sítě na podsítě. V komunikaci používáme vždy IP adresu spolu s maskou. I když se opustili classful network, tak se v praxi běžně setkáme s označováním subnetů jako třída C apod., myslí se tím však typ masky.
U Cisco switchů a routerů se používá příkaz pro použití classless network, který je defaultně zapnutý
Switch#ip classless
CIDR používá Variable Length Subnet Masking (VLSM) pro rozdělování IP adres na subnety. Délká masky nemusí být stejná, aby se dosáhlo lepšího využití IP rozsahu. Můžeme například použít dohro
mady subnety 10.0.0.0/26 a 10.0.0.64/28.
Neveřejné síťové rozsahy (private subnets)
Některé síťové rozsahy mají speciální vlastnosti, tou hlavní je, že se neroutují, tzn. neprochází do dalšího subnetu. To se využívá u privátních subnetů, které neprochází do internetu. V praxi je využívá většina firem v lokální síti a do internetu přistupují přes veřejnou adresu za pomoci NATu.
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 |
Dalšími speciálními subnety je Localhost Loopback Address, což jsou adresy, které by měli být lokální pro dané zařízení (nepřenáší se nikam do sítě). A Zeroconf Address, kterou používá Microsoft a slouží k automatické konfiguraci sítě pro propojení pár počítačů.
127.0.0.0/8 | 127.0.0.0 | 127.255.255.255 | Localhost Loopback Addresses |
169.254.0.0 /16 | 169.254.0.0 | 169.254.255.255 | Zeroconf Address |
Podsítě - Subnets a výpočty adres
Každý subnet obsahuje základní adresu podsítě (base address nebo network address), což je první adresa rozsahu, dále adresy hostů a jako poslední broadcastovou adresu subnetu (subnet broadcast address), to je poslední adresa rozsahu. Podsíť je identifikována adresou sítě (teoreticky i jakoukoliv adresou hosta) a síťovou maskou, která se často zapisuje v CIDR notaci.
Například podsíť 192.168.0.0/28 vypadá následovně
192.168.0.1 | adresa hosta |
... | adresy hostů |
192.168.0.14 | adresa hosta |
Adresa je v síti lokální, pokud má stejné network ID. Tedy, když chceme určit, jestli dvě adresy patří do stejného subnetu, převedeme všechny hodnoty do binárního tvaru a ta část, kde jsou v masce jedničky, musí být u obou adres shodná.
Subnet broadcast address (broadcast adresa subnetu), poslední adresa subnetu (která se nemůže přiřadit stanici), je IP adresa, která se skládá z network ID a samých jedniček v host ID. Slouží k zaslání cíleného broadcastu na daný subnet.
Výpočet počtu subnetů a hostů
Z masky sítě určíme, kolik můžeme vytvořit subnetů a kolik tyto subnety budou mít hostů. Maska nám vlastně určuje, že ta část, kde má jedničky musí být pro podsíť stejná a ta část, kde jsou nuly, se může měnit (nabývat 0 a 1). Takže hosti mohou mít jako adresu všechna čísla, která můžeme vytvořit z těchto bitů. Těchto adres můžeme vytvořit 1+20+21+22+.+2n-1=2n, kde n je počet bitů. Jednička na začátku je proto, že počítáme i nulovou hodnotu.
Při výpočtu postupujeme následovně. Vezmeme octet masky, v kterém je přechod mezi jedničkami a nulami. Podle počtu jedniček v tomto octetu a celkového počtu nul spočítáme počet podsítí (z jedniček) a počet hostů (z nul).
2počet jedniček = počet subnetů (nově)
Takto je to, alespoň dnes v praxi a podle RFC 1812. V teoretických případech však musíme vycházet ze staršího RFC 950, které nepovolovalo adresy podsítí se samými jedničkami nebo nulami. Proto musíme odečíst 2 podsítě:
2počet jedniček - 2 = počet subnetů (postaru)
U Cisco zařízení se použití nového RFC zapíná pomocí (defaultně zapnuto)
Switch#ip subnet zero
U počtu hostů musíme vždy odečíst první a poslední adresu (base a broadcast address), které se nemohou využít jako adresa pro hosta:
2počet nul - 2 = počet hostů
Příklad:
Máme adresu 10.0.5.2/20
11111111 | 11111111 | 11110000 | 00000000 | |
255 | 255 | 240 | 0 |
Použijeme třetí octet, kde jsou 4 jedničky a 4 nuly (plus 8 nul ve čtvrtém octetu).
Hostů v každém subnetu může být 212 - 2 = 4094.
V rámci třetího octetu můžeme vytvořit 24 = 16 podsítí.
Výpočet základní adresy sítě
Pokud máme adresu hosta a masku podsítě, můžeme jednoduše spočítat základní adresu podsítě. Pokud vezmeme binárně adresu hosta a masku sítě a provedeme bitový součin (AND), dostaneme adresu sítě. Příklad pro 10.217.123.7/20
IP adresa
10 | 217 | 123 | 7 | |
00001010 | 11011001 | 01111011 | 00000111 |
Maska podsítě
255 | 255 | 240 | 0 | |
11111111 | 11111111 | 11110000 | 00000000 |
Provedeme bitový AND a dostaneme adresu sítě
00001010 | 11011001 | 01110000 | 00000000 | |
10 | 217 | 112 | 0 |
Výpočet broadcast adresy subnetu
Broadcast adresu subnetu, v kterém se nachází klient, spočítáme jednoduše. V IP adrese hosta změníme bity v hostovské části na 1. Matematicky řečeno vezmeme IP adresu a provedeme bitový součet (OR) s negovanou (NOT) maskou podsítě. Pro předchozí příklad (síť 10.217.123.7/20), kde prvních 20 bitů je network ID a zbylých 12 je hostovská část, to tedy je:
IP adresa
10 | 217 | 123 | 7 | |
00001010 | 11011001 | 01111011 | 00000111 |
Invertovaná (bitová negace) maska
00000000 | 00000000 | 00001111 | 11111111 | |
0 | 0 | 15 | 255 |
Provedeme bitové OR a máme broadcast adresu subnetu
00001010 | 11011001 | 01111111 | 11111111 | |
10 | 217 | 127 | 255 |