9.6. Paket och routing¶
En IP-adress säger vem ett meddelande är till. Mekanismen som faktiskt levererar det kallas routing, och det är den hopp-för-hopp-process genom vilken ett paket reser från en avsändares lokala nätverk till en mottagares lokala nätverk, möjligen mycket långt bort.
9.6.1. Ett paket, kort sagt¶
Ett paket är IP-lagrets arbetsenhet – en klump byte med ett litet huvud och en nyttolast. Huvudet har två fält som spelar roll för routing:
Käll-IP-adressen (varifrån paketet kom).
Destinations-IP-adressen (vart det är på väg).
Nyttolasten är vad än transportlagret bad nätverkslagret att leverera. Pakethuvudet inkluderar också en time-to-live-räknare, en kontrollsumma över huvudet och några kontrollflaggor. Inget av det är något som kamerans Python-kod rör direkt.
Paket lovar inget mer än ”vi försökte” – de kan tappas bort, dubbleras eller levereras i oordning. Tillförlitlighet och ordning är problem som transportlagret ovanför löser; nätverkslagret gör bara sitt bästa för att vidarebefordra varje paket mot dess destination.
9.6.2. Hopp för hopp¶
Paketet lämnar kameran och anländer till den första enheten som inte sitter på kamerans lokala segment: standardgatewayen. (Föregående sida nämnde att DHCP delar ut gatewayens adress till kameran när nätverket kom upp.) Den enheten är en router – en låda vars uppgift är att ta emot paket, titta på deras destination och vidarebefordra dem.
Ett paket från kameran till destinationen hoppar mellan routrar, var och en ett steg närmare.¶
Routern har en routingtabell – en lista med ”för destinationer som matchar det här mönstret, skicka ut paketet via det här gränssnittet”. För destinationer på samma nätverk som kameran säger posten ”skicka tillbaka det ner i kabeln det kom in på”. För destinationer på det större internet säger posten ”skicka det till uppströmsroutern”. För kända mönster av destinationer (ett företags-VPN, en specifik affärspartners nätverk, en satellitlänk) kan routern ha en mer specifik post som åsidosätter standardvärdet.
Uppströmsroutern gör samma sak. Och nästa. Och nästa. Varje hopp har samma form: ta emot paketet, slå upp destinationen i tabellen, skicka ut det via rätt gränssnitt. Så småningom anländer paketet till en router som är på samma lokala segment som destinations-IP:n. Den routern levererar det sista hoppet, destinationen tar emot paketet och resan är över.
9.6.3. Ändpunkterna känner inte till rutten¶
En kamera som skickar ett paket till en fjärrserver vet inte hur paketet kommer att ta sig dit. Den känner bara till destinations-IP:n och adressen till sin egen standardgateway. Allt däremellan – vilka routrar, vilka fibrer, vilka undervattenskablar – är något som routrarna längs vägen beslutar allteftersom, utifrån sina egna tabeller. Routrarna själva känner bara till sina närmaste grannar och den ungefärliga riktningen till vanliga destinationer; ingen enskild enhet på internet har en fullständig karta över det.
Den decentraliseringen är varför nätverket fortsätter att fungera när enskilda vägar fallerar. En avklippt kabel någonstans i mitten blir en omdirigeringshändelse hos några få routrar; ändpunkterna märker det aldrig. Det är också varför ett paket från en kamera i Tokyo till en server i Dublin kan lyckas utan att någondera sidan vet vilka länder som ligger däremellan.
9.6.4. Vad detta betyder för ett Python-skript¶
Kamerans uppgift på nätverkslagret kokar ner till:
Ha en IP-adress.
Känna till standardgatewayens adress (DHCP fyller i detta automatiskt).
Lämna utgående paket, adresserade till vilken IP som helst, till den gatewayen och lita på resten av vägen.
Ett skript väljer aldrig en rutt, namnger aldrig ett mellanliggande hopp och ser aldrig routrarna i mitten. Det skriver destinations-IP:n på paketet och nätverkslagret tar över. Från ett Python-skript är all routing bara en egenskap hos det nätverk kameran har anslutit sig till – ”gatewayen skickar paket någonstans användbart för mig”.
Transportlagret som kommer härnäst antar att routing bara fungerar, och bygger tillförlitlighet, ordning och program-till-program-adressering ovanpå det.