9.6. Csomagok és útválasztás¶
Az IP-cím azt mondja meg, kinek szól egy üzenet. Azt a mechanizmust, amely valójában kézbesíti, útválasztásnak (routing) nevezzük, és ez az az ugrásról ugrásra zajló folyamat, amelynek során egy csomag a küldő helyi hálózatától a fogadó helyi hálózatáig jut, akár nagyon messzire is.
9.6.1. A csomag dióhéjban¶
A csomag az IP-réteg munkaegysége – bájtok egy darabja, egy kis fejléccel és egy hasznos teherrel. A fejlécben két mező számít az útválasztás szempontjából:
A forrás IP-cím (ahonnan a csomag jött).
A cél IP-cím (ahová tart).
A hasznos teher az, aminek a kézbesítésére a szállítási réteg megkérte a hálózati réteget. A csomagfejléc tartalmaz továbbá egy élettartam- (time-to-live) számlálót, a fejlécre vonatkozó ellenőrzőösszeget és néhány vezérlőjelzőt. Ezek egyikéhez sem nyúl közvetlenül a kamera Python-kódja.
A csomagok nem ígérnek többet annál, mint hogy „megpróbáltuk” – elveszhetnek, megduplázódhatnak vagy sorrenden kívül érkezhetnek. A megbízhatóság és a sorrend a fölötte lévő szállítási réteg által megoldandó problémák; a hálózati réteg csupán a tőle telhetőt teszi, hogy minden csomagot a célja felé továbbítson.
9.6.2. Ugrásról ugrásra¶
A csomag elhagyja a kamerát, és megérkezik az első olyan eszközhöz, amely nem a kamera helyi szegmensén ül: az alapértelmezett átjáróhoz. (Az előző oldal említette, hogy a DHCP átadja a kamerának az átjáró címét, amikor a hálózat felépül.) Ez az eszköz egy útválasztó – egy doboz, amelynek az a feladata, hogy csomagokat fogadjon, megnézze a céljukat, és továbbküldje őket.
Egy a kamerától a célig tartó csomag útválasztóról útválasztóra ugrik, mindegyik egy lépéssel közelebb.¶
Az útválasztónak van egy útválasztási táblája – egy lista arról, hogy „az ehhez a mintához illeszkedő célokhoz küldd a csomagot ezen az interfészen ki”. A kamerával azonos hálózaton lévő célok esetén a bejegyzés azt mondja: „küldd vissza azon a kábelen, amelyen érkezett”. A tágabb internet céljaihoz a bejegyzés azt mondja: „küldd a feljebb lévő útválasztónak”. Bizonyos ismert célmintákhoz (egy vállalati VPN, egy konkrét üzleti partner hálózata, egy műholdas kapcsolat) az útválasztónak lehet egy specifikusabb bejegyzése, amely felülírja az alapértelmezettet.
A feljebb lévő útválasztó ugyanezt teszi. És a következő. És az azutáni. Minden ugrás ugyanolyan formájú: fogadja a csomagot, kikeresi a célt a táblában, és kiküldi a megfelelő interfészen. Végül a csomag megérkezik egy olyan útválasztóhoz, amely valóban a cél IP-vel azonos helyi szegmensen van. Ez az útválasztó kézbesíti az utolsó ugrást, a cél megkapja a csomagot, és az utazásnak vége.
9.6.3. A végpontok nem ismerik az útvonalat¶
Egy távoli kiszolgálónak csomagot küldő kamera nem tudja, hogyan fog a csomag odaérni. Csak a cél IP-jét és a saját alapértelmezett átjárójának címét ismeri. Minden, ami a kettő között van – mely útválasztók, mely optikai szálak, mely tengeralatti kábelek – olyasmi, amit az útvonal mentén lévő útválasztók döntenek el menet közben, a saját tábláik alapján. Maguk az útválasztók is csak a közvetlen szomszédjaikat és a gyakori célok nagyjábóli irányát ismerik; az interneten egyetlen eszköznek sincs teljes térképe róla.
Ez a decentralizáltság az oka annak, hogy a hálózat tovább működik, amikor egyes útvonalak meghibásodnak. Egy elvágott kábel valahol középen néhány útválasztón egy újra-útválasztási eseménnyé válik; a végpontok soha nem veszik észre. Ez az oka annak is, hogy egy tokiói kamerától egy dublini kiszolgálóhoz tartó csomag sikeres lehet anélkül, hogy bármelyik fél tudná, mely országok vannak közte.
9.6.4. Mit jelent ez egy Python-szkript számára¶
A kamera feladata a hálózati rétegben a következőre szűkül:
Legyen IP-címe.
Ismerje az alapértelmezett átjáró címét (ezt a DHCP automatikusan kitölti).
Adja át a kimenő csomagokat, bármely IP-re címezve, ennek az átjárónak, és bízzon az útvonal többi részében.
Egy szkript soha nem választ útvonalat, soha nem nevez meg köztes ugrást, és soha nem látja a középen lévő útválasztókat. Ráírja a cél IP-jét a csomagra, és a hálózati réteg átveszi az irányítást. Egy Python-szkript szemszögéből az egész útválasztás csupán annak a hálózatnak a tulajdonsága, amelyhez a kamera csatlakozott – „az átjáró elküldi a csomagokat valahová, ami nekem hasznos”.
A következő szállítási réteg feltételezi, hogy az útválasztás egyszerűen működik, és erre építi rá a megbízhatóságot, a sorrendezést és a programok közötti címzést.