9.6. Pakiety i trasowanie¶
Adres IP mówi, dla kogo przeznaczona jest wiadomość. Mechanizm, który faktycznie ją dostarcza, nazywa się trasowaniem (routingiem) i jest to proces przeskok po przeskoku, w którym pakiet wędruje z sieci lokalnej nadawcy do sieci lokalnej odbiorcy, być może bardzo odległej.
9.6.1. Pakiet w skrócie¶
Pakiet to jednostka pracy warstwy IP – porcja bajtów z niewielkim nagłówkiem i ładunkiem. Nagłówek ma dwa pola istotne dla trasowania:
Adres IP źródłowy (skąd pakiet pochodzi).
Adres IP docelowy (dokąd zmierza).
Ładunek to wszystko, co warstwa transportowa poprosiła warstwę sieciową o dostarczenie. Nagłówek pakietu zawiera również licznik time-to-live, sumę kontrolną nagłówka oraz kilka flag sterujących. Żadnego z tych elementów kod Pythona kamery nie dotyka bezpośrednio.
Pakiety nie obiecują niczego ponad „próbowaliśmy” – mogą zostać zgubione, zduplikowane lub dostarczone w niewłaściwej kolejności. Niezawodność i kolejność to problemy rozwiązywane przez wyższą warstwę transportową; warstwa sieciowa po prostu robi, co w jej mocy, by przekazać każdy pakiet w stronę celu.
9.6.2. Przeskok po przeskoku¶
Pakiet opuszcza kamerę i trafia do pierwszego urządzenia, które nie znajduje się w lokalnym segmencie kamery: bramy domyślnej. (Poprzednia strona wspominała o tym, że DHCP przekazuje kamerze adres bramy, gdy sieć się uruchamia.) Tym urządzeniem jest router – urządzenie, którego zadaniem jest odbieranie pakietów, sprawdzanie ich celu i przekazywanie ich dalej.
Pakiet z kamery do celu przeskakuje między routerami, z których każdy jest o krok bliżej.¶
Router ma tablicę trasowania – listę zapisów „dla celów pasujących do tego wzorca wyślij pakiet przez ten interfejs”. Dla celów w tej samej sieci co kamera wpis mówi „odeślij go z powrotem przez kabel, którym przyszedł”. Dla celów w szerszym internecie wpis mówi „wyślij go do routera nadrzędnego”. Dla znanych wzorców celów (firmowy VPN, sieć konkretnego partnera biznesowego, łącze satelitarne) router może mieć bardziej szczegółowy wpis, który nadpisuje domyślny.
Router nadrzędny robi to samo. I następny. I następny. Każdy przeskok ma ten sam kształt: odebrać pakiet, wyszukać cel w tablicy, wysłać go przez właściwy interfejs. Ostatecznie pakiet dociera do routera, który jest w tym samym lokalnym segmencie co docelowy adres IP. Ten router dostarcza ostatni przeskok, cel odbiera pakiet i podróż się kończy.
9.6.3. Punkty końcowe nie znają trasy¶
Kamera wysyłająca pakiet do odległego serwera nie wie, jak pakiet tam dotrze. Zna jedynie docelowy adres IP oraz adres własnej bramy domyślnej. Wszystko, co pomiędzy – które routery, które światłowody, które kable podmorskie – to coś, co routery na trasie ustalają w trakcie, na podstawie własnych tablic. Same routery znają tylko swoich bezpośrednich sąsiadów oraz przybliżony kierunek typowych celów; żadne pojedyncze urządzenie w internecie nie ma jego pełnej mapy.
Ta decentralizacja jest powodem, dla którego sieć działa nadal, gdy poszczególne ścieżki zawodzą. Przerwany kabel gdzieś pośrodku staje się zdarzeniem ponownego trasowania na kilku routerach; punkty końcowe niczego nie zauważają. To również powód, dla którego pakiet z kamery w Tokio do serwera w Dublinie może dotrzeć bez wiedzy żadnej ze stron, jakie kraje leżą pomiędzy nimi.
9.6.4. Co to oznacza dla skryptu w Pythonie¶
Zadanie kamery w warstwie sieciowej sprowadza się do:
Posiadania adresu IP.
Znajomości adresu bramy domyślnej (DHCP wypełnia to automatycznie).
Przekazywania pakietów wychodzących, zaadresowanych do dowolnego IP, tej bramie i zaufania reszcie ścieżki.
Skrypt nigdy nie wybiera trasy, nigdy nie nazywa pośredniego przeskoku i nigdy nie widzi routerów pośrodku. Zapisuje docelowy adres IP na pakiecie, a warstwa sieciowa przejmuje resztę. Z punktu widzenia skryptu w Pythonie całe trasowanie to po prostu właściwość sieci, do której dołączyła kamera – „brama wysyła pakiety gdzieś, gdzie jest to dla mnie użyteczne”.
Warstwa transportowa, która następuje dalej, zakłada, że trasowanie po prostu działa, i buduje na tym niezawodność, kolejność oraz adresowanie program-do-programu.