5. fejezet - A hálózati réteg

A hálózati réteg feladata, hogy a csomagokat a forrástól egészen a célig eljuttassa. Ehhez a csomagnak esetleg több útválasztón is keresztül kell haladnia. Ez a feladat láthatóan elkülönül az adatkapcsolati réteg feladatától, amely ennél szerényebb: azaz keretek továbbítása a vonal egyik végétől a másikig. Ezért a hálózati réteg a legalacsonyabb réteg, amely két végpont közti átvitellel foglalkozik.

E célok elérése érdekében a hálózati rétegnek ismernie kell a hálózat (vagyis az útválasztók és az adatkapcsolatok halmazának) topológiáját, és megfelelő útvonalakat kell találnia azon keresztül, még nagy kiterjedésű hálózatok esetén is. Arra is ügyelnie kell, hogy úgy válassza ki az útválasztókat, hogy elkerülje néhány kommunikációs vonal és útválasztó túlterhelését, míg mások tétlenül maradnak. Végül a hálózati rétegre hárul azoknak a problémáknak a megoldása is, amelyek akkor merülnek fel, amikor a forrás és a cél különböző hálózatokhoz tatoznak. Ebben a fejezetben megtárgyaljuk és illusztráljuk mindezeket a kérdéseket, elsősorban az internet és annak hálózati réteg protokollja, az IP példáján.

5.1. A hálózati réteg tervezési kérdései

A következő szakaszokban néhány olyan kérdést tekintünk át, amelyekkel a hálózati réteg tervezőjének meg kell birkóznia. Ezek között találjuk a szállítási rétegnek nyújtott szolgáltatást és a hálózat belső tervezését.

5.1.1. Tárol-és-továbbít típusú csomagkapcsolás

Mielőtt azonban rátérnénk a hálózati réteg részleteinek megtárgyalására, érdemes áttekintenünk azt a környezetet, amelyben a réteg protokolljai működnek. Ezt szemlélteti az 5.1. ábra. A rendszer legfőbb elemei a sötét ellipszisben található internet-szolgáltatói (ISP) berendezések (átviteli vonalakkal összekötött útválasztók), és az ellipszisen kívül ábrázolt felhasználói berendezések. A H1 hoszt egy bérelt vonalon keresztül közvetlen összeköttetésben áll az internetszolgáltató A útválasztójával. Ez a hoszt lehet egy otthoni számítógép, amely egy DSL-modemhez kapcsolódik. Ezzel szemben a H2 hoszt egy olyan LAN-hoz csatlakozik, amelyik esetleg lehet egy olyan irodai Ethernet, amelynek F útválasztóját a felhasználó birtokolja és üzemelteti. Ez az útválasztó is bérelt vonalon keresztül kapcsolódik a szolgáltatói berendezésekhez. Az F útválasztót az ellipszisen kívül ábrázoltuk, mivel nem tartozik a szolgáltatóhoz. Fejezetünk szempontjából a felhasználói területen lévő útválasztókat is a szolgáltatói hálózat részének tekintjük, hiszen ugyanazokat az algoritmusokat használják, mint a szolgáltató útválasztói (és minket most leginkább az algoritmusok érdekelnek).

5.1. ábra - A hálózati réteg protokolljainak környezete

kepek/05-01.png


A berendezések működése a következő. A hosztok az elküldeni kívánt csomagokat a saját LAN-on vagy a szolgáltató felé vezető kétpontos (point-to-point) kapcsolaton keresztül a legközelebbi útválasztóhoz továbbítják. Az útválasztó tárolja a csomagot, amíg az teljes egészében be nem érkezik, hogy ki lehessen számítani az ellenőrző összeget. Ezután a csomag mindig a soron következő útválasztóhoz kerül, míg el nem éri a címzett hosztot. Ezt hívják tárol-és-továbbít (store-and-forward) típusú csomagkapcsolásnak, amint azt az előző fejezetekben már láthattuk.

5.1.2. A szállítási rétegnek nyújtott szolgáltatások

A hálózati réteg a hálózati réteg és a szállítási réteg közötti interfészen nyújtja szolgáltatásait a szállítási rétegnek. Fontos ismernünk, hogy milyen jellegűek ezek a szolgáltatások. A hálózati réteg tervezésénél a következő vezérelveket tartották szem előtt:

  1. A szolgáltatásoknak függetleneknek kell lenniük az útválasztók kialakításától.

  2. A szállítási réteg elől el kell takarni a jelenlevő útválasztók számát, típusát és topológiáját.

  3. A szállítási réteg rendelkezésére bocsátott hálózati címeknek egységes számozási rendszert kell alkotniuk, még LAN-ok és WAN-ok esetén is.

Ezeknek a céloknak a figyelembevételével, a hálózati réteg tervezői nagy szabadságot élveznek a szállítási rétegnek nyújtandó szolgáltatások részletes specifikációinak elkészítése során. Ám ez a szabadság gyakran válik két szembenálló csoport indulatos csatározásává. A vita középpontjában az áll, hogy vajon a hálózati réteg összeköttetés-alapú vagy összeköttetés nélküli szolgáltatást nyújtson-e.

Az egyik tábor (amelyet az internet közössége képvisel) véleménye az, hogy az útválasztók dolga csupán a bitek ide-oda mozgatása. Nézetük szerint (amelyet valódi, működő számítógép-hálózattal való 40 éves tapasztalat támaszt alá), a hálózat eredendően megbízhatatlan, függetlenül annak tervezésétől. Ezért a hosztoknak a megbízhatatlanságot tényként kell elfogadniuk, és a hibavédelmet (vagyis a hibajelzést és hibajavítást) és a forgalomszabályozást maguknak kell elvégezniük.

Ez a nézet gyorsan ahhoz a következtetéshez vezet, hogy a hálózati szolgáltatásnak összeköttetés nélkülinek kell lennie, a send packet és receive packet primitíveken kívül alig kell valami más. Hangsúlyozottan nincs szükség a csomagok sorrendi kezelésére és forgalomszabályozásra, mert ezt a hosztok amúgy is mindenképpen megteszik, és valószínűleg kevés nyereség származik abból, ha ezeket kétszer hajtjuk végre. Erre példa a végponttól végpontig tervezési alapelv (end-to-end argument), amely nagyban befolyásolja az internet formáját [Saltzer és mások, 1984]. Továbbá, minden csomagnak hordoznia kell a teljes célcímet, mivel mindegyik elküldött csomag az előző csomagoktól függetlenül kerül továbbításra (ha egyáltalán voltak ilyenek).

A másik tábor (amelyet a telefontársaságok képviselnek) véleménye az, hogy a hálózatnak megbízható, összeköttetés-alapú szolgáltatást kell nyújtania. Állításuk szerint a világméretű telefonhálózattal szerzett 100 éves sikeres gyakorlat jó alapot ad ehhez. Ebből a nézőpontból a szolgáltatásminőség a meghatározó tényező, márpedig ezt a hálózatban kiépített összeköttetések nélkül nagyon nehéz elérni, különösen az olyan valós idejű forgalmak esetén, mint amilyen a hang vagy a mozgóképek továbbítása.

Az eltelt több évtized ellenére ez a probléma nagyon is aktuális. Az eleinte széles körben használt adathálózatok, mint például a 70-es években alkalmazott X.25, illetve a 80-as években alkalmazott kerettovábbító (frame relay), összeköttetés-alapúak voltak. Az ARPANET és az internet korai alkalmazása óta azonban az összeköttetés nélküli hálózati rétegek népszerűsége jelentősen megnőtt. Az IP-protokoll a siker töretlenül jelen lévő szimbóluma. Az IP népszerűségét az összeköttetés-alapú ATM-technika sem tudta megtörni, amelyet arra fejlesztettek ki, hogy az IP-protokoll helyére lépjen. Ehelyett az ATM az, amelyet jelenleg csak nagyon szűk körben használnak, az IP pedig a telefonos hálózatokat is átveszi. Ugyanakkor érdemes megjegyezni, hogy az internet is kezd lépést tartani az egyre fontosabbá váló szolgáltatásminőségi garanciákkal, pontosabban, kezd magára venni olyan tulajdonságokat is, amelyek eddig csak az összeköttetés-alapú szolgáltatásokat jellemezték, amint azt hamarosan látni fogjuk. Összeköttetés-alapú technika például az MPLS (MultiProtocol Label Switching), amelynek leírását az 5.1.4. szakasz tartalmazza, illetve a VLAN, amelyet a 4. fejezet mutat be. Mindkét technikát széles körben használják.

5.1.3. Összeköttetés nélküli szolgáltatás megvalósítása

Miután láttuk, hogy a hálózati réteg kétfajta szolgáltatást tud nyújtani a felhasználónak, ideje megnéznünk, hogyan működik belül. A felkínált szolgáltatás típusától függően kétfajta szerveződés lehetséges. Az összeköttetés nélküli szolgáltatás esetében a hálózatba érkező csomagok egyenként és egymástól függetlenül kerülnek továbbításra; előzetes összeköttetés-felépítésre nincs szükség. Ebben az összefüggésben a csomagokat gyakran datagramoknak (datagrams, DG), a hálózatot pedig datagramalapú hálózatnak (datagram network) is nevezik, a távirat (telegram) kifejezés mintájára. Ha összeköttetés-alapú szolgáltatást használunk, a forrás és a cél útválasztó között előre ki kell építeni egy útvonalat, mielőtt egyetlen adatcsomagot is elküldenénk. Ezt a kapcsolatot virtuális áramkörnek (virtual circuit, VC) nevezzük a telefonhálózat fizikai áramköreinek mintájára, a hálózat neve pedig ebben az esetben virtuálisáramkör-alapú hálózat (virtual circuit subnet). Ebben a szakaszban a datagramalapú, a következőben pedig a virtuálisáramkör-alapú hálózatokat vizsgáljuk.

Nézzük meg tehát, hogy működik egy datagramalapú hálózat. Tegyük fel, hogy az 5.2. ábra F1 folyamata egy hosszú üzenetet szeretne küldeni az F2 folyamat számára. F1 átadja az üzenetet a szállítási rétegének azzal az utasítással, hogy továbbítsa azt a H2 hoszt F2 folyamatának. A szállítási réteg kódja a H1 hoszton fut, tipikusan az operációs rendszeren belül. Ez az üzenet elejéhez fűz egy szállítási fejrészt és továbbítja azt a hálózati rétegnek, amelyik valószínűleg szintén egy eljárás az operációs rendszeren belül.

5.2. ábra - Útválasztás datagramalapú hálózatban

kepek/05-02.png


Tegyük fel, hogy az üzenet négyszer olyan hosszú, mint a maximális csomagméret, tehát a hálózati rétegnek[24] négy csomagra kell bontania, és mindegyiket sorban az útválasztóhoz továbbítania valamilyen kétpontos protokoll, például a PPP felhasználásával. Ezen a ponton lép be a képbe a szolgáltató. A hálózat minden útválasztójának van egy belső táblázata, amely minden lehetséges cél esetére megadja, hogy merrefelé kell továbbítani a csomagokat. A táblázat bejegyzései olyan kettősök, amelyek a címzett útválasztó-azonosítóját és a címzetthez vezető kimeneti vonal azonosítóját tartalmazzák. Csak közvetlen kapcsolatban álló összeköttetéseket lehet használni. Az 5.2. ábrán például az útválasztónak csak két kimeneti vonala van – egy a B és egy a C felé –, így minden bejövő csomagot a két útválasztó közül valamelyiknek kell továbbküldeni, még akkor is, ha a címzett egy ezektől különböző útválasztó. Az A kezdeti útválasztó táblázatát a képen a „kezdetben” megjelölésű oszlop mutatja. Négy csomag útját követhetjük végig az ábrán.

Az A útválasztó a beérkezett 1., 2. és 3. csomagot rövid ideig tárolja, miután azok beérkeztek a bejövő adatkapcsolaton és kiszámítja az ellenőrző összegüket. Ezután a táblázatának megfelelően továbbítja a C-hez egy új keretben. Az 1. csomag ezután az E-hez, majd az F-hez kerül. F-hez érve beágyazódik egy keretbe, és a LAN-on keresztül eljut H2-höz. A 2. és a 3. csomag ugyanezt az utat járja be.

A 4. csomaggal azonban valami más történik. Az A-tól a B útválasztóhoz kerül, annak ellenére, hogy az F volt a címzett. Valami miatt az A úgy döntött, hogy a 4. csomagot más úton továbbítja, mint az első hármat. Értesülhetett például egy, az ACE út mentén lévő torlódásról, és módosíthatta az útválasztó táblázatát, amint azt az ábra „később” megjelölésű oszlopa mutatja. Azt az algoritmust, mely a táblázatok karbantartását végzi és meghozza az útválasztó döntéseket, útválasztó algoritmusnak (routing algorithm) nevezzük. Ezen algoritmusok képezik fejezetünk egyik legfontosabb tárgyát. Ahogy látni fogjuk, számos különböző algoritmus létezik.

Az internetprotokoll (IP, Internet Protocol), amely a teljes internet alapját képezi, meghatározó példája az összeköttetés nélküli hálózati szolgáltatásnak. Minden csomag tartalmazza a címzett IP-címet, amelyet az útválasztók használnak az egyes csomagok egyesével történő továbbításához. Az IPv4-csomagok címe 32 bites, az IPv6-csomagok címe pedig 128 bites. Az IP-t részletesen tárgyaljuk a fejezet későbbi részében.

5.1.4. Összeköttetés-alapú szolgáltatás megvalósítása

Az összeköttetés-alapú szolgáltatáshoz szükségünk van egy virtuálisáramkör-alapú hálózatra. Nézzük, hogyan is működik ez! A virtuális áramkörök alapötlete, hogy elkerülik azt, hogy minden egyes csomag számára újra és újra útvonalat kelljen választani, szemben az 5.2. ábrán látottakkal. Ehelyett, már az összeköttetés felépítésekor kiválasztanak a küldő és a címzett hoszt között egy utat, amelyet az útválasztók az összeköttetés kiépítése keretében tárolnak a táblázataikban. Ezt az utat használják azután a kapcsolat teljes forgalmának lebonyolítására, pontosan úgy, ahogy a telefonhálózat esetében is.[25] Amikor az összeköttetés megszűnik, a virtuális áramkör is bomlik. Az összeköttetés-alapú szolgáltatás esetén minden csomag tartalmaz egy azonosítót, amely megmondja, hogy a csomag melyik virtuális áramkörhöz tartozik.

Példaként tekintsük az 5.3. ábrán látható helyzetet. Itt a H1 hoszt kialakított egy összeköttetést H2-vel. Ezt jelzi az útválasztó táblázatok első bejegyzése. Az A útválasztó táblázatának első sora szerint, ha egy 1-es azonosítót hordozó csomag érkezik a H1 felől, akkor azt a C útválasztó felé kell továbbítani 1-es azonosítóval. Hasonlóképpen, C első bejegyzése az E-hez továbbítja a csomagot, szintén 1-es összeköttetés-azonosítóval.

5.3. ábra - Útválasztás virtuálisáramkör-alapú hálózatban

kepek/05-03.png


Most nézzük meg, mi történik, ha H3 is szeretne összeköttetést létesíteni H2-vel. Összeköttetés-azonosítónak az 1-et választja (mivel ez kezdeményezi az összeköttetést és ez az egyetlen összeköttetése), és arra utasítja a hálózatot, hogy hozza létre a virtuális áramkört. Ez eredményezi a második sort a táblázatokban. Vegyük észre, hogy ez ütközéshez vezet, mert bár A könnyen meg tudja különböztetni a H1-ből és a H3-ból érkező, egyaránt 1-es azonosítójú csomagokat, C már nem képes erre. Ezért A új összeköttetés-azonosítót rendel a második összeköttetés kimenő forgalmához. Az ilyen konfliktushelyzetek elkerüléséhez tehát az szükséges, hogy az útválasztók képesek legyenek megváltoztatni az összeköttetés-azonosítókat a kimenő csomagokban.

Egyes esetekben ezt a működést címkekapcsolásnak (label switching) is nevezik. Összeköttetés-alapú hálózati szolgáltatásra példa a többprotokollos címkekapcsolás (MultiProtocol Label Switching, MPLS). Ezt használják az ISP-hálózatok az interneten. Ebben az esetben az IP-csomagba beágyaznak egy 20 bites összeköttetés-azonosítót vagy összeköttetés-címkét tartalmazó MPLS-fejrészt. Az MPLS gyakran rejtve van az ügyfelek elől, mint amikor az ISP hosszú távú összeköttetéseket alakít ki nagy forgalomhoz, de egyre inkább használják akkor is, ha a szolgáltatás minősége fontos, illetve egyéb ISP forgalomkezelési feladatokhoz is alkalmazzák. Az MPLS-ről további részletek a fejezet későbbi részében találhatók.

5.1.5. A virtuálisáramkör- és a datagramalapú hálózatok összehasonlítása

Mind a virtuális áramköröknek, mind a datagramoknak megvannak a maguk támogatói és ellenzői. Mi most megkíséreljük összefoglalni mindkét oldal érveit. A főbb témák megtalálhatók az 5.4. ábrán, bár a szőrszálhasogatók bizonyára az ábra minden részére tudnának ellenpéldát találni.

5.4. ábra - A datagramalapú és a virtuálisáramkör-alapú hálózatok összehasonlítása

kepek/05-04.png


A hálózaton belül sokfajta kompromisszum lehetséges a virtuális áramkörök és a datagramok között. Az egyik kompromisszum az összeköttetés-felépítési és a címfeldolgozási idő közt kereshető. A virtuális áramkörök használata megkövetel egy összeköttetés-felépítési fázist, amely idő- és erőforrás-igényes. Ha azonban az összeköttetés felépült, akkor könnyű eldönteni, mi legyen a csomagokkal: az útválasztó az áramkör számát indexként használja a táblázatokhoz a csomag továbbítása érdekében. Datagramalapú hálózatban nincs szükség az összeköttetés felépítésére, azonban sokkal bonyolultabb az a keresőeljárás, amely a célcímhez tartozó bejegyzés meghatározásához szükséges.

Másik probléma, hogy a datagramalapú hálózatokban használt célcím hosszabb a virtuális áramkörökben használt áramkörszámnál, mivel a célcím globális jelentéssel rendelkezik. Ha a csomagok hossza rövid, akkor a minden csomagban jelenlevő teljes célcím jelentős mértékű többletterhet jelent, és ez sávszélesség-veszteséggel jár.

További kérdés, hogy mennyi helyet foglalnak el a táblázatok az útválasztók memóriájában. Egy datagramalapú hálózatban minden lehetséges címzett számára fenn kell tartani egy bejegyzést, míg a virtuálisáramkör-alapú hálózatban csak az egyes áramkörök számára kell egy-egy bejegyzés. Megjegyzendő ugyanakkor, hogy a virtuális áramkörök ezen előnye sem ennyire egyértelmű, mert az összeköttetést felépítő csomagokat is irányítani kell, ezek pedig ugyanúgy tartalmazzák a célcsomagok címét, mint a datagramok.

A virtuális áramkörök a szolgáltatásminőségi garanciák és a hálózaton belüli torlódáskezelés területén rendelkeznek némi előnnyel, mert az erőforrásokat (puffereket, sávszélességet, processzoridőt) előre, az összeköttetés felépítésekor le tudják foglalni. Mire a csomagok megérkeznek, a szükséges sávszélesség és útválasztó-kapacitás már rendelkezésre fog állni. Datagramalapú hálózatokban a torlódások elkerülése bonyolultabb kérdés.

A tranzakciófeldolgozó rendszereknél (mint például amikor az üzletek hitelkártyás vásárlásokat ellenőriznek) egy virtuális áramkör felállításához és kitörléséhez szükséges többletteher könnyen felülmúlhatja az áramkör valódi hasznát. Ha a forgalom nagy része várhatóan ilyen típusú lesz, a hálózaton belüli kapcsolt virtuális áramkörök használatának nincs sok értelme. Másfelől viszont az olyan hosszú ideig működő virtuális áramkörök, mint amilyen a VPN két cég központja között, amelyeket kézzel hoznak létre és hónapokig vagy évekig fennállnak, hasznosnak bizonyulhatnak.

A virtuális áramkörök azonban sebezhetők is. Ha egy útválasztó összeomlik, és elveszti memóriájának tartalmát, még ha egy másodperccel később újraindul is, az összes rajta keresztülhaladó virtuális áramkört meg kell szakítani. Ezzel szemben, ha egy datagramalapú útválasztó megy tönkre, csak azok a felhasználók szenvednek kárt, amelyeknek a csomagjai éppen ebben az útválasztóban álltak sorban, sőt talán nem is mindegyik, mivel a küldő valószínűleg rövid időn belül újraküldi azokat. Egy kommunikációs vonal elvesztése végzetes a rajta keresztülhaladó virtuális áramkörök számára, de könnyen ellensúlyozható datagramok használata esetén. A datagramok azt is lehetővé teszik az útválasztóknak, hogy kiegyenlítsék a hálózat terhelését, mivel az útvonalak egy hosszabb csomagsorozat közben is módosíthatók.



[24] Az üzenet csomagokra tördelése és a csomagok összerakása üzenetté valójában nem a hálózati, hanem a szállítási rétegben történik. (A lektor megjegyzése)

[25] A telefonhálózatra való hivatkozás nem szerencsés, mivel ott fizikai áramkör, míg az összeköttetés-alapú csomagkapcsolásnál logikai csatorna, virtuális áramkör alakul ki a két távoli felhasználó között és szolgál a teljes forgalom lebonyolítására. (A lektor megjegyzése)