Počítání IP adres s proměnou délkou masky z hlavy (metoda VLSM)

Hned na začátek chci říct, že to tohoto zápisku nechci dělat nic převratného. K napsání jsem se rozhodl poté co jsem několika spolužákům ono počítání vysvětloval.
Takže kdo to umí, tak může říci, že jde o jednoduchou rutinu, ale pro někoho kdo toto počítání umí “pouhým” binárním přepočtem to může být vítaná změna, která práci s IP adresami ulehčí a především urychlí.

Samozřejmě musím zdůraznit, že jsou i k těmto jednoduchým úkonům potřeba jisté základy. Tento příspěvek je určen především lidem začínajícím se sítěmi, kteří již ale mají určité znalosti.
Za základní předpoklady považuji toto:

  • znalost binární soustavy a přepočty mezi ní a desítkovou
  • umět mocniny čísla 2 alespoň do 8192, tj. 2^13
  • znalost tříd IP, jejich rozsahů a rozsahy privátních adres
  • rozumět pojmům bit/Byte/oktet a síťová adresa (dále jen síť/podsíť)/broadcast/maska podsítě

Tyto předpoklady ještě nyní rozvineme.

Takže začneme s rozvíjením předpokladů pro další počítání kdy jako jednu z prvních věcí si uvedeme možné tvary masek. Tyto tvary, především hodnoty “důležitého” oktetu k CIDR formátu, je nutné si zapamatovat včetně informace které masky lze použít u kterých tříd IP. Za onen důležitý oktet se považuje ten, který má hodnotu jinou než 0 a 255, jelikož při těchto hodnotách nepracujeme s metodou VLSM, ale s klasickým třídním pojmenováním. Z toho vyplývá, že při počítání s VLSM mluvíme o beztřídním adresování.

Takže se vrhneme na první příklady.

Máme IP adresu 126.222.100.78 a masku /21.
U adresy chceme znát do které podsítě patří, její broadcastovou nebo-li všesměrovou adresu, rozsahy adres dostupných pro hostitele, velikost bloku podsítě a počet hostitelů na podsíť. Dále zjistíme kolik se do naší IP adresy s touto maskou vejde podsítí a kolik pojmeme celkem hostitelů.

Jako první si zjistíme velikost bloku (=počet IP adres) podsítě. To učiníme primitivním “vzorečkem”.

256 - (hodnota důležitého oktetu) = velikost bloku podsítě

Nyní vidíte potřebu rychlého rozlišení hodnoty důležitého oktetu. Ta vychází z počtu “zapnutých”/jedničkových bitů, které jsou navíc k nejbližší nižší třídní masce.
V našem případě tedy 21-16=5 (kdyby byla maska např /27 bude to 27-24=3). Nyní víme, že máme 5 jedničkových bitů (1111 1000) a pamatujeme si, že je to číslo 248. Pro lepší pamatování doporučuji si pamatovat hlavně hodnotu 240, která má jedničkové 4 bity a zbytek dopočítáme nebo odečteme.
Nyní tedy dosadíme a získáme…

256 - 248 = 8

… velikost bloku neboli počet IP adres na podsíť. Tím jsme pro získání IP adresy podsítě udělali téměř vše. Nyní zbývá napočítat velikost bloku do hodnoty důležitého oktetu v zadané IP adrese, tj. kolikrát se do jeho hodnoty vejde a následně vypnout všechny bity v oktetech napravo.

12*8 = 96

126.222.96.0

Tak jsme získali adresu podsítě a nyní potřebujeme ještě broadcast. K němu se dostaneme tak, že k hodnotě podsítě přičteme velikost bloku a odečteme 1.

96+8-1

126.222.103.255

Toto je broadcast. Nyní z těchto dvou hodnot získáme rozsahy IP adres adresovatelných pro hosty.

126.222.96.1 ~ 122.222.103.254

To je sice hezké, že víme rozsah, ale kdybychom chtěli vědět počet hostů, tak co?
Použijeme další vzoreček.

(2^x - 2) = počet hostů/podsíť

"- 2" kvůli broadcastu a adrese podsítě
x … počet bitů volných pro hostitele
x = 32 - hodnota masky (21)

V našem případě tedy (2^11 - 2) = 2048 - 2 = 2046. To je celkový počet hostitelů, které můžeme s touto adresou a maskou maximálně obsloužit.

Pokud jste si tabulku s maskami pod odkazem výše prohlédli pečlivě, tak jste si všimli poslední masky /30. Tato maska je použitá jako poslední z toho důvodu, že vytvořená síť musí mít min. 2 hosty aby měla smysl. Pokud máme /30 masku, tak máme (2^2 -2), tedy 2 hostitele pro síť. Tato maska má největší smysl u dvou-bodových spojení (např. WAN).

To je celý postup!

Pokud to vezmeme z druhého konce a budeme chtít zjistit jakou masku budeme potřebovat pro 35,61 nebo 129 hostů, tak budeme postupovat podobně.
Víme, že pro počítání hostitelů máme (2^x - 2), nyní ale neznáme masku, ale známe počet hostů, které chceme obsloužit.
Jistě ale víte, že si nemůžeme vymyslet libovolně velkou podsíť. Proto potřebujeme nejbližší vyšší mocninu čísla 2. Pro 35 to bude tedy 64 a měli bychom znát kolikátá to je mocnina dvojky a zjistíme, že to je 2^6. Takže potřebujeme 6 bitů pro hostitele.
Takže 32 - 6 = 26.

Výsledkem je tedy zjištění, že kvůli 35 hostům potřebujeme masku /26 se kterou nám zbude dostatek volných adres pro případné přidávání hostitelů.

Tímto stylem by jste pokračovali u dalších čísel. Jen je třeba si dát pozor na možnosti dané třídy adres.
To znamená, že max. počet hostů je:
pro třídu A – 2^22
pro třídu B – 2^14
pro třídu C – 2^6

Pokud si říkáte proč tyto čísla, tak kvůli tomu, že min. počet bitů, které můžeme použít s metodou VLSM pro tvorbu podsítí, je roven dvoum a maximální počet jen
dle “vzorce” (32 - maska - 2).

Ale pokud bychom měli zadáno, že potřebujeme např. 87 podsítí budeme postupovat trochu jinak. Opět zde platí pravidlo nejbližší vyšší mocniny čísla 2. Nyní tedy 128, respektive 2^7.
Takže potřebujeme 7 bitů, ale tentokrát pro tvorbu podsítí a tak si je “půjčíme” z hostitelské části adresy.
Zde potřebujeme vědět třídu naší adresy pro kterou podsítě tvoříme.
Zvolíme se tedy např. adresu třídy B u které víme její defaultní masku /16.

Použijeme ji k výpočtu:   16 + 7 bitů = 23

Tím jsme se dostali k tomu, že pro vytvoření 87, respektive 64-128, sítí je třeba maska /23.

Pevně věřím, že tímto návodem někomu pomohu a budu rád za reakce, díky kterým mohu návod vylepšit.

Pokud najdete chybu, tak mi dejte vědět. Dopsal jsem to v 0:30.  🙂 Takže výskyt chyb může být zvýšený.