TCP/IP - adresy, masky, subnety

Z Wiki Pavel
Verze z 11. 1. 2015, 15:31, kterou vytvořil Klapac (diskuse | příspěvky)
(rozdíl) ← Starší verze | zobrazit aktuální verzi (rozdíl) | Novější verze → (rozdíl)
Skočit na navigaci Skočit na vyhledávání

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.


pozice
7
6
5
4
3
2
1
0
 
výpočet
27 26 25 24 23 22 21 20  
hodnota
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:


binárně
dekadicky
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.


dekadicky
255 . 255 . 240 . 0  
binárně
11111111 11111111 11110000 00000000  
počet jedniček
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.


třída
určující bity
rozsah adres
maska
CIDR maska
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.


síť
adresa sítě
broadcast adresa
adresy hostů
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čů.


síť
adresa sítě
broadcast adresa
jméno
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.0
adresa sítě
192.168.0.1 adresa hosta
... adresy hostů
192.168.0.14 adresa hosta
192.168.0.15
broadcast adresa

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


maska binárně
11111111 11111111 11110000 00000000
maska dekadicky
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


dekadicky
10 217 123 7
binárně
00001010 11011001 01111011 00000111

Maska podsítě


dekadicky
255 255 240 0
binárně
11111111 11111111 11110000 00000000

Provedeme bitový AND a dostaneme adresu sítě


binárně
00001010 11011001 01110000 00000000
dekadicky
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


dekadicky
10 217 123 7
binárně
00001010 11011001 01111011 00000111

Invertovaná (bitová negace) maska


binárně
00000000 00000000 00001111 11111111
dekadicky
0 0 15 255

Provedeme bitové OR a máme broadcast adresu subnetu


binárně
00001010 11011001 01111111 11111111
dekadicky
10 217 127 255