9.5. Adresy IP

Adres sprzętowy wyróżnia urządzenie spośród innych podłączonych do tego samego lokalnego kabla lub komórki radiowej. Do tego zadania nadaje się dobrze, ale jest bezużyteczny poza lokalnym segmentem: przełącznik w sąsiednim budynku nie potrafi na jego podstawie trasować, ponieważ podstawowy mechanizm pozwalający przełącznikowi uczyć się adresów MAC działa tylko w obrębie jednego segmentu.

Warstwa sieciowa rozwiązuje to za pomocą drugiego rodzaju adresu, niezależnego od tego, do którego kabla podłączone jest urządzenie. Nazwa tego rodzaju adresu to adres protokołu internetowego, czyli adres IP, a człon „protokół internetowy” określa zestaw reguł, których przestrzega każdy host w internecie, gdy wysyła lub przekazuje dalej taki adres. Obecny internet używa równolegle dwóch wersji schematu adresowania – IPv4 (starszej formy, wciąż dominującej w małych sieciach) oraz IPv6 (nowszej formy, powoli ją zastępującej).

9.5.1. Czym jest adres IP

Adres IP to liczba na tyle duża, by jednoznacznie zidentyfikować dowolne urządzenie w internecie. Zapisuje się ją w czytelnej dla człowieka formie, używanej w dalszej części tej sekcji, ale w nagłówku pakietu jest to po prostu liczba całkowita o stałym rozmiarze.

  • Adresy IPv4 mają długość 32 bitów i zapisuje się je jako cztery liczby dziesiętne oddzielone kropkami, gdzie każda liczba to jeden bajt:

    192.168.1.42
    8.8.8.8
    10.0.0.1
    

    Trzydzieści dwa bity dają około czterech miliardów możliwych adresów, co brzmiało jak mnóstwo, gdy projektowano IPv4 w latach 70., a okazało się niewystarczające na początku lat 2010.

  • Adresy IPv6 mają długość 128 bitów i zapisuje się je jako osiem grup po cztery cyfry szesnastkowe oddzielone dwukropkami:

    2001:0db8:85a3:0000:0000:8a2e:0370:7334
    

    Ciągi zer można skrócić do ::, a wiodące zera w grupie można pominąć, więc powyższy adres zwykle zapisuje się jako 2001:db8:85a3::8a2e:370:7334.

Poza tym obie rodziny adresów to różne języki; host IPv4 nie może bezpośrednio wysłać pakietu do hosta IPv6 bez pomocy bramy. Moduły network i socket kamery obsługują obie. W tym samouczku przykłady używają IPv4, ponieważ większość sieci lokalnych, do których dołączy kamera, wciąż obsługuje tylko IPv4, ale wszystko, co następuje, działa dokładnie tak samo dla IPv6 po podmianie adresów.

9.5.2. Do czego służy adres IP

Adres IP mówi, dla którego hosta w internecie przeznaczony jest pakiet. Router, który nie wie, jak dotrzeć bezpośrednio do celu, wie, że prawdopodobnie wie to jakiś inny router, i przekazuje tam pakiet. Pakiet przeskakuje między routerami, z których każdy jest nieco bliżej celu, aż router, który jest w lokalnym segmencie celu, dostarcza ostatni przeskok.

To zachowanie przeskok po przeskoku sprawia, że internet działa jako jedna wielka sieć, a nie wiele małych wysp. Następna strona opisuje, jak wybierane są przeskoki; ta dotyczy wyłącznie adresu.

9.5.3. Jak kamera go uzyskuje

Kamera, która właśnie dołączyła do sieci Wi-Fi, potrzebuje adresu IP, zanim będzie mogła z czymkolwiek się komunikować. Są na to dwa typowe sposoby.

Pierwszy to przydzielanie automatyczne. Kamera prosi sieć lokalną o adres; urządzeniem, które go przydziela, jest router – urządzenie łączące sieć lokalną z szerszym internetem. W większości konfiguracji domowych i małych biur to samo fizyczne urządzenie pełni również rolę przełącznika, do którego podłączane są urządzenia przewodowe, oraz punktu dostępowego Wi-Fi, z którym łączą się urządzenia bezprzewodowe, więc „router”, „przełącznik” i „punkt dostępowy” mogą być tym samym sprzętem. Router uruchamia niewielką usługę o nazwie DHCP (Dynamic Host Configuration Protocol), która utrzymuje pulę dostępnych adresów, wybiera jeden dla każdego nowo przybyłego urządzenia i dzierżawi go na określony czas. Przy okazji router przekazuje kamerze jeszcze kilka innych przydatnych elementów konfiguracji:

  • adres, na który należy wysyłać ruch wychodzący, gdy cel znajduje się poza siecią lokalną (brama domyślna, czyli własny adres routera); oraz

  • adresy jednego lub kilku serwerów nazw, które zamieniają czytelne dla człowieka nazwy, takie jak example.com, na adresy IP. Usługa wyszukiwania nazw nazywa się DNS (Domain Name System), a Nazwy i DNS omawia ją szczegółowo.

Wszystko to dzieje się automatycznie podczas zestawiania połączenia. Kamera nie musi o nic z tego prosić jawnie; w chwili, gdy isconnected() zwróci True w przykładzie z poprzedniej strony, kamera ma już swój adres, swoją bramę i swoje serwery nazw.

Druga opcja to konfiguracja statyczna. Niektóre wdrożenia wymagają znanego adresu kamery, aby inne urządzenia mogły do niej dotrzeć bez wcześniejszego wyszukiwania. Metoda ipconfig() ustawia adres, bramę i serwer nazw ręcznie:

wlan.ipconfig(addr4=("192.168.1.50/24", "192.168.1.1"))
wlan.ipconfig(dns="192.168.1.1")

Konfiguracja statyczna jest podatna na błędy (dwa urządzenia przypadkowo otrzymujące ten sam adres powodują konflikt). Sięgaj po domyślne DHCP, chyba że pojawi się konkretny powód, by je nadpisać.

Gdy kamera ma już adres IP, dołączyła do internetu (a przynajmniej do jego lokalnego fragmentu). Inne urządzenia mogą teraz adresować do niej pakiety po tym adresie, a ona może adresować pakiety do nich.

9.5.4. Maska sieci i /24

/24 na końcu adresu w powyższym przykładzie statycznym to maska sieci. Sam adres IP nie mówi, gdzie kończy się sieć lokalna – 192.168.1.50 może być jednym z kilkuset adresów w małej sieci domowej albo jednym z tysięcy w większej. Maska sieci określa, jaka część adresu nazywa sieć, a jaka host w jej obrębie.

/24 oznacza „pierwsze 24 z 32 bitów nazywają sieć; ostatnie 8 nazywa host”. Dla 192.168.1.50/24 dzieli to adres na 192.168.1 dla sieci i .50 dla hosta, pozostawiając miejsce na około 254 urządzenia w tej samej sieci lokalnej. /16 pozostawiłoby więcej bitów dla części hosta i pomieściło znacznie więcej urządzeń w jednej sieci; /30 pozostawiłoby tylko dwa adresy hostów i pomieściło połączenie punkt-punkt.

Maskę sieci często zapisuje się również jako czterobajtową liczbę w tej samej notacji z kropkami co adres. /24 odpowiada 255.255.255.0 – każdy bajt czyta się jako „wszystkie bity należące do części sieciowej”. Obie formy są wymienne; czytnik ipconfig() w następnym podrozdziale akurat zwraca formę czterobajtową.

Dlaczego ten podział w ogóle ma znaczenie – jak urządzenie używa maski sieci, by zdecydować, czy cel znajduje się w sieci lokalnej, czy musi wyjść przez bramę, oraz dlaczego większość sieci domowych ląduje na /24 – jest omówione w Sieci prywatne i NAT.

9.5.5. Odczytywanie adresu

Metoda ipconfig() bez argumentów zwraca aktywną konfigurację. Widok addr4 zwraca adres IP i maskę sieci:

>>> wlan.ipconfig("addr4")
('192.168.1.50', '255.255.255.0')