9.5. IP-Adressen¶
Eine Hardwareadresse hebt ein Gerät von den anderen am selben lokalen Kabel oder in derselben Funkzelle ab. Für diese Aufgabe ist sie gut geeignet, aber über das lokale Segment hinaus ist sie nutzlos: Ein Switch im Nachbargebäude kann anhand davon nicht routen, weil der zugrunde liegende Mechanismus, mit dem ein Switch MAC-Adressen lernt, nur innerhalb eines Segments funktioniert.
Die Vermittlungsschicht löst das mit einer zweiten Art von Adresse, die unabhängig davon ist, an welchem Kabel ein Gerät angeschlossen ist. Der Name für diese Art von Adresse ist Internet-Protocol-Adresse oder IP-Adresse, und die Hälfte „Internet Protocol“ benennt die Menge an Regeln, die jeder Host im Internet befolgt, wenn er eine solche Adresse sendet oder weiterleitet. Das aktuelle Internet verwendet zwei Versionen des Adressierungsschemas parallel – IPv4 (die ältere Form, die in kleinen Netzwerken noch dominiert) und IPv6 (die neuere Form, die sie langsam ablöst).
9.5.1. Was eine IP-Adresse ist¶
Eine IP-Adresse ist eine Zahl, die groß genug ist, um jedes Gerät im Internet eindeutig zu identifizieren. Sie wird in einer menschenlesbaren Form geschrieben, die im Rest dieses Abschnitts verwendet wird, aber im Paket-Header ist sie nur eine Ganzzahl fester Größe.
IPv4-Adressen sind 32 Bit lang und werden als vier durch Punkte getrennte Dezimalzahlen geschrieben, wobei jede Zahl einem Byte entspricht:
192.168.1.42 8.8.8.8 10.0.0.1
Zweiunddreißig Bit ergeben etwa vier Milliarden mögliche Adressen, was nach reichlich klang, als IPv4 in den 1970er-Jahren entworfen wurde, und Anfang der 2010er-Jahre nicht mehr ausreichte.
IPv6-Adressen sind 128 Bit lang und werden als acht Gruppen von je vier hexadezimalen Ziffern geschrieben, die durch Doppelpunkte getrennt sind:
2001:0db8:85a3:0000:0000:8a2e:0370:7334Folgen von Nullen können zu
::verkürzt werden, und führende Nullen in einer Gruppe können weggelassen werden, sodass die obige Adresse normalerweise als2001:db8:85a3::8a2e:370:7334geschrieben wird.
Die beiden Adressfamilien sind ansonsten verschiedene Sprachen; ein IPv4-Host kann ohne Hilfe eines Gateways nicht direkt ein Paket an einen IPv6-Host senden. Die Module network und socket der Kamera unterstützen beide. Dieses Tutorial verwendet in den Beispielen IPv4, weil die meisten lokalen Netzwerke, denen die Kamera beitreten wird, noch reine IPv4-Netzwerke sind, aber alles Folgende funktioniert für IPv6 genauso, sobald die Adressen ausgetauscht werden.
9.5.2. Wofür eine IP-Adresse da ist¶
Die IP-Adresse gibt an, für welchen Host im Internet ein Paket bestimmt ist. Ein Router, der nicht weiß, wie er ein Ziel direkt erreicht, weiß, dass ein anderer Router es wahrscheinlich weiß, und leitet das Paket dorthin weiter. Das Paket springt zwischen Routern, von denen jeder ein wenig näher am Ziel ist, bis ein Router, der sich im lokalen Segment des Ziels befindet, den letzten Sprung ausliefert.
Dieses Sprung-für-Sprung-Verhalten ist es, was das Internet als ein großes Netzwerk statt vieler kleiner Inseln funktionieren lässt. Die nächste Seite behandelt, wie die Sprünge ausgewählt werden; diese hier geht nur um die Adresse.
9.5.3. Wie eine Kamera eine bekommt¶
Eine Kamera, die gerade einem WLAN-Netzwerk beigetreten ist, benötigt eine IP-Adresse, bevor sie mit irgendetwas kommunizieren kann. Es gibt zwei verbreitete Wege, wie das geschieht.
Der erste ist die automatische Zuweisung. Die Kamera fragt das lokale Netzwerk nach einer Adresse; das Gerät, das eine vergibt, ist der Router – die Box, die das lokale Netzwerk mit dem weiteren Internet verbindet. In den meisten Heim- und Kleinbüro-Setups fungiert dieselbe physische Box auch als Switch, an den kabelgebundene Geräte angeschlossen werden, und als WLAN-Access-Point, mit dem sich drahtlose Geräte verbinden, sodass „der Router“, „der Switch“ und „der Access Point“ alle dasselbe Stück Hardware sein können. Der Router führt einen kleinen Dienst namens DHCP (das Dynamic Host Configuration Protocol) aus, der einen Pool verfügbarer Adressen vorhält, für jedes neu hinzugekommene Gerät eine auswählt und sie für eine feste Zeit verleast. Während DHCP dabei ist, übergibt der Router der Kamera auch noch ein paar andere nützliche Konfigurationsdaten:
die Adresse, an die ausgehender Datenverkehr gesendet wird, wenn das Ziel außerhalb des lokalen Netzwerks liegt (das Standard-Gateway, das die eigene Adresse des Routers ist); und
die Adressen eines oder mehrerer Nameserver, die menschenlesbare Namen wie
example.comin IP-Adressen umwandeln. Der Dienst zur Namensauflösung heißt DNS, das Domain Name System, und Namen und DNS behandelt ihn im Detail.
All dies geschieht automatisch, während die Verbindung aufgebaut wird. Die Kamera muss nichts davon ausdrücklich anfordern; in dem Moment, in dem isconnected() im Beispiel auf der vorherigen Seite den Wert True zurückgibt, hat die Kamera bereits ihre Adresse, ihr Gateway und ihre Nameserver.
Die zweite Option ist die statische Konfiguration. Manche Einsätze wünschen sich eine bekannte Adresse für die Kamera, damit andere Geräte sie erreichen können, ohne sie zuvor nachschlagen zu müssen. Die Methode ipconfig() setzt die Adresse, das Gateway und den Nameserver von Hand:
wlan.ipconfig(addr4=("192.168.1.50/24", "192.168.1.1"))
wlan.ipconfig(dns="192.168.1.1")
Die statische Konfiguration ist fehleranfällig (zwei Geräte, denen versehentlich dieselbe Adresse gegeben wird, geraten in Konflikt). Greifen Sie auf den DHCP-Standard zurück, sofern sich kein konkreter Grund ergibt, ihn zu überschreiben.
Sobald die Kamera eine IP-Adresse hat, ist sie dem Internet beigetreten (oder zumindest dem Teil des lokalen Netzwerks davon). Andere Geräte können nun Pakete unter dieser Adresse an sie adressieren, und sie kann Pakete an sie adressieren.
9.5.4. Die Netzmaske und das /24¶
Das /24 am Ende der Adresse im obigen statischen Beispiel ist die Netzmaske. Eine IP-Adresse allein gibt nicht an, wo das lokale Netzwerk endet – 192.168.1.50 könnte eine von einigen Hundert Adressen in einem kleinen Heimnetzwerk sein oder eine von Tausenden in einem größeren. Die Netzmaske gibt an, wie viel von der Adresse das Netzwerk benennt und wie viel den Host darin.
/24 bedeutet „die ersten 24 der 32 Bit benennen das Netzwerk; die letzten 8 benennen den Host“. Für 192.168.1.50/24 teilt das die Adresse in 192.168.1 für das Netzwerk und .50 für den Host auf und lässt Platz für etwa 254 Geräte im selben lokalen Netzwerk. /16 würde mehr Bits für die Host-Hälfte übrig lassen und weit mehr Geräte in einem Netzwerk unterbringen; /30 würde nur zwei Host-Adressen übrig lassen und eine Punkt-zu-Punkt-Verbindung aufnehmen.
Die Netzmaske wird üblicherweise auch als vierstellige Byte-Zahl in derselben Punktnotation wie die Adresse geschrieben. /24 ist äquivalent zu 255.255.255.0 – lesen Sie jedes Byte als „alle Bits, die zur Netzwerk-Hälfte gehören“. Die beiden Formen sind austauschbar; der Lesevorgang von ipconfig() im nächsten Unterabschnitt gibt zufällig die Vier-Byte-Form zurück.
Warum die Aufteilung überhaupt eine Rolle spielt – wie ein Gerät die Netzmaske nutzt, um zu entscheiden, ob ein Ziel im lokalen Netzwerk liegt oder über das Gateway hinausgehen muss, und warum die meisten Heimnetzwerke bei /24 landen – wird unter Private Netzwerke und NAT behandelt.
9.5.5. Die Adresse zurücklesen¶
Die Methode ipconfig() ohne Argumente gibt die aktive Konfiguration zurück. Die Ansicht addr4 gibt die IP-Adresse und die Netzmaske zurück:
>>> wlan.ipconfig("addr4")
('192.168.1.50', '255.255.255.0')