News & Blog

Alhálózatokra bontás (1. rész)

News & Blog

Alapok

Az Internet maga különböző helyi (fizikai) hálózatok összekapcsolásából jött létre. Annak érdekében, hogy ezek a különböző helyi hálózatok összekapcsolhatók legyenek egymással, lehetővé kellett tenni, hogy azokból egymás állomásai megcímezhetők legyenek. Erre az egyes eszközök fizikai (hardver, MAC) címe nem volt alkalmas, hiszen semmi nem garantálta, hogy az egyes hálózatok egymással kompatibilis fizikai címzést alkalmazzanak. A megoldás érdekében bevezették a logikai (hálózati) címzést, amely már a fizikaitól független, gyakorlatilag egy szoftveresen konfigurálható azonosítást tett lehetővé. A két legelterjedtebb ilyen hálózati címzést megvalósító protokoll az IPv4 és az IPv6. (Mi a továbbiakban csak az IPv4-es címzéssel foglalkozunk.) Ez a megoldás olyan sikeres lett, hogy a hálózatos szoftverek manapság kizárólag ilyen logikai címzéssel is működő hálózatban tudnak egymással kommunikálni. A logikai címzés ráadásul már az operációs rendszer szintjén kerül konfigurálásra.

Nagyon fontos megjegyezni, hogy a logikai címzés nem teszi fölöslegessé a fizikai címzést. Habár a szoftver az átküldendő információt (az operációs rendszer segítségével) a hálózati rétegben úgynevezett csomagokban tárolja, és ezeken a csomagokon a forrás és a cél az IP címekkel van azonosítva, ezek a csomagok a fizikai hálózatban a keretekbe ágyazva kerülnek továbbításra, mely keretek viszont a forrás és a cél eszköz fizikai címét tartalmazzák. (Ezek az IP címek általában az üzenetet (csomagot) küldő és az azt fogadó állomást azonosítják, míg a fizikai címek azokat a hálózati eszközöket (pontosabban a forrás és a célállomás mellett a közöttük található forgalomirányítókat), amelyek ezt a csomagot a keretbe ágyazva egymásnak továbbítják. A fizikai és a logikai címek között az ARP (illetve a RARP) protokollal teremthetünk kapcsolatot. )

Ha a csomagot egy konténerhez, a keretet pedig a konténert szállító járműhöz hasonlítjuk, akkor talán jobban megérthető, hogy a konténerre írt címek (ezek az IP címek) a konténer feladóját és címzettjét azonosítják, míg a jármű menetlevelére írt címek az aktuális kiindulási pont és a célpont fizikai címét. Ha a konténert először teherautóval visszük ki a kikötőbe a raktárból, és ott átemeljük egy hajóra, mely az egyik kikötőből viszi a másikba, akkor a konténeren (csomagon) lévő címek nem változnak az út során, viszont a járművek menetlevelein (a kereteken) lévő címek az út első szakaszán a raktár és a kikötő teherautó parkolójának fizikai címei, míg a másik szakaszán a kikötő indulási dokkjának, illetve a másik kikötő érkezési dokkjának a fizikai címei.

Ahhoz, hogy az alhálózatokra bontás szükségszerűségét és folyamatát megértsük, meg kell ismernünk a hálózati címek felépítését. (Hangsúlyozom, itt most csak az IP protokollal, és annak is az IPv4-es megvalósításával foglalkozunk, tehát ezek után minden esetben az IP cím megnevezést használom, és ahol nem jelzem külön, ott IPv4-es címre gondolok.) A bejegyzés célja nem az IP címzés alapjainak a bemutatása, ha valaki nem rendelkezik a kellő ismeretekkel, érdemes az Interneten található nagy számú ide vágó szakmai cikkből párat elolvasni. A bejegyzés az IP címzést csupán összefoglaló jelleggel tárgyalja.

Az IP cím feladata tehát az, hogy egyértelműen azonosítson egy állomást, illetve a forgalomirányító egy interfészét úgy az Interneten, hogy azok akár különböző hálózatokban is vannak. (Ezeket együtt csomópontoknak is nevezzük.) Ennek megfelelően 2 részből áll, az első része azonosítja a hálózatot, a másik része pedig a hálózaton belül a csomópontot. (Most nem térünk ki a privát IP címek esetére, melyek több helyen is felhasználhatók.) A hálózatot azonosító rész neve a netid, a csomópontot azonosító részt pedig hostid-nak nevezzük. A netid minden esetben megelőzi a hostid-t.

IP címosztályok

Mivel az IPv4-es cím hossza 32 bit, azaz 4 byte, így ezeken a biteken osztozik a két rész egymás között. (Az egyes byte-okat oktet-eknek is nevezzük.) Az első kérdésünk az lehet, hogy hol van a két rész határa? Az első, a második esetleg a harmadik byte után? A válasz az, hogy attól függ, milyen osztályba tartozik az adott IP cím. Amennyiben A osztályú, az első byte a netid, és a további 3 byte a hostid, ha B osztályú akkor fele-fele arányban osztoznak a byte-okon, és ha C osztályú, akkor az első 3 byte a netid, és az utolsó byte a hostid. (Beszélünk még D és E osztályról is, de azok az alhálózatokra bontásban nem játszanak szerepet.)

Jogosan merülhet fel a kérdés, hogy egy adott cím melyik osztályba tartozik. Ezt a bevezető bitjei döntik el. Amennyiben az első oktet legfelső (7.) bitje 0, a cím A osztályú, ha 10, akkor B osztályú, és ha 110, akkor C osztályú. (A D osztályúé 1110, az E osztályúé 11110.) Nézzük meg a fenti esetekben az első oktetek tartalmát binárisan:

Minimális matematikai tudással már könnyű meghatározni, hogy az egyes címosztályok milyen címtartományokat fednek le. (A: 0.0.0.0 – 127.255.255.255, B: 128.0.0.0 – 191.255.255.255 és C: 192.0.0.0 – 223.255.255.255)

Határozzuk meg, hogy az egyes osztályokban hány és milyen méretű hálózat alakítható ki! (Itt tudatosan nem használjuk még az alhálózat kifejezést, később megértjük, hogy miért.) Szinte kizárólag a következő matematikai összefüggést fogjuk használni: Amennyiben rendelkezésünkre áll n bit, azon 2^n különböző kombináció írható le, melyek közül 0 a legkisebb és (2^n)-1 a legnagyobb. 8 biten (1 byte-on) így például összesen 256 kombináció írható fel, 0-tól 255-ig. Már csak azt kell megnéznünk, az egyes címosztályok esetében hány szabadon felhasználható netid és hostid bit áll rendelkezésünkre.

Vegyük először az A osztályú címeket.

Az ábrán jól látható, hogy az 1 byte hosszú netid-ből 7 bitet tudunk felhasználni, hiszen az első bit mindig 0 kell maradjon. A rendelkezésre álló hálózatok száma így 128, de ebből kettőt nem használhatunk, mert a 0.0.0.0 hálózat magát az Internetet azonosítja (ezt a hálózati címet használjuk az alapértelmezett átjárók definiálásakor), és a 127.0.0.0 hálózatot, mely a visszacsatolási (loopback) címeket tartalmazza. Ez a két hálózat is jól mutatja, hogy az IPv4-es címekkel milyen pazarlóan bántak annak idején, hiszen a legnagyobb méretű hálózatokból használtak el 2-t lényegében 2 darab cím számára. Mentségükre legyen mondva, annak idején (az 1960-as évek végén) még eszükbe sem jutott, hogy ilyen hihetetlen népszerű lesz ez a címzési rendszer.

A hostid 24 bitet tartalmaz, vagyis nagyon nagy számú IP cím megalkotására van lehetőség. Ebből kettőt nem oszthatunk ki, a legelső (tiszta 0-s bitekből álló hostid) magát a hálózatot címzi meg, míg az utolsó (tiszta 1-es bitekből álló hostid) a hálózat (úgynevezett irányított) szórási címe.

B osztályú címek esetén hasonlóan járunk el:

A netid-ből 14 bitet tudunk felhasználni (hiszen minden B osztályú cím 10 bitekkel kezdődik, ezeken nem változtathatunk), így több, mint 16 hálózat mellett hálózatonként több mint 65000 cím áll rendelkezésünkre.

C osztály esetén szinte már nem is kell magyarázni, hogy miért csak 21 netid bittel gazdálkodhatunk, és hálózatonként miért 256 cím áll rendelkezésre, melyekből 254 osztható ki.

Többekben (akik ismerik ezt a fogalmat) felmerülhet a kérdés, hogy “És mi van az alhálózati maszkkal?”. Vegyük észre, hogy eddig nem volt rá szükségünk! Az IPv4 eredeti dokumentációjában (RFC 791) nem is szerepelt még ilyen fogalom. A fentiekben bemutatott címzést úgynevezett osztályos címzésnek nevezzük, és azt, hogy melyik cím melyik osztályba tartozik (tehát hol van benne a netid és a hostid határa), kizárólag a cím első oktetjének bevezető bitjei határozzák meg. Semmiféle maszkra nincsen szükségünk ehhez! Ha megvizsgáljuk egy IP csomag fejlécét, akkor nem is találunk benne olyan mezőt, ami bármiféle maszk alapú információt hordozna! Osztályos címeknek tehát azokat az IPv4-es címeket tekintjük, melyek kizárólag két részből állnak, a netid-ből és a hostid-ből, a címosztályukat pedig az első oktet bevezető bitjeiből tudjuk megállapítani.

Ha érdekesnek találtad a cikket, a 2. részét IDE kattintva érheted el.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük