9.5. IP-adresser¶
En hårdvaruadress plockar ut en enhet bland de andra på samma lokala kabel eller radiocell. Den duger för den uppgiften, men den är värdelös bortom det lokala segmentet: en switch i nästa byggnad kan inte dirigera utifrån den, eftersom den underliggande mekanism som låter en switch lära sig MAC-adresser bara fungerar inom ett segment.
Nätverkslagret löser det med en andra sorts adress som är oberoende av vilken kabel en enhet är inkopplad i. Namnet på den här sortens adress är Internet Protocol-adress, eller IP-adress, och ”Internet Protocol”-halvan namnger den uppsättning regler som varje värd på internet följer när den skickar eller vidarebefordrar en. Dagens internet använder två versioner av adresseringsschemat parallellt – IPv4 (den äldre formen, fortfarande dominerande på små nätverk) och IPv6 (den nyare formen, som långsamt ersätter den).
9.5.1. Vad en IP-adress är¶
En IP-adress är ett tal som är stort nog att unikt identifiera vilken enhet som helst på internet. Den skrivs i en människoläsbar form som resten av avsnittet använder, men i pakethuvudet är den bara ett heltal med fast storlek.
IPv4-adresser är 32 bitar långa och skrivs som fyra decimaltal åtskilda av punkter, där varje tal är en byte:
192.168.1.42 8.8.8.8 10.0.0.1
Trettiotvå bitar ger ungefär fyra miljarder möjliga adresser, vilket lät som gott om när IPv4 utformades på 1970-talet och inte var tillräckligt i början av 2010-talet.
IPv6-adresser är 128 bitar långa och skrivs som åtta grupper om fyra hexadecimala siffror åtskilda av kolon:
2001:0db8:85a3:0000:0000:8a2e:0370:7334Sekvenser av nollor kan förkortas till
::, och inledande nollor i en grupp kan utelämnas, så adressen ovan skrivs normalt2001:db8:85a3::8a2e:370:7334.
De två adressfamiljerna är i övrigt olika språk; en IPv4-värd kan inte direkt skicka ett paket till en IPv6-värd utan hjälp från en gateway. Kamerans network- och socket-moduler stöder båda. Den här guiden använder IPv4 i exemplen eftersom de flesta lokala nätverk kameran ansluter till fortfarande bara använder IPv4, men allt som följer fungerar på exakt samma sätt för IPv6 när adresserna byts ut.
9.5.2. Vad en IP-adress är till för¶
IP-adressen säger vilken värd på internet ett paket är avsett för. En router som inte vet hur den når en destination direkt vet att någon annan router troligen gör det, och vidarebefordrar paketet dit. Paketet hoppar mellan routrar, var och en lite närmare destinationen, tills en router som är på destinationens lokala segment levererar det sista hoppet.
Det där hopp-för-hopp-beteendet är vad som får internet att fungera som ett stort nätverk i stället för många små öar. Nästa sida täcker hur hoppen väljs; den här handlar bara om adressen.
9.5.3. Hur en kamera får en¶
En kamera som just har anslutit sig till ett Wi-Fi-nätverk behöver en IP-adress innan den kan prata med något. Det finns två vanliga sätt för det att hända.
Det första är automatisk tilldelning. Kameran ber det lokala nätverket om en adress; enheten som delar ut en är routern – lådan som kopplar det lokala nätverket till det större internet. I de flesta hem- och småkontorsuppställningar fungerar samma fysiska låda också som den switch trådbundna enheter kopplas in i och som den Wi-Fi-accesspunkt trådlösa enheter associeras med, så ”routern”, ”switchen” och ”accesspunkten” kan alla vara samma hårdvara. Routern kör en liten tjänst som heter DHCP (Dynamic Host Configuration Protocol), som håller en pool av tillgängliga adresser, väljer en för varje nyligen anländ enhet och leasar den under en fast tid. Medan DHCP är igång delar routern också ut ett par andra användbara konfigurationsbitar till kameran:
adressen att skicka utgående trafik till när destinationen ligger utanför det lokala nätverket (standardgatewayen, som är routerns egen adress); och
adresserna till en eller flera namnservrar som omvandlar människoläsbara namn som
example.comtill IP-adresser. Namnuppslagningstjänsten heter DNS, Domain Name System, och Namn och DNS täcker den i detalj.
Allt detta sker automatiskt medan förbindelsen kommer upp. Kameran behöver inte be om något av det uttryckligen; i samma ögonblick som isconnected() returnerar True i exemplet på föregående sida har kameran redan sin adress, sin gateway och sina namnservrar.
Det andra alternativet är statisk konfiguration. Vissa driftsättningar vill ha en känd adress för kameran så att andra enheter kan nå den utan att först slå upp den. Metoden ipconfig() ställer in adressen, gatewayen och namnservern för hand:
wlan.ipconfig(addr4=("192.168.1.50/24", "192.168.1.1"))
wlan.ipconfig(dns="192.168.1.1")
Statisk konfiguration är skör (två enheter som av misstag fått samma adress hamnar i konflikt). Ta till DHCP-standarden om det inte dyker upp en specifik anledning att åsidosätta den.
När kameran väl har en IP-adress har den anslutit sig till internet (eller åtminstone den lokala nätverkets del av det). Andra enheter kan nu adressera paket till den via den adressen, och den kan adressera paket till dem.
9.5.4. Nätmasken och /24¶
/24 i slutet av adressen i det statiska exemplet ovan är nätmasken. En IP-adress säger inte i sig var det lokala nätverket slutar – 192.168.1.50 kan vara en av några hundra adresser på ett litet hemnätverk, eller en av tusentals på ett större. Nätmasken säger hur mycket av adressen som namnger nätverket och hur mycket som namnger värden inom det.
/24 betyder ”de första 24 av de 32 bitarna namnger nätverket; de sista 8 namnger värden”. För 192.168.1.50/24 delar det adressen i 192.168.1 för nätverket och .50 för värden, vilket lämnar plats för omkring 254 enheter på samma lokala nätverk. /16 skulle lämna fler bitar till värdhalvan och rymma långt fler enheter på ett nätverk; /30 skulle lämna bara två värdadresser och rymma en punkt-till-punkt-länk.
Nätmasken skrivs också vanligen som ett fyra-byte-tal i samma punktnotation som adressen. /24 är likvärdigt med 255.255.255.0 – läs varje byte som ”alla bitar som hör till nätverkshalvan”. De två formerna är utbytbara; läsaren ipconfig() i nästa underavsnitt råkar returnera fyra-byte-formen.
Varför uppdelningen spelar någon roll alls – hur en enhet använder nätmasken för att avgöra om en destination ligger på det lokala nätverket eller behöver gå ut via gatewayen, och varför de flesta hemnätverk landar på /24 – täcks i Privata nätverk och NAT.
9.5.5. Läsa tillbaka adressen¶
Metoden ipconfig() utan argument returnerar den aktiva konfigurationen. Vyn addr4 returnerar IP-adressen och nätmasken:
>>> wlan.ipconfig("addr4")
('192.168.1.50', '255.255.255.0')