9.5. IP adresy¶
Hardwarová adresa vybírá zařízení mezi ostatními na témže místním kabelu nebo rádiové buňce. Pro tento účel je dostačující, ale za hranicemi místního segmentu je k ničemu: přepínač v sousední budově podle ní nemůže směrovat, protože základní mechanismus, který přepínači umožňuje učit se MAC adresy, funguje jen uvnitř jednoho segmentu.
Síťová vrstva to řeší druhým druhem adresy, který je nezávislý na tom, do kterého kabelu je zařízení zapojeno. Tento druh adresy se nazývá adresa internetového protokolu, neboli IP adresa, a část „internetový protokol“ pojmenovává soubor pravidel, kterými se řídí každý hostitel na internetu, když ji odesílá nebo přeposílá. Současný internet používá souběžně dvě verze adresního schématu – IPv4 (starší podobu, na malých sítích stále převažující) a IPv6 (novější podobu, která ji pomalu nahrazuje).
9.5.1. Co je IP adresa¶
IP adresa je číslo dostatečně velké na to, aby jednoznačně identifikovalo kterékoli zařízení na internetu. Zapisuje se v lidsky čitelné podobě, kterou používá zbytek této části, ale v hlavičce paketu jde jen o celé číslo pevné velikosti.
IPv4 adresy jsou 32 bitů dlouhé a zapisují se jako čtyři desítková čísla oddělená tečkami, přičemž každé číslo představuje jeden bajt:
192.168.1.42 8.8.8.8 10.0.0.1
Třicet dva bitů dává zhruba čtyři miliardy možných adres, což znělo jako spousta, když byl IPv4 v 70. letech navržen, a začátkem 2010. let už to nestačilo.
IPv6 adresy jsou 128 bitů dlouhé a zapisují se jako osm skupin po čtyřech hexadecimálních číslicích oddělených dvojtečkami:
2001:0db8:85a3:0000:0000:8a2e:0370:7334Souvislé řady nul lze zkrátit na
::a úvodní nuly ve skupině lze vynechat, takže výše uvedená adresa se obvykle zapisuje2001:db8:85a3::8a2e:370:7334.
Obě adresní rodiny jsou jinak různými jazyky; IPv4 hostitel nemůže přímo poslat paket IPv6 hostiteli bez pomoci brány. Moduly network a socket kamery podporují obě. Tento tutoriál používá v příkladech IPv4, protože většina místních sítí, ke kterým se kamera připojí, je stále jen IPv4, ale vše, co následuje, funguje pro IPv6 přesně stejně, jakmile se adresy zamění.
9.5.2. K čemu IP adresa slouží¶
IP adresa říká, kterému hostiteli na internetu je paket určen. Směrovač, který neví, jak se dostat k cíli přímo, ví, že nějaký jiný směrovač to pravděpodobně umí, a přepošle paket tam. Paket přeskakuje mezi směrovači, každý o něco blíž k cíli, dokud směrovač, který je na místním segmentu cíle, nedoručí poslední skok.
Toto chování skok za skokem je tím, co umožňuje, aby internet fungoval jako jedna velká síť, a ne jako mnoho malých ostrůvků. Další stránka se zabývá tím, jak se skoky volí; tato je jen o adrese.
9.5.3. Jak ji kamera získá¶
Kamera, která se právě připojila k Wi-Fi síti, potřebuje IP adresu, než s čímkoli může komunikovat. K tomu obvykle dochází dvěma způsoby.
Prvním je automatické přidělení. Kamera požádá místní síť o adresu; zařízení, které ji vydá, je směrovač – krabička, která propojuje místní síť se širším internetem. Ve většině domácích a malokancelářských konfigurací táž fyzická krabička slouží zároveň jako přepínač, do kterého se zapojují drátová zařízení, a jako přístupový bod Wi-Fi, ke kterému se přidružují bezdrátová zařízení, takže „směrovač“, „přepínač“ a „přístupový bod“ mohou být všechny jedním kusem hardwaru. Směrovač provozuje malou službu zvanou DHCP (Dynamic Host Configuration Protocol), která udržuje pool dostupných adres, vybere jednu pro každé nově příchozí zařízení a pronajme ji na pevně danou dobu. Při tom směrovač zároveň předá kameře několik dalších užitečných položek konfigurace:
adresu, na kterou se má posílat odchozí provoz, když je cíl mimo místní síť (výchozí brána, což je vlastní adresa směrovače); a
adresy jednoho nebo více jmenných serverů, které převádějí lidsky čitelné názvy jako
example.comna IP adresy. Služba pro vyhledávání názvů se nazývá DNS, Domain Name System, a podrobně se jí věnuje Jména a DNS.
To vše probíhá automaticky během navazování spojení. Kamera o nic z toho nemusí výslovně žádat; ve chvíli, kdy isconnected() v příkladu na předchozí stránce vrátí True, už kamera má svou adresu, svou bránu i své jmenné servery.
Druhou možností je statická konfigurace. Některá nasazení chtějí pro kameru známou adresu, aby ji ostatní zařízení mohla kontaktovat, aniž by ji nejprve musela vyhledávat. Metoda ipconfig() nastaví adresu, bránu a jmenný server ručně:
wlan.ipconfig(addr4=("192.168.1.50/24", "192.168.1.1"))
wlan.ipconfig(dns="192.168.1.1")
Statická konfigurace je křehká (dvě zařízení omylem dostanou stejnou adresu a vznikne konflikt). Sáhněte po výchozím DHCP, pokud se neobjeví konkrétní důvod jej obejít.
Jakmile kamera má IP adresu, připojila se k internetu (nebo alespoň k jeho části tvořené místní sítí). Ostatní zařízení jí nyní mohou adresovat pakety podle této adresy a ona může adresovat pakety jim.
9.5.4. Síťová maska a /24¶
/24 na konci adresy ve výše uvedeném statickém příkladu je síťová maska. Samotná IP adresa neříká, kde místní síť končí – 192.168.1.50 může být jedna z několika set adres v malé domácí síti, nebo jedna z tisíců ve větší. Síťová maska říká, jak velká část adresy pojmenovává síť a jak velká pojmenovává hostitele uvnitř ní.
/24 znamená „prvních 24 z 32 bitů pojmenovává síť; posledních 8 pojmenovává hostitele“. Pro 192.168.1.50/24 to rozděluje adresu na 192.168.1 pro síť a .50 pro hostitele, čímž zbývá prostor pro asi 254 zařízení v téže místní síti. /16 by ponechalo více bitů pro hostitelskou polovinu a vešlo by se do něj mnohem více zařízení v jedné síti; /30 by ponechalo jen dvě hostitelské adresy a vešel by se do něj spoj mezi dvěma body.
Síťová maska se také běžně zapisuje jako čtyřbajtové číslo v téže tečkové notaci jako adresa. /24 odpovídá 255.255.255.0 – každý bajt čtěte jako „všechny bity, které patří k síťové polovině“. Obě podoby jsou zaměnitelné; čtečka ipconfig() v další podsekci shodou okolností vrací čtyřbajtovou podobu.
Proč na tom rozdělení vůbec záleží – jak zařízení používá síťovou masku k rozhodnutí, zda je cíl v místní síti, nebo musí ven přes bránu, a proč většina domácích sítí skončí na /24 – se probírá v Privátní sítě a NAT.
9.5.5. Zpětné čtení adresy¶
Metoda ipconfig() bez argumentů vrací aktivní konfiguraci. Pohled addr4 vrací IP adresu a síťovou masku:
>>> wlan.ipconfig("addr4")
('192.168.1.50', '255.255.255.0')