9.5. Adrese IP¶
O adresă hardware deosebește un dispozitiv de celelalte de pe același cablu local sau celulă radio. Pentru acea sarcină este potrivită, dar este inutilă dincolo de segmentul local: un comutator din clădirea vecină nu poate dirija traficul după ea, deoarece mecanismul care permite unui comutator să învețe adresele MAC funcționează doar în interiorul unui singur segment.
Nivelul rețea rezolvă acest lucru cu un al doilea tip de adresă, independent de cablul în care este conectat un dispozitiv. Numele acestui tip de adresă este adresa de protocol internet, sau adresa IP, iar partea „protocol internet” denumește setul de reguli pe care fiecare gazdă de pe internet le respectă atunci când trimite sau retransmite o adresă. Internetul actual folosește în paralel două versiuni ale schemei de adresare – IPv4 (forma mai veche, încă dominantă în rețelele mici) și IPv6 (forma mai nouă, care o înlocuiește treptat).
9.5.1. Ce este o adresă IP¶
O adresă IP este un număr suficient de mare pentru a identifica în mod unic orice dispozitiv de pe internet. Se scrie într-o formă lizibilă pentru oameni, pe care o folosește restul secțiunii, dar în antetul pachetului este doar un întreg de dimensiune fixă.
Adresele IPv4 au o lungime de 32 de biți și se scriu sub forma a patru numere zecimale separate prin puncte, fiecare număr fiind un octet:
192.168.1.42 8.8.8.8 10.0.0.1
Treizeci și doi de biți oferă aproximativ patru miliarde de adrese posibile, ceea ce părea mai mult decât suficient când IPv4 a fost proiectat în anii 1970 și nu mai era suficient pe la începutul anilor 2010.
Adresele IPv6 au o lungime de 128 de biți și se scriu sub forma a opt grupuri de câte patru cifre hexazecimale separate prin două puncte:
2001:0db8:85a3:0000:0000:8a2e:0370:7334Șirurile de zerouri pot fi scurtate la
::, iar zerourile din față ale unui grup pot fi eliminate, așa că adresa de mai sus se scrie în mod normal2001:db8:85a3::8a2e:370:7334.
Cele două familii de adrese sunt în rest limbaje diferite; o gazdă IPv4 nu poate trimite direct un pachet către o gazdă IPv6 fără ajutorul unui gateway. Modulele network și socket ale camerei le acceptă pe ambele. Acest tutorial folosește IPv4 în exemple deoarece majoritatea rețelelor locale la care se va conecta camera sunt încă exclusiv IPv4, dar tot ceea ce urmează funcționează exact la fel pentru IPv6 odată ce adresele sunt înlocuite.
9.5.2. La ce folosește o adresă IP¶
Adresa IP spune cărei gazde de pe internet îi este destinat un pachet. Un router care nu știe cum să ajungă direct la o destinație știe că probabil un alt router știe și îi retransmite pachetul acolo. Pachetul sare de la un router la altul, fiecare puțin mai aproape de destinație, până când un router care se află pe segmentul local al destinației efectuează ultimul salt.
Acest comportament salt cu salt este ceea ce face ca internetul să funcționeze ca o singură mare rețea, nu ca multe insule mici. Pagina următoare tratează modul în care sunt alese salturile; aceasta este doar despre adresă.
9.5.3. Cum obține o cameră o adresă¶
O cameră care tocmai s-a conectat la o rețea Wi-Fi are nevoie de o adresă IP înainte de a putea comunica cu ceva. Există două moduri obișnuite prin care se poate întâmpla acest lucru.
Primul este atribuirea automată. Camera cere o adresă rețelei locale; dispozitivul care distribuie una este routerul – cutia care conectează rețeaua locală la internetul mai larg. În majoritatea configurațiilor de acasă și de birou mic, aceeași cutie fizică acționează și ca un comutator în care se conectează dispozitivele cablate și ca punct de acces Wi-Fi cu care se asociază cele wireless, așa că „routerul”, „comutatorul” și „punctul de acces” pot fi toate aceeași piesă de hardware. Routerul rulează un mic serviciu numit DHCP (Dynamic Host Configuration Protocol), care menține un pool de adrese disponibile, alege una pentru fiecare dispozitiv nou sosit și o închiriază pentru un timp fix. Cât timp se ocupă de asta, routerul oferă camerei și câteva alte informații utile de configurare:
adresa către care se trimite traficul de ieșire atunci când destinația este în afara rețelei locale (gateway-ul implicit, care este propria adresă a routerului); și
adresele unuia sau mai multor servere de nume care transformă nume lizibile pentru oameni precum
example.comîn adrese IP. Serviciul de căutare a numelor se numește DNS, Domain Name System, iar Nume și DNS îl tratează în detaliu.
Toate acestea se întâmplă automat în timp ce legătura se ridică. Camera nu trebuie să ceară explicit nimic din toate acestea; în momentul în care isconnected() returnează True în exemplul de pe pagina anterioară, camera deja are adresa, gateway-ul și serverele sale de nume.
A doua opțiune este configurarea statică. Unele instalații vor o adresă cunoscută pentru cameră, astfel încât alte dispozitive să o poată contacta fără a o căuta mai întâi. Metoda ipconfig() setează manual adresa, gateway-ul și serverul de nume:
wlan.ipconfig(addr4=("192.168.1.50/24", "192.168.1.1"))
wlan.ipconfig(dns="192.168.1.1")
Configurarea statică este fragilă (două dispozitive cărora li se atribuie din greșeală aceeași adresă intră în conflict). Apelează la valoarea implicită DHCP, cu excepția cazului în care apare un motiv specific de a o suprascrie.
Odată ce camera are o adresă IP, ea s-a alăturat internetului (sau cel puțin porțiunii din el a rețelei locale). Alte dispozitive îi pot adresa acum pachete prin acea adresă, iar ea le poate adresa pachete lor.
9.5.4. Masca de rețea și /24¶
/24 de la sfârșitul adresei din exemplul static de mai sus este masca de rețea. O adresă IP singură nu spune unde se termină rețeaua locală – 192.168.1.50 ar putea fi una dintre câteva sute de adrese ale unei mici rețele de acasă sau una dintre mii ale uneia mai mari. Masca de rețea spune cât din adresă denumește rețeaua și cât denumește gazda din interiorul ei.
/24 înseamnă „primii 24 din cei 32 de biți denumesc rețeaua; ultimii 8 denumesc gazda”. Pentru 192.168.1.50/24 aceasta împarte adresa în 192.168.1 pentru rețea și .50 pentru gazdă, lăsând loc pentru aproximativ 254 de dispozitive pe aceeași rețea locală. /16 ar lăsa mai mulți biți pentru jumătatea de gazdă și ar găzdui mult mai multe dispozitive pe o rețea; /30 ar lăsa doar două adrese de gazdă și ar găzdui o legătură punct-la-punct.
Masca de rețea se scrie de asemenea în mod obișnuit ca un număr de patru octeți în aceeași notație cu puncte ca și adresa. /24 este echivalent cu 255.255.255.0 – citește fiecare octet drept „toți biții care aparțin jumătății de rețea”. Cele două forme sunt interschimbabile; cititorul ipconfig() din subsecțiunea următoare returnează forma de patru octeți.
De ce contează deloc împărțirea – cum folosește un dispozitiv masca de rețea pentru a decide dacă o destinație se află pe rețeaua locală sau trebuie să iasă prin gateway și de ce majoritatea rețelelor de acasă ajung la /24 – este tratat în Rețele private și NAT.
9.5.5. Citirea înapoi a adresei¶
Metoda ipconfig() fără argumente returnează configurația activă. Vizualizarea addr4 returnează adresa IP și masca de rețea:
>>> wlan.ipconfig("addr4")
('192.168.1.50', '255.255.255.0')