Artykuł tłumaczy podstawy sieci komputerowych. Skupia się na rozumieniu stosowanych technologii, a nie surowej wiedzy. Napisany jest przez praktyka z branży telekomunikacyjnej. Zaczyna się niewinnie, jednak poziom trudności szybko rośnie. Miłej lektury.
1. IP (INTERNET PROTOCOL)
IP zgodnie z nazwą jest protokołem. W sieciach słowo „protokół” można spotkać na każdym kroku. Protokół to pewien standard, precyzyjnie opisany, szczegółowo określający jak dane rozwiązanie ma działać.
Komputery w Internecie (i nie tylko) komunikują się za pomocą adresów IP. Poza komputerami adresy IP przypisane są też innym urządzeniom: serwerom, drukarkom, telewizorom, telefonom, routerom. Do określenia dowolnego urządzenia z adresem IP używamy pojęcia „host”. Mówimy np. „host 192.168.1.102 nie odpowiada na ping” (nie interesuje nas czy to komputer, czy drukarka).
Komunikaty wysyłane między hostami są to pakiety danych. Pakiety są różnej wielkości. Zwykle przesłanie jakiejś treści, np. całej strony WWW wymaga przesłania wielu pakietów.
Sieć IP to zbiór hostów, które mogą się ze sobą komunikować. Przykładowo jak połączymy 2 komputery skrętką to mamy własną sieć IP złożoną z 2 hostów. Sieci dzielimy na publiczną (globalną) i prywatne. Nasza sieć 2 komputerowa jest siecią prywatną. Publiczna jest tylko jedna – Internet. Podobnie adresy IP dzielimy na publiczne (globalne) i prywatne.
Zadanie 1a: jaka jest różnica między routerem a switchem? Odpowiedz na podstawie własnej wiedzy, przed lekturą niniejszego artykułu.
2. ADRES IP, MASKA PODSIECI
Przykłady adresów IP:
192.168.1.100
FE80:0000:0000:0000:0202:B3FF:FE1E:8329
Pierwszy to adres IP wersji 4, która jest powszechnie używana, natomiast drugi to adres IP wersji 6, która jest stopniowo wdrażana. Wszystko co napisałem powyżej dotyczy obu wersji, jednak w dalszej części artykułu skupię się na IPv4.
Adres IPv4 składa się z 4 części rozdzielonych kropkami. Każda z części może zawierać liczbę od 0 do 255, czyli tyle co 1 bajt = 8 bitów = tzw. oktet (octo to po łacińsku osiem). Od teraz części te będę nazywał oktetami. Przykładowo drugi oktet z adresu IP powyżej równa się 168.
Podsieć IP to zbiór hostów, które mogą się bezpośrednio komunikować (dokładniej zbiór adresów IP, które takim hostom można przypisać). Różne podsieci można łączyć ze sobą za pomocą routerów, ale o tym później. Podsieć określa zakres adresów „od … do …”.
Maska podsieci określa ile adresów liczy nasza podsieć. Wszystkich możliwych masek jest 33, ale ze względu na dość skomplikowane zasady obliczania adresów, w tym rozdziale wymienię 5 podstawowych:
255.255.255.255 (1 adres)
255.255.255.0 (256 adresów)
255.255.0.0 (256*256 = 65536 adresów)
255.0.0.0 (256*256*256 = 16777216 adresów)
0.0.0.0 (256*256*256*256 = 4294967296 adresów)
Niewymienione wyżej maski nazwę roboczo maskami „pośrednimi”. Przykładowa maska pośrednia to „255.255.240.0”. Szerzej opiszę je później.
Przypisując adres IP hostowi zawsze ustawiamy też maskę podsieci związaną z tym adresem IP. Dopiero komplet danych: IP + maska daje nam informację w jakiej podsieci jest host, czyli z kim może się komunikować bez pośrednictwa routerów. Adres IP rozdziela się od maski znakiem „/”. Piszemy: adres IP / maska. Przykłady:
192.168.1.100 / 255.255.255.0
10.1.2.140 / 255.255.0.0
127.52.56.140 / 255.0.0.0
Aby wyliczyć podsieć znając adres IP i maskę podsieci należy spojrzeć na kolejne oktety maski. Jeśli przy oktecie maski jest 0 to zakres adresów przy tym oktecie wynosi 0 – 255. Jeśli natomiast przy oktecie maski jest 255 to przepisujemy liczbę z adresu IP.
Przykład:
Adres IP / maska: 11.22.33.44 / 255.255.0.0
Pierwszy oktet: maska ma 255, więc przepisujemy 11
Drugi oktet: maska ma 255, więc przepisujemy 22
Trzeci oktet: maska ma 0, więc piszemy 0 – 255
Czwarty oktet: maska ma 0, więc piszemy 0 – 255
Odpowiedź: zakres adresów tej podsieci to 11.22.0.0 – 11.22.255.255
Zadanie 2a: podaj zakres adresów podsieci, w której jest host o adresie:
a) 8.43.21.11 / 255.255.255.0
b) 192.168.1.101 / 255.255.0.0
c) 127.0.0.1 / 255.0.0.0
Jeśli chcemy wiedzieć czy 2 hosty mogą się ze sobą bezpośrednio komunikować to należy sprawdzić czy są w tej samej podsieci, czyli porównać zakresy adresów ich podsieci.
Host A – 192.168.1.100
Host B – 192.168.1.101
Host C – 192.168.2.100
Zadanie 2b: wymień hosty (spośród A,B,C), które mogą się bezpośrednio komunikować, dla maski:
a) 255.255.255.255
b) 255.255.255.0
c) 255.255.0.0
d) 255.0.0.0
e) 0.0.0.0
Wielu z was może kojarzyć adres IP podobny do 192.168.X.X. Jest to ustalony w standardach zakres prywatnych adresów, czyli taki, którego nie ma w publicznej sieci. Z tego powodu prawie każdy producent routera domowego domyślnie przyznaje te adresy dla sieci prywatnej. Często można je zmienić w ustawieniach routera, ale należy być ostrożnym – ryzykujemy konflikt z inną siecią. Przykładowo gdybyśmy przyznali naszej sieci domowej podsieć: 8.8.8.0 / 255.255.255.0 (zakres 8.8.8.0 – 8.8.8.255) i podłączyli się przez NAT do Internetu to nie połączylibyśmy się z niektórymi serwerami Google. Hosty naszej sieci prywatnej by ich szukały na miejscu, a nie w Internecie.
Standard IP zarezerwował kilka zakresów dla sieci prywatnych:
10.0.0.0 – 10.255.255.255 (16777216 adresów)
172.16.0.0 – 172.31.255.255 (1048576 adresów)
192.168.0.0 – 192.168.255.255 (65536 adresów)
Każdy pakiet IP zawiera m.in. adres źródłowy IP (kto wysłał pakiet) i adres docelowy IP (do kogo pakiet jest skierowany).
3. SKRACANIE ADRESÓW IP I MASEK
Często nie chce nam się pisać całego adresu i całej maski – można to skrócić.
Skracanie IP polega na pomijaniu środkowych oktetów, jeśli są tam zera. Skrócić można tylko jeśli trzeci oktet jest równy 0.
Przykłady (można sprawdzić poleceniem ping, np. „ping 10.1”):
10.1 = 10.0.0.1
10.1.99 = 10.1.0.99
192.168.1 = 192.168.0.1
Zadanie 3a: skróć adres IP i sprawdź poleceniem ping czy dobrze zrobiłeś:
a) 1.0.0.1
b) 1.1.0.1
c) 0.0.0.0
d) 10.0.3.230
Skracanie masek podsieci daje znacznie więcej. Powiedziane zostało, że wszystkich masek jest 33. Wystarczy zatem podać jedną liczbę, aby jednoznacznie wskazać maskę. Tak też się robi. Podstawowe 5 masek ma numery odpowiednio 32, 24, 16, 8, 0:
/32 = /255.255.255.255
/24 = /255.255.255.0 (typowa maska dla podsieci domowych)
/16 = /255.255.0.0
/8 = /255.0.0.0
/0 = /0.0.0.0
O ile nie trzeba, praktycznie nie używamy oktetowego zapisu maski (4 części rozdzielonych kropkami). Zapis skrócony nazywa się notacją CIDR.
4. ADRES SIECI, ADRES ROZGŁOSZENIOWY (BROADCASTOWY)
Każda podsieć zawiera dwa adresy, których nie można wykorzystać dla hostów. Są to:
– adres podsieci – najniższy adres w podsieci, np. 10.1.0.0, 192.168.1.0
– adres rozgłoszeniowy (broadcastowy) – najwyższy adres w podsieci, np. 10.1.255.255, 192.168.1.255
Jak nie trudno zauważyć, podając zakres adresów IP „od … do …”, podajemy właśnie adres podsieci oraz adres rozgłoszeniowy. O ile adres broadcastowy ma praktyczne zastosowanie – potrzebny jest do wysyłania pakietów do wszystkich hostów w podsieci jednocześnie, to adres podsieci – żadnego. Używa się go tylko do określenia o jaką podsieć chodzi, przykładowo piszemy:
192.168.1.0/24, gdy mówimy o podsieci 192.168.1.0 – 192.168.1.255
127.0.0.0/8, gdy mówimy o podsieci 127.0.0.0 – 127.255.255.255
Zgodnie z zadaniem nr 2a do określenia podsieci IP (czyli zakresu adresów IP) można podać: adres IP / maska (czyli zamiast 192.168.1.0/24 możemy napisać 192.168.1.55/24). Rzeczywiście tak, jednak przekażemy wtedy więcej informacji – poza samą podsiecią dodatkowo określimy hosta w tej podsieci. Prosta analogia:
Pytanie: W jakiej podsieci jest twój komputer?
Odpowiedź precyzyjna: 192.168.1.0/24
Odpowiedź z dodatkową informacją: 192.168.1.55/24
Pytanie: Przy jakiej ulicy mieszkasz?
Odpowiedź precyzyjna: Przy ul. Warszawskiej
Odpowiedź z dodatkową informacją: Przy ul. Warszawskiej 13
Wcześniej liczyliśmy zakres adresów znając hosta i maskę. Teraz zrobimy rzecz odwrotną: znajdziemy maskę znając adresy podsieci i rozgłoszeniowy.
Adres podsieci: 18.19.0.0
Adres rozgłoszeniowy: 18.19.0.255
Liczymy liczbę adresów w podsieci: 256
Z liczby adresów wynika maska: 255.255.255.0
Zapisujemy podsieć w notacji oktetowej: 18.19.0.0 / 255.255.255.0
Zapisujemy podsieć w notacji CIDR: 18.19.0.0 / 24
Zadanie 4a: zapisz podsieć w notacji CIDR dla zakresu adresów:
a) 91.0.0.0 – 91.0.255.255
b) 91.0.0.0 – 91.255.255.255
c) 0.0.0.0 – 255.255.255.255
d) 192.168.1.2 – 192.168.1.2
Zadanie 4b: podaj maskę podsieci w notacji oktetowej dla zakresu adresów z zadania 4a.
Adresu podsieci ani rozgłoszeniowego nie można przypisać hostom, dlatego liczba adresów dostępna dla hostów jest zawsze mniejsza o 2 od ogólnej liczby adresów w podsieci (nie licząc specyficznego przypadku maski /32). Należy to mieć na uwadze planując podsieci IP.
5. WARSTWY SIECI
Pakiety IP można przesyłać na różne sposoby: przez kabel (np. Ethernet), przez łącze radiowe, przez wirtualny tunel, przez ADSL+PPP. Jednak połączenie IP nie określa jakich technologii użyto do jego realizacji, znane są tylko adresy IP dwóch hostów, które się ze sobą łączą. Dzięki temu pisząc program nie trzeba nic wiedzieć o skomplikowanych technologiach przesyłu. Wynika to z podzielenia komunikacji sieciowej na tzw. warstwy: program każde przesłać pakiet pod wskazany adres IP, a system operacyjny się martwi co z nim zrobić, np. przekazać karcie sieciowej, która sama będzie się martwiła co z nim zrobić, np. nadać określony strumień bitów na kablu miedzianym. Warstwy wyglądają następująco (od najniższej do najwyższej):
1. Warstwa fizyczna – określa składniki sieci niezbędne do elektrycznego, optycznego lub radiowego wysyłania i odbierania sygnałów, takie jak napięcie elektryczne, parametry medium transmisyjnego (kabel miedziany, światłowód). Dla nas nieistotne.
2. Warstwa łącza danych – określa technologię przesyłania pakietów, jej szybkość, sposoby łączenia wielu urządzeń, sposoby adresowania urządzeń. Np. Ethernet, ATM, Wi-Fi.
3. Warstwa sieciowa – określa adresację i sposób kierowania pakietów w sieci globalnej. Obecnie standardem jest IPv4, ze stopniowym wdrażaniem IPv6, jednak istnieją inne rozwiązania. Np. w grze Starcraft (1998 r.) była możliwość gry multiplayer przez IPX. Warstwa sieciowa to pierwsza warstwa, której obsługa musi być zaimplementowana w programie.
4. Warstwa transportowa – np. TCP, UDP (dla IP), SPX (dla IPX). Warstwa daje programom spore możliwości, upraszczając obsługę połączenia. Np. wprowadza tzw. porty, dzięki którym programy otrzymują pakiety przeznaczone tylko dla nich (pakiety przychodzą na port powiązany z danym programem) lub umożliwia przesłanie danych z maksymalną prędkością i gwarancją poprawnego dostarczenia.
5-7. Warstwy wyższe: sesji, prezentacji i aplikacji. Dla nas nieistotne.
Gdy nie ma połączenia w warstwie niższej, to nie może go być warstwie wyższej. Przykład: jak fizycznie wypniemy kabel to nie może działać nam połączenie Ethernet. Jednak fakt, że mamy połączenie w warstwie niższej (np. mamy wpięty kabel i wszystkie jego żyły przewodzą poprawnie) to nie znaczy jeszcze, że będzie nam działało połączenie warstwy wyższej (Ethernet). Typowym przypadkiem tej zasady jest sytuacja, w której mamy sprawne połączenie w warstwie Ethernet, a nie działa nam połączenie IP (np. ze względu na nieprawidłową konfigurację podsieci IP).
Pakiety warstwy niższej zawierają w sobie pakiety warstwy wyższej. Inaczej mówimy, że pakiet warstwy niższej to pakiet warstwy wyższej z doklejonymi nagłówkami. Przykładowo jeśli BBB to jakiś pakiet IP, który chcemy przesłać przez Ethernet to wyślemy pakiet AABBB, gdzie AA to dane warstwy drugiej. Z kolei BBB, poza danymi IP, będzie zawierał w sobie dane TCP, itd. Czasami stosowane jest rozróżnienie, że w warstwie fizycznej przesyłany jest strumień bitów, warstwie drugiej tzw. ramki, w warstwie trzeciej pakiety, w warstwie transportowej segmenty (dla TCP) lub datagramy (dla UDP), a warstwach wyższych dane. Jest to pewne uproszczenie, bo w dokumentacjach standardów znajdziemy nazwy „pakiet IP” i „ramka IP” oraz „pakiet Ethernet” i „ramka Ethernet”, z których każde ma swoje znaczenie, ale jest ono bardzo praktyczne, w szczególności odróżnienie ramki (L2) od pakietu (L3) i będziemy je stosować w tym artykule.
Następne 3 rozdziały opowiedzą o warstwie drugiej, czyli łącza danych. Zarówno Ethernet, jak i WLAN mają dużo cech wspólnych, bo były tworzone z myślą o dużej kompatybilności. Przykładowo oba rozwiązania do adresowania urządzeń używają adresów MAC.
6. ADRES MAC
Adres MAC, inaczej zwany adresem fizycznym, to unikatowy adres przypisywany każdemu urządzeniu (np. karcie sieciowej) przez producenta. Urządzenia posiadające kilka portów mogą mieć przypisany osobny adres MAC dla każdego portu.
Ethernet i WLAN zapewniają komunikację między adresami MAC. Do komunikacji między urządzeniami nie jest konieczne połączenie IP – programy mogą po prostu obsługiwać komunikację w warstwie MAC. Można to zaobserwować łącząc się z Mikrotikiem, który nie ma ustawionego adresu IP. Mówimy wtedy o połączeniu w warstwie drugiej lub połączeniu przez MAC.
Adres MAC składa się z 6 bajtów i zapisywany jest w systemie szesnastkowym. Do rozdzielania bajtów używa się różnych znaków, stosuje się też różną wielkość liter, np.:
00-0A-E6-3E-FD-E1 (Windows)
00:0A:E6:3E:FD:E1 (Mikrotik)
00:0a:e6:3e:fd:e1 (Linux)
Na etykietach sprzętu można znaleźć adresy MAC jeszcze dziwniej zapisane.
Pierwsze 3 bajty adresu (00:0A:E6) określają producenta sprzętu, pozostałe 3 identyfikują dany egzemplarz urządzenia. Adres MAC nie może się powtórzyć. Producenta można łatwo sprawdzić za pomocą stosownych stron w Internecie.
Zadanie 6a: Kto jest producentem karty sieciowej o adresie fizycznym 00:0A:E6:3E:FD:E1?
Każda ramka MAC zawiera m.in. adres źródłowy MAC (kto wysłał ramkę) i adres docelowy MAC (do kogo ramka jest skierowana).
7. SWITCH / BRIDGE
Switch (przełącznik) to urządzenie, które posiada wiele portów Ethernet i pozwala łączyć ze sobą inne urządzenia. Switch pracuje w warstwie drugiej, decyduje o tym jak kierować ramki MAC do odbiorców. Bridge to pojęcie bardzo zbliżone. O switchu mówimy, kiedy mamy na myśli konkretne urządzenie (rozwiązanie sprzętowe), a o bridge’u gdy chodzi nam o samą funkcję kierowania ramek (może być realizowane programowo, np. między 2 kartami sieciowymi w komputerze). Można więc powiedzieć, że switch realizuje bridging. W praktyce często można tych pojęć używać zamiennie. Switch/bridge ma znacznie większe możliwości niż opisane: może filtrować ramki, wyłączać niektóre porty, tworzyć połączenia zapasowe. Jednak zasadnicza funkcja to kierowanie ramek do odbiorcy.
Switch, po włączeniu, nie wie nic na temat sieci. Wszystkie porty jakie ma niczym się od siebie nie różnią. Gdy otrzyma ramkę z jednego portu, wysyła go na wszystkie pozostałe. Zapisuje sobie jednak źródłowy adres MAC tej ramki i port z jakiego przyszedł, żeby ramkę powrotną wysłać tylko na ten port. Po krótkim czasie switch będzie znał lokalizację wszystkich MAC-ów w sieci (pod warunkiem, że odebrał ramkę od danego MAC-a). Metoda ta nazywa się uczeniem MAC-ów (MAC learning).
W pewnym momencie jakieś urządzenie może zmienić swoją lokalizację lub zostać wyłączone. Jeśli urządzenie wyśle ramkę z nowej lokalizacji to informacje w switchu są od razu aktualizowane, czyli zmieniony jest port dla danego MAC-a. Aby nie zaśmiecać pamięci switcha nieaktualnymi danymi po upływie pewnego czasu określanego jako „timeout” (zwykle 5 min) wpis z jego MAC-iem jest usuwany. Zbiór adresów MAC oraz powiązanych z nimi portów nazywa się tablicą MAC, czyli bazą informacji na jaki port wysłać ramkę zależnie od docelowego adresu MAC. Inne nazwy tej tablicy to FDB (Forwarding DataBase), FIB (Forwarding Information Base), forwarding table, CAM table (CAM to rodzaj pamięci często używany do implementacji tablicy MAC). Tablice te mają ograniczoną pojemność, a gdy zostanie ona przekroczona to niektóre wpisy są usuwane. W takiej sytuacji ramki ponownie mogą iść na wszystkie porty i niepotrzebnie obciążać sieć. Aby temu zapobiec należy dobierać switche odpowiednie do wielkości sieci. Część switchy pozwala na wyłączenie MAC learning oraz dodawanie statycznych wpisów do tablicy MAC.
Przykładowa tablica MAC:
AA:AA:AA:AA:AA:AA – port 1
BB:BB:BB:BB:BB:BB – port 2
CC:CC:CC:CC:CC:CC – port 2
Taka tablica jest utworzona przez MAC learing po otrzymaniu przez switch ramki od AA na porcie nr 1 oraz ramek od BB i CC na porcie nr 2.
Zadanie 7a: podaj tablicę MAC switcha, który otrzymał następujące ramki:
1. Port źródłowy 1, MAC źródłowy AA:AA:AA:AA:AA:AA, MAC docelowy BB:BB:BB:BB:BB:BB
2. Port źródłowy 5, MAC źródłowy BB:BB:BB:BB:BB:BB, MAC docelowy AA:AA:AA:AA:AA:AA
3. Port źródłowy 7, MAC źródłowy CC:CC:CC:CC:CC:CC, MAC docelowy AA:AA:AA:AA:AA:AA
4. Port źródłowy 8, MAC źródłowy DD:DD:DD:DD:DD:DD, MAC docelowy EE:EE:EE:EE:EE:EE
5. Port źródłowy 1, MAC źródłowy BB:BB:BB:BB:BB:BB, MAC docelowy CC:CC:CC:CC:CC:CC
6. Port źródłowy 7, MAC źródłowy CC:CC:CC:CC:CC:CC, MAC docelowy BB:BB:BB:BB:BB:BB
Które z tych ramek były wysłane na wszystkie porty (poza źródłowym) zakładając, że switch został dopiero włączony?
Zadanie 7b: co się stanie, gdy zrobimy pętlę w switchu (lub kilku połączonych ze sobą) i dlaczego?
Ramka wysyłana do 1 odbiorcy to tzw. unicast. Możliwe jest wysyłanie ramki do wielu odbiorów (multicast) lub wszystkich odbiorów (broadcast). Ramka broadcastowa ma adres MAC docelowy FF:FF:FF:FF:FF:FF i jest zawsze wysyłana na wszystkie porty switcha. Serię ramek tego typu nazywamy ruchem broadcastowym, a obszar sieci, do którego docierają takie pakiety nazywany jest domeną broadcastową.
Ramki mogą dotrzeć tylko w obrębie sieci warstwy drugiej, nie przejdą przez urządzenie warstwy trzeciej. W szczególności ruch broadcastowy nie przejdzie przez router, dlatego często mówi się, że routery ograniczają domenę broadcastową, czyniąc sieć wydajniejszą.
Typowym ruchem broadcastowym w sieci L2 są pakiety ARP.
8. ARP (ADDRESS RESOLUTION PROTOCOL)
Gdy mamy funkcjonującą sieć Ethernet, czyli działają połączenia w warstwie MAC można zestawić połączenie IP. Hosty, które chcą się połączyć muszą mieć przypisane adresy IP z tej samej podsieci. Gdy system operacyjny otrzyma od programu pakiet IP do wysłania, musi zdecydować na jaki adres MAC go wysłać. Przy tej decyzji korzysta z protokołu ARP.
Załóżmy, że mamy 2 hosty:
Host A, IP 192.168.0.1/24 oraz MAC AA:AA:AA:AA:AA:AA
Host B, IP 192.168.0.2/24 oraz MAC BB:BB:BB:BB:BB:BB
Host A chce wysłać pakiet IP do hosta B. Przed wysłaniem pakietu IP wysyła pakiet ARP na adres broadcastowy MAC (FF:FF:FF:FF:FF:FF), czyli do każdego urządzenia w sieci z pytaniem: „Kto ma adres IP 192.168.0.2?”. Pakiet ten nazywa się żądaniem ARP (ARP Request). Hosty, które nie mają tego adresu pytanie zignorują. Host B odpowie (ARP Reply): „Ja mam!”. Odpowiedź wyśle bezpośrednio do hosta A, czyli na MAC AA:AA:AA:AA:AA:AA. W odpowiedzi umieści swój adres źródłowy MAC (BB:BB:BB:BB:BB:BB). W ten sposób host A poznał adres MAC hosta B i odwrotnie. Zajęło to trochę czasu, ale tylko raz. Teraz komunikacja będzie się odbywać bez używania niewydajnego broadcastu. Niewydajnego, bo docierającego do wszystkich zakątków sieci, również tych, gdzie połączenie radiowe z trudem wyciąga kilka Mb/s. Konieczność wysłania zapytania ARP wyjaśnia czemu pingując pewnego hosta w podsieci, pierwszy ping trwa dłużej niż pozostałe.
Informację o związku IP z MAC nazywamy wpisem ARP. Listę takich wpisów utrzymuje system operacyjny i można je zobaczyć wpisując komendę „arp -a” (pod Linuxem i pod Windowsem). Do tej listy można też dodać wpis ręcznie (tzw. statyczny wpis ARP) i wtedy system nie będzie wysyłał zapytań ARP.
9. DHCP (DYNAMIC HOST CONFIGURATION PROTOCOL)
Ręczne ustawianie adresów IP często jest bardzo niewygodne. Wyobraźcie sobie pewną sieć Wi-Fi, dla której po połączeniu musicie przeczytać karteczkę od dostawcy i w ustawić odpowiedni dla was adres IP, maskę, bramkę i DNS. Kiedyś w sieciach osiedlowych tak właśnie było, każdy abonent miał swoje IP, które musiał ręcznie ustawić na komputerze.
Aby tego uniknąć stosuje się protokół przyznawania adresów DHCP. Dla działania DHCP konieczne jest prawidłowe połączenie w warstwie MAC. Host, który przyznaje adresy IP to serwer DHCP. Host, który nie zna swojego adresu IP i chce go otrzymać z sieci nazywa się klientem DHCP (ma tzw. dynamiczne IP lub automatyczną konfigurację IP).
Gdy host, który jest klientem DHCP połączy się z siecią, wysyła zapytanie na adres broadcastowy MAC (FF:FF:FF:FF:FF:FF): „Kto mi da IP?”. Na to zapytanie serwer odpowiada na adres MAC pytającego: „A masz 192.168.1.100/24, brama 192.168.1.1, DNS 192.168.1.1”.
Komunikacje przedstawiłem w dużym uproszczeniu, ale wystarczy, żeby wiedzieć do czego jest DHCP.
Klient wysyłając zapytanie oczywiście przekazuje swój adres MAC. Serwer może przechowywać listę powiązań (adres MAC – adres IP) i na jej podstawie przyznawać odpowiednie adresy IP. Może też mieć określoną pulę adresów dynamicznych i przyznawać pierwszy wolny z tej puli. Aby ustalić czy dany adres znów jest wolny serwer stosuje timeout (jak w switchach i tablicach MAC, tyle że znacznie dłuższy) i odpytuje hosty czy nadal korzystają z adresu.
Każdy router domowy ma serwer DHCP po stronie sieci wewnętrznej (prywatnej) i przyznaje IP z puli dynamicznej. Wiele routerów pozwala też ustawić powiązania (adres MAC – adres IP), czyli dodać statyczne wpisy DHCP.
W przypadku zmiany wpisów DHCP i restarcie serwera DHCP należy pobrać IP na nowo. W Windowsie robi się to na różne sposoby:
– restart komputera (gdy klient nie ogarnia lub ma Vistę/Win8)
– restart (wyłącz/włącz) na Połączeniu lokalnym (gdy ogarnia i ma Win7)
– „Napraw” na połączeniu lokalnym (gdy ogarnia i ma WinXP)
– komendami „ipconfig /release” i „ipconfig /renew” (gdy niewskazane jest nawet chwilowe rozłączenie połączenia Ethernet)
W przypadku routera zwykle robimy restart (wyłącz/włącz) routera. Większość routerów umożliwia przez stronę (zwykle Status) zwolnienie obecnego adresu (Release) i pobranie nowego (Renew).
W związku z tym, że zapytanie o serwer DHCP jest wysyłane na adres broadcastowy MAC i nie zawiera adresu docelowego IP to zasięg DHCP ogranicza się do sieci warstwy drugiej (Ethernet / Wi-Fi) – przez router nie przejdzie (przynajmniej bez specjalnego proxy).
Czasem klient dzwoni do nas z pytaniem: „Czy ja mam statyczny adres IP?”. Skąd mam wiedzieć? Może niech się spyta czy nosi czarne skarpetki. On sam ustawia na swoim hoście czy chce korzystać z DHCP, czy też wprowadza IP statycznie. Odradzamy każdemu korzystanie ze statycznych IP, bo w przyszłości może się zdarzyć, że zmienimy klientom adresy. Po chwili niezrozumienia klient zmienia pytanie na „Czy ja mam stałe IP?”. Wciąż nie wiedząc o co mu chodzi odpowiadam precyzyjnie: „Tak, ma pan stałe, dynamiczne, prywatne IP”. Stałe, bo po restarcie routera nie zmienia się jak w Neostradzie. Dynamiczne, bo przyznawane przez DHCP. Prywatne, bo standardowo każdemu klientowi dajemy prywatne, żeby nie marnować ograniczonej puli publicznych. Zwykle klientowi chodzi o przyznanie publicznego IP.
10. ROUTING – POŁĄCZENIE KILKU PODSIECI IP
Gdy nasz host ma przypisany adres IP 192.168.0.5/24 to wie, że inne hosty z puli 192.168.0.0 – 192.168.0.255 są dostępne lokalnie i może się z nimi komunikować z użyciem wcześniej opisanych technik (MAC, ARP). Jednak nie wszystkie hosty znajdują się w naszej sieci lokalnej. Aby zapewnić komunikację ze wszystkimi adresami w Internecie nasz host ma skonfigurowane informacje gdzie wysłać pakiet, w zależności od docelowego adresu IP. Ustawienia te nazywają się tablicą routingu, która składa się z wpisów z docelowymi podsieciami IP, zwanych trasami routingu. Przykładowa tablica routingu:
1. 192.168.0.0/24 – przez interfejs Ethernet1
2. 10.0.0.0/24 – przez interfejs Ethernet2
3. 10.1.0.0/16 – przez interfejs WLAN1
4. 10.2.0.0/16 – przez hosta 10.1.0.254
5. 10.3.0.0/16 – przez interfejs Ethernet2
6. 0.0.0.0/0 – przez hosta 10.0.0.1
Gdy host będzie chciał wysłać pakiet do danego adresu IP to przeszuka tablicę routingu i podejmie decyzję, gdzie go przekazać. Dla każdego pakietu host przegląda tablicę od góry do dołu i sprawdza czy docelowy adres IP jest z podsieci widniejącej przy kolejnych trasach. Przykłady:
host docelowy 192.168.0.105 – pasuje do trasy 1, przekaż karcie Ethernet1
host docelowy 10.1.25.200 – pasuje do trasy 3, przekaż karcie WLAN1
host docelowy 10.2.25.200 – pasuje do trasy 4, wyślij do 10.1.0.254
host docelowy 10.0.0.199 – pasuje do trasy 2, przekaż karcie Ethernet2
host docelowy 192.168.1.105 – pasuje do trasy 6, wyślij do 10.0.0.1
host docelowy 8.8.8.8 – jw.
host docelowy 212.77.100.101 – jw.
Ostatnia trasa, czyli 0.0.0.0/0, którą można skrócić do 0/0 pasuje do wszystkich adresów IP. Będą tam wysyłane pakiety domyślnie, o ile nie będą pasowały do żadnej innej trasy, dlatego nazywa się trasą domyślną i zawsze jest na końcu. Brama trasy domyślnej to brama domyślna.
Mamy 2 typy tras:
1. Typu L2, inaczej interfejs – gdy jest nazwa interfejsu (karta sieciowa jest rodzajem interfejsu, inne rodzaje: modem LTE, tunel VPN) – przekaż do warstwy niżej, czyli L2 (w przypadku Ethernet będzie użyty ARP i MAC), inaczej mówiąc wysyłaj bezpośrednio na interfejs.
2. Typu L3, inaczej brama – gdy jest adres IP bramy – wysyłaj do podanego hosta.
Można zauważyć, że skoro w trasie typu L3 wysyłamy do adresu IP, a za kierowanie ruchu do adresów IP odpowiada tablica routingu to mamy pewien rodzaj zapętlenia: pakiet zostaje w warstwie trzeciej. Aby pakiet opuścił urządzenie to musi być przekazany do warstwy niżej, dlatego dodanie trasy typu L3 skutkuje przejrzeniem tablicy routingu w poszukiwaniu trasy typu L2 pasującej do podanej bramy i przekazywaniem do warstwy niżej wg reguł tej pasującej trasy. Ten zawiły opis łatwiej zrozumieć na przykładzie z powyższej tablicy routingu: dla trasy 10.2.0.0/16 zapisane w niej będzie, żeby przekazać pakiet do warstwy niżej jak dla bramy 10.1.0.254, czyli wg reguł trasy 10.1.0.0/16 – przez interfejs WLAN1, z użyciem ARP i MAC dla adresu 10.1.0.254 (mimo że docelowe IP tego pakietu jest z innej podsieci). Trasa typu L3 bez pasującej do jej bramy trasy typu L2 nie działa.
Większość programów do wyświetlania tablicy routingu nie wyświetla ich w kolejności przeglądania przez hosta podczas decyzji o routingu tylko alfanumerycznej, co utrudnia ręczną analizę kolejności przeglądania. Trasy są zawsze przeglądane w kolejności od najmniejszych podsieci do największych i jeśli adres docelowy pasuje do wielu tras routingu to znaczenie będzie mieć najmniejsza podsieć (tzw. najbardziej szczegółowa), a pozostałe będą zignorowane.
Zadanie 10a: Tablica routingu hosta wygląda następująco:
1. 192.168.3.15/32 – przez interfejs Ethernet1
2. 192.168.0.0/24 – przez interfejs Ethernet1
3. 192.168.1.0/24 – przez interfejs Ethernet2
4. 10.0.0.0/24 – przez interfejs Ethernet2
5. 10.0.0.0/16 – przez interfejs Ethernet1
6. 0/0 – przez hosta 192.168.0.1
Jaką decyzję podejmie host, gdy będzie chciał wysłać pakiet:
a) do hosta 192.168.0.15
b) do hosta 192.168.1.15
c) do hosta 192.168.2.15
d) do hosta 192.168.3.15
e) do hosta 10.0.0.15
f) do hosta 10.0.1.15
g) do hosta 10.0.55.15
h) do hosta 10.0.0.0
i) do hosta 8.8.8.8
Format odpowiedzi: „trasa 12, interfejs Ethernet5” lub „trasa 13, brama 1.2.3.4”.
Przy wysyłce pakietu host w pierwszej kolejności sprawdza czy sam jest odbiorą tego pakietu. W tym celu sprawdza lokalną tablicę routingu, która jest ukryta przez typowe programy do wyświetlania tablicy routingu. Zawiera ona adresy IP przypisane do interfejsów hosta oraz adresy broadcastowe podsieci tych adresów IP. Każdy host ma domyślnie przypisany adres 127.0.0.1/8 (nazwa tego adresu to localhost), do wirtualnego interfejsu loopback. Zatem wykonując połączenie do adresu 127.1 wykonamy połączenie do samego siebie, mimo że zazwyczaj takiego adresu IP ani powiązanej z nim trasy routingu nie widać w konfiguracji urządzenia.
Gdy host otrzyma pakiet nieprzeznaczony dla niego tylko dla innego hosta i prześle go dalej zgodnie ze swoją tablicą routingu to taki host staje się routerem. Samą operację przesyłania pakietu dalej nazywamy forwardowaniem.
Wyobraźmy sobie sytuację, w której mamy 3 routery: R1, R2, R3. Routery są źle skonfigurowane i dla pewnego docelowego adresu IP, R1 kieruje pakiet do R2, R2 do R3, a R3 do R1. W takiej sytuacji pakiet będzie krążył i nie dotrze do celu. Aby nie krążył bez końca (i w efekcie nie przeciążył sieci) wprowadzono parametr Time-to-Live (TTL). Host wysyłając pakiet określa jego TTL (zwykle ok. 60), a każdy router po drodze obniża TTL o 1. Pakiet z TTL=0 jest kasowany. Zapobiega to całkowitemu przeciążeniu sieci IP w przypadku wystąpienia pętli, co jest dużą przewagą nad L2.
Adres IP dodany do interfejsu automatycznie tworzy trasę routingu typu L2 z podsiecią, w której jest ten adres. Przykładowo dodanie adresu 192.168.3.5/24 do Ethernet1 skutkuje dodaniem trasy „192.168.3.0/24 – przez interfejs Ethernet1”. Oprócz tego można dodawać ręczne trasy, w szczególności trasę domyślną. Sama konfiguracja adresów IP nie określa trasy domyślnej, dlatego obok adresu IP oraz maski zazwyczaj podawana jest brama domyślna.
Dzięki routerom można tworzyć dużą sieć IP, której hosty używają różnych technologii warstwy drugiej. Największą siecią jaką znam tego typu jest Internet 🙂 Każdy router ma ustawione, gdzie forwardować pakiety, aby dotarły do celu – czasem może to być nawet 20 routerów z rzędu. Ścieżkę uzyskaną przez kolejne routery nazywamy ścieżką routingu lub trasą routingu (niejednoznaczność pojęcia).
Router to taki bridge, tyle że warstwy 3. Bridge to taki router, tyle że warstwy 2.
Zadanie 10b: Czy switch Ethernet musi mieć przypisany adres MAC i adres IP do prawidłowej pracy?
Zadanie 10c: Czy router Ethernet musi mieć przypisany adres MAC i adres IP do prawidłowej pracy?
Format odpowiedzi dla obu zadań: MAC nie, IP tak
11. DNS (DOMAIN NAME SYSTEM)
Powiedziane było, że hosty w Internecie komunikują się za pomocą adresów IP. Wiecie jednak, że wpisujecie w przeglądarce „facebook.com”, a nie jakieś dziwne numery. Aby nie trzeba było pamiętać adresów IP wprowadzone zostały domeny internetowe. DNS to protokół zmieniający domenę na adres IP i odwrotnie. Gdy wpiszemy w przeglądarce facebook.com to program najpierw sprawdzi, jaki adres IP ma domena facebook.com i dalej będzie kierował pakiety na ten adres IP. Operacja ta nazywa się rozwiązywaniem domeny lub wysyłaniem zapytania DNS, a nasz host pełni rolę klienta DNS. Domeny działają nie tylko w Internecie – docelowy host może być w naszej sieci prywatnej i będziemy mogli się z nim komunikować bez dostępu do Internetu.
DNS pozwala na tworzenie poddomen, określa wiele parametrów domen, buduje światową sieć serwerów buforujących zapytania (DNS cache). Jedną z ważnych cech systemu DNS jest jego niezawodność. Każda domena musi być zdefiniowana na przynajmniej 2 serwerach DNS (nie licząc buforujących), niektórzy stosują znacznie więcej (np. 4). Dodatkowo klienci DNS zwykle mają określone przynajmniej 2 serwery DNS, do których mogą kierować zapytania. Gdy pierwszy serwer nie odpowie to zapytanie jest kierowane do drugiego.
Ważną rzeczą, o której należy pamiętać przy diagnostyce problemów z Internetem jest fakt, że często połączenie z Internetem działa poprawnie, a nie działa sam DNS. Bardzo łatwo to sprawdzić łącząc się (wpisując w przeglądarce lub pingując) z adresem IP hosta, a nie z domeną. Ja zawsze wpisuję 212.77.100.101, czyli wp.pl. Jeśli 212.77.100.101 odpowiada, a wp.pl – nie, sprawa jest jasna: problemów należy szukać w DNS.
Należy wiedzieć, że nie trzeba korzystać z serwera DNS jaki otrzymaliśmy przez DHCP. Oto kilka, z milionów serwerów DNS na świecie:
8.8.8.8 – DNS Google
1.1.1.1 – DNS Cloudflare
194.204.159.1 – DNS Orange Polska
Możecie sprawdzić, że to działa podając jeden z nich w ustawieniach połączenia sieciowego.
Najprostszym sposobem ręcznego rozwiązania domeny jest spingowanie jej (np. ping wp.pl) i przeczytanie do jakiego adresu IP kierowane są pingi.
12. TCP, PORTY SIECIOWE
W rozdziale o warstwach było wspomniane TCP oraz skrótowe możliwości warstwy transportowej. Rozwinę ten temat. W oparciu o IP możemy realizować 3 typy połączeń:
– ICMP – do testowania połączenia (np. ping, traceroute)
– TCP – połączenie automatycznie korzystające z maksymalnej prędkości, dające gwarancję dostarczenia pakietów (w przypadku zagubienia pakietu następuje retransmisja) i poprawnej kolejności dostarczenia (kolejność jest poprawiana po stronie odbiorcy)
– UDP – połączenie „wyślij i zapomnij”, zapewniające niski czas dostarczenia, używane w grach lub w strumieniach (np. video), gdzie nieaktualne pakiety można wyrzucić do kosza
Zarówno TCP, jak i UDP, działają w oparciu o porty. Port jest numerem od 0 do 65535. Program, który chce coś wysłać musi otworzyć port (ang. bind). Dzięki temu, gdy host otrzyma pakiet zwrotny od razu będzie wiedział, do którego programu go skierować, a sam program nie będzie otrzymywał śmieci (innych pakietów, nie dla niego). Każdy pakiet TCP/UDP zawiera port docelowy (czyli ten otwarty przez program na hoście docelowym) oraz port źródłowy (czyli ten na który ma przyjść pakiet zwrotny). Port zwykle umieszcza się za adresem IP, po dwukropku, piszemy np. 192.168.1.1:80.
Większość popularnych usług w Internecie ma ustalone porty, na których działają (nasłuchują pakietów). Przykłady:
HTTP, czyli WWW – TCP 80
HTTPS, czyli bezpieczne WWW – TCP 443
FTP – TCP 21, TCP 20
DNS – TCP 53, UDP 53
DHCP – UDP 67
Gdy wpiszemy w przeglądarce „www.onet.pl” przeglądarka rozwiąże domenę, połączy się z otrzymanym adresem IP, przez TCP na port 80. Możemy też jawnie podać protokół i numer portu wpisując „http://www.onet.pl:80”. Efekt identyczny. O ile serwer Onetu musi mieć ustalony port, żeby każdy mógł się z nim połączyć, to połączenie, które idzie z naszego komputera do Onetu może wychodzić z dowolnego portu. Przeglądarka dla każdego takiego połączenia otwiera nowy, przyznany przez system port, np. TCP 3543. Serwer Onetu zobaczy z jakiego IP i z jakiego portu źródłowego otrzymał połączenie i odpowiedzi będzie wysyłał na ten IP:port.
Przykład połączenia, adres IP naszego kompa to 91.224.116.9:
a) użytkownik wpisuje w przeglądarce „www.wp.pl”
b) przeglądarka rozwiązuje domenę wysyłając zapytanie do serwera DNS i dostaje odpowiedź: Host „www.wp.pl” ma adres IP 212.77.100.101
c) przeglądarka prosi system operacyjny o nawiązanie połączenia TCP z IP 212.77.100.101 z portem 80 (bo używamy HTTP), z dowolnym portem źródłowym
d) system operacyjny otwiera port 2033 i nawiązuje połączenie
e) serwer 212.77.100.101:80 akceptuje połączenie przychodzące od 91.224.116.9:2033 i na ten IP:port odsyła stronę html (przesłanie całej strony z obrazkami oznacza wymianę wielu pakietów, ale wszystkie są idą tą samą metodą)
TCP, w odróżnieniu od UDP, utrzymuje stan połączenia. Jeśli pakiety danych nie są wysyłane przez jakiś czas to wysyłane są pakiety „keep-alive”. Połączenie będzie zerwane dopiero, gdy jedna ze stron jawnie je zakończy lub nie będzie odpowiedzi na „keep-alive” przez dłuższy czas (timeout). Takie połączenie nazywa się sesją TCP. W połączeniach radiowych często 1 sesja TCP nie jest w stanie wykorzystać pełnego transferu – tworząc kilka sesji TCP możemy ściągać szybciej.
Samo nawiązanie połączenia TCP wiąże się z wymianą kilku pakietów inicjujących (SYN, SYN+ACK, ACK). Dodatkowo otrzymanie każdego pakietu jest potwierdzane odpowiedzią ACK (Acknowledgment). O tym jednak pisać nie będę, zapraszam do ostatniego rozdziału.
13. NAT (NETWORK ADDRESS TRANSLATION)
Od operatora Internetu zwykle dostajemy 1 publiczny adres IP, a hostów mamy więcej niż 1. Hostom przypisujemy wtedy adresy prywatne, aby mogły się one komunikować z siecią publiczną stosuje się na NAT (translacja adresów z prywatnych na publiczne i odwrotnie). NAT może zmieniać adresy jednej sieci prywatnej na adresy innej sieci prywatnej, co ma chociażby miejsce przy podłączeniu jednego routera Wi-Fi do drugiego.
Innym zastosowaniem NAT jest zwiększenie bezpieczeństwa: pozwala w pewnym stopniu wydzielić naszą sieć prywatną od Internetu.
Nie każdy router robi NAT. W rozdziale o routingu nie było mowy o przekształcaniu adresów IP podczas forwardu – pakiety były przekazywane bez żadnych zmian. Zobaczmy co się stanie w takiej sytuacji w przypadku routera domowego.
Adres IP Routera po stronie wewnętrznej (prywatnej): 192.168.1.1/24
Adres IP Routera po stronie zewnętrznej (publicznej): 91.224.116.9/23
Brama domyślna Routera: 91.224.116.1
Adres IP Komputera1 w sieci prywatnej: 192.168.1.101/24
Adres IP Komputera2 w sieci prywatnej: 192.168.1.102/24
Brama domyślna Komputerów: oczywiście 192.168.1.1
1. Przypadek bez NAT
a) Komputer1 (K1) wysyła pakiet do wp.pl (212.77.100.101) z portu powiedzmy 2045. Przegląda swoją tablicę routingu, w której jest tylko:
192.168.1.0/24 – interfejs Ethernet1
0/0 – przez 192.168.1.1 – interfejs Ethernet1
b) w związku z tym, że adres 212.77.100.101 nie pasuje do pierwszego wpisu, K1 kieruje pakiet na domyślną bramę, czyli na Router (R).
c) R otrzymuje pakiet i jako router przesyła go dalej zgodnie ze swoją tablicą routingu:
192.168.1.0/24 – interfejs Ethernet1 (LAN)
91.224.116.0/23 – interfejs Ethernet2 (WAN)
0/0 – przez 91.224.116.1 – interfejs Ethernet2 (WAN)
d) pakiet dociera do kolejnego routera (91.224.116.1) i w końcu do WP (212.77.100.101)
e) WP chce odesłać stronę, ale widzi, że pakiet przyszedł z adresu 192.168.1.101:2045 – nie ma pojęcia gdzie odesłać pakiet, bo takich sieci prywatnych są miliony
f) tak naprawdę pakiet ten zostanie odrzucony przez jeden z pierwszych routerów po drodze, bo jest bez sensu (routery filtrują pakiety z prywatnych podsieci IP)
2. Przypadek z NAT bez zmiany portu
a) K1 wysyła pakiet do wp.pl (212.77.100.101) z portu 2045
b) R otrzymuje pakiet, ale przed wysłaniem go do 91.224.116.1 dokonuje zmiany adresu źródłowego w pakiecie (Source NAT, SNAT) z 192.168.1.101 na swój własny, czyli 91.224.116.9
c) pakiet dociera do kolejnego routera (91.224.116.1) i w końcu do WP (212.77.100.101)
d) WP odsyła stronę na 91.224.116.9:2045
e) R otrzymuje pakiet zwrotny i dokonuje zmiany adresu docelowego w pakiecie (Destination NAT, DNAT) z 91.224.116.9 na 192.168.1.101
f) pakiet dociera do K1, czyli 192.168.1.101:2045
Działa? Prawie… Jeśli K1 i K2 jednocześnie wyślą pakiety do Internetu to R nie będzie wiedział, gdzie skierować pakiety powrotne. Wymyślono rozwiązanie problemu.
3. Przypadek z NAT ze zmianą portu
a) K1 wysyła pakiet do wp.pl (212.77.100.101) z portu 2045
b) K2 wysyła pakiet do onet.pl (213.180.141.140) z portu 3012
c) R otrzymuje pakiet od K1, ale przed wysłaniem go dalej zmienia Source IP 192.168.1.101 -> 91.224.116.9 oraz Source Port 2045 -> 20243
d) R otrzymuje pakiet od K2, ale przed wysłaniem go dalej zmiena Source IP 192.168.1.102 -> 91.224.116.9 oraz Source Port 3012 -> 20244
e) R zapisuje sobie też, że port 20243 jest powiązany z 192.168.1.101:2045, a port 20244 jest powiązany z 192.168.1.102:3012. Zbiór takich informacji nazywa się tablicą NAT
f) gdy R otrzymuje pakiet zwrotny na port 20244 przegląda tablicę NAT i zmiana Destination IP na 192.168.1.102 oraz Destination Port na 3012
g) podobnie postępuje z pakietem, który dostanie na port 20243
h) oba pakiety trafiają tam gdzie powinny
Eureka! Dzięki temu rozwiązaniu możliwe jest korzystanie z Internetu przez wiele hostów przy użyciu jednego adresu publicznego. Dzięki temu dopiero w 2012 roku w Europie skończyła się dostępna pula publicznych adresów IP i rozwój Internetu nie został zatrzymany.
W przypadku pakietów ICMP, które nie używają portów, tak jak TCP i UDP, do tablicy NAT trafiają numery identyfikacyjne ICMP, które pełnią podobną rolę.
Z powyżej analizy wynika, że połączenie między komputerem z sieci prywatnej i komputerem z sieci publicznej musi być zainicjowane z sieci prywatnej. Serwer w Internecie, który sam chce się połączyć z hostem z sieci prywatnej i przyśle coś do routera z NAT nie dostanie odpowiedzi – router nie będzie wiedział komu przekazać pakiet, bo nie będzie miał odpowiedniego wpisu w tablicy NAT. Ma to wady i zalety. Podstawowa zaleta jest taka, że komputery za NAT-em są zabezpieczone przez atakami z Internetu (przynajmniej znaczną częścią tych ataków). Wady są takie, że trudno jest wykonać połączenie między hostami, zza różnych NAT-ów oraz że hosty za NAT-em nie mogą udostępniać usług w Internecie. Tę drugą wadę często się obchodzi robiąc przekierowanie wybranych portów (np. port 80, aby wybrany host pracował jako serwer WWW) lub tzw. strefę DMZ (de facto przekierowanie na danego hosta wszystkich portów poza tymi z tablicy NAT).
14. PODSIECI IP Z MASKAMI POŚREDNIMI
W rozdziale o maskach podałem 5 podstawowych masek podsieci. Jak nie trudno zauważyć, charakteryzowały się one tym, że każdy z oktetów wynosił 255 albo 0. W praktyce stosuje się też inne maski, które pozwalają tworzyć podsieci o liczbie adresów np. większej od 256, ale mniejszej od 65536.
Precyzyjnie rzecz biorąc maska mówi jakie bity adresu IP są wspólne dla wszystkich adresów w podsieci. Adres IP, tak samo jak maska, składa się z 4 oktetów, czyli 32 bitów. Każda maska w zapisie binarnym ma najpierw jedynki (bity podsieci), potem zera (bity hosta). W związku z tym nie istnieje maska 255.255.0.255, bo gdy zapiszemy ją binarnie to mamy jedynki, potem zera, potem znów jedynki (11111111111111110000000011111111). To samo dotyczy maski 255.255.255.213 (11111111111111111111111111010101).
Wszystkie dostępne maski w IPv4:
/32 = 32 jedynki, potem zera = /255.255.255.255
/31 = 31 jedynek, potem zera = /255.255.255.254
/30 = 30 jedynek, potem zera = /255.255.255.252
/29 = 29 jedynek, potem zera = /255.255.255.248
/28 = 28 jedynek, potem zera = /255.255.255.240
/27 = 27 jedynek, potem zera = /255.255.255.224
/26 = 26 jedynek, potem zera = /255.255.255.192
/25 = 25 jedynek, potem zera = /255.255.255.128
/24 = 24 jedynki, potem zera = /255.255.255.0 (typowa maska dla podsieci domowych)
/23 = 23 jedynki, potem zera = /255.255.254.0
/22 = 22 jedynki, potem zera = /255.255.252.0
/21 = 21 jedynek, potem zera = /255.255.248.0
/20 = 20 jedynek, potem zera = /255.255.240.0
/19 = 19 jedynek, potem zera = /255.255.224.0
/18 = 18 jedynek, potem zera = /255.255.192.0
/17 = 17 jedynek, potem zera = /255.255.128.0
/16 = 16 jedynek, potem zera = /255.255.0.0
/15 = 15 jedynek, potem zera = /255.254.0.0
/14 = 14 jedynek, potem zera = /255.252.0.0
/13 = 13 jedynek, potem zera = /255.248.0.0
/12 = 12 jedynek, potem zera = /255.240.0.0
/11 = 11 jedynek, potem zera = /255.224.0.0
/10 = 10 jedynek, potem zera = /255.192.0.0
/9 = 9 jedynek, potem zera = /255.128.0.0
/8 = 8 jedynek, potem zera = /255.0.0.0
/7 = 7 jedynek, potem zera = /254.0.0.0
/6 = 6 jedynek, potem zera = /252.0.0.0
/5 = 5 jedynek, potem zera = /248.0.0.0
/4 = 4 jedynki, potem zera = /240.0.0.0
/3 = 3 jedynki, potem zera = /224.0.0.0
/2 = 2 jedynki, potem zera = /192.0.0.0
/1 = 1 jedynka, potem zera = /128.0.0.0
/0 = 0 jedynek, potem zera = /0.0.0.0
Na szczególną uwagę zasługują maski:
/32 – podsieć obejmuje tylko 1 adres i często „/32” jest pomijane w mowie, programach i konfiguracji urządzeń, czyli „192.168.1.64/32” to jest to samo co „192.168.1.64”. Adres IP z taką maską można dodawać do interfejsu
/31 – najmniejsza podsieć umożliwająca połączenie 2 hostów. Jak łatwo zauważyć nie są tu wydzielone adresy podsieci (jest to po prostu adres pierwszego hosta) ani rozgłoszeniowy (nie ma do kogo rozgłaszać skoro oprócz nas jest tylko 1 inny host). Adres IP z taką maską można dodawać do interfejsu, jednak nie wszystkie urządzenia to obsługują
/0 – podsieć obejmuje wszystkie adresy IP, inaczej „cały Internet”
Wiele osób uczyło się obliczać adresy i maski na liczbach binarnych. Zapomnij o tym! To się do niczego nie przydaje, bo są lepsze sposoby.
Najważniejszą rzeczą do zapamiętania w maskach jest fakt, że każda kolejna maska daje 2x większą podsieć („większa” maska ma mniejszy numer), np.:
/27 – 32 adresy
/26 – 62 adresy
/25 – 128 adresów
itp.
Dodatkowo przy liczeniu masek nie wymnażamy kolejnych oktetów, bo to bardzo niepraktyczne. Zamiast tego posługujemy się skrótami odwołującymi się do powszechnie znanych masek:
/32 – 1 adres
/24 – 256 adresów, „dwudziestka czwórka”
/23 – 2*256 adresów, „dwie dwudziestki czwórki”
/22 – 4*256 adresów, „cztery dwudziestki czwórki”
…
/18 – 64*256 adresów, „64 dwudziestki czwórki”
/17 – 128*256 adresów, „128 dwudziestek czwórek” = „pół szesnastki”
/16 – 256*256, „szesnastka”
/15 – 2*256*256, „dwie szesnastki”
…
/9 – 128*256*256, „pół ósemki”
/8 – 256*256*256, „ósemka”
/7 – 2*256*256*256, „dwie ósemki”
…
/0 – 256*256*256*256
Warto zauważyć, że liczba adresów maski jest równa 2 do potęgi [32 minus numer maski]. Rozpatrywanie każdego oktetu osobno jest również ważne przy liczeniu zakresu adresów, czyli adresu podsieci i rozgłoszeniowego. W rozdziale o podsieciach liczyliśmy zakresy adresów, dla podstawowych masek. Przypomnę: jeśli przy danym oktecie maska = 255 to w obu adresach (podsieci i rozgłoszeniowym) przepisujemy wartość z adresu IP. Jeśli przy danym oktecie maska = 0 to w adresie podsieci piszemy 0, a w adresie rozgłoszeniowym 255. Dla maski pośredniej jeden (i tylko jeden) z oktetów maski ma wartość inną niż 0 i 255. W takiej sytuacji, wartość adresu podsieci to pierwsza liczba mniejsza lub równa wartości z adresu IP podzielna przez liczbę adresów tej maski. Adres rozgłoszeniowy to zawsze adres podsieci powiększony o liczbę adresów dla danej maski minus 1. Przykład:
Adres IP z maską: 80.72.33.115/29
Maska w notacji oktetowej: 255.255.255.X (bo maska mniejsza niż /24)
Pierwszy etap (oktety 1,2,3): 80.72.33.Y – 80.72.33.Z
Drugi etap (oktet 4): szukamy liczby adresów dla maski (/32 = 1, /31 = 2, /30 = 4, /29 = 8 – za każdym razem podwajamy), szukamy liczby mniejszej lub równej 115, podzielnej przez 8, ta liczba to Y = 112. Dodajemy liczbę adresów pomniejszoną o 1, Z = Y+8-1 = 119.
Zakres adresów IP w podsieci: 80.72.33.112 – 80.72.33.119
Adres IP z maską: 91.154.73.88/15
Maska w notacji oktetowej: 255.X.0.0 (bo maska większa niż /16 i mniejsza niż /8)
Pierwszy etap (oktety 1,3,4): 91.Y.0.0 – 91.Z.255.255
Drugi etap (oktet 2): szukamy liczby adresów dla maski (/16 = 1*256*256, /15 = 2*256*256 – w drugim oktecie mamy liczbę 2), szukamy liczby mniejszej lub równej 154, podzielnej przez 2, ta liczba to Y = 154. Dodajemy liczbę adresów pomniejszoną o 1, Z = Y+2-1 = 155.
Zakres adresów IP w podsieci: 91.154.0.0 – 91.155.255.255
Być może brzmi to strasznie, ale wystarczy trochę wprawy, aby w pamięci liczyć każdą podsieć!
Zadanie 14a: podaj zakres adresów podsieci, w której jest host o adresie IP:
a) 192.168.23.122/25
b) 127.127.127.127/6
c) 15.14.194.1/20
d) 246.18.256.17/1
Zadanie 14b: zapisz podsieć w notacji CIDR dla zakresu adresów:
a) 192.168.16.0 – 192.168.31.255
b) 10.192.0.0 – 10.195.255.255
c) 160.0.0.0 – 191.255.255.255
Zadanie 14c: podaj maskę podsieci w notacji oktetowej dla zakresu adresów z zadania 14b.
15. NARZĘDZIA DIAGNOSTYCZNE
Opiszę tutaj podstawowe narzędzia do diagnozy problemów z Internetem. Wiedza zawarta w poradniku jest potrzebna, żeby używać ich z głową. Przedstawione narzędzia to komendy, które pod Windowsem należy odpalać przez Start – Uruchom (polecam skrót: Windows+R).
1. ping (Windows, Linux) – wysyła podstawowy pakiet testowy ICMP Echo Request. Host docelowy ma odpowiedzieć pakietem ICMP Echo Reply, zwanym też „pong”. Odpowiedź zawiera TTL, umożliwia określenie czasu przesłania pakietu w obu kierunkach (RTT, Round Trip Time, potocznie zwany po prostu „pingiem”), gdy niektóre pakiety pozostaną bez odpowiedzi ping określi straty (lossa) na łączu.
Ping to najbardziej podstawowe narzędzie diagnostyczne. Podaje statystykę czasów odpowiedzi, tzn. czas minimalny, maksymalny, średni i odchylenie standardowe (im większe tym bardziej skakał).
W obu systemach pinga przerywamy tak samo jak inne komendy tekstowe: Crtl+C. Jeśli interesują nas statystyka końcowa to pod Windowsem warto ręcznie uruchomić konsolę (Start – Uruchom – cmd) i tam odpalić pinga, bo inaczej okno nam się od razu zamknie i nic nie zobaczymy. Jeśli pingujemy domenę (wp.pl zamiast 212.77.100.101), a system jej nie rozwiąże to ping zakończy działanie przed wysłaniem 1 pakietu. Informacja o poprawnym rozwiązaniu domeny jest potwierdzona przez podanie adresu IP.
a) ping wp.pl -t (Windows) – Windows domyśle wysyła 4 pingi, aby pingował bez końca należy dodać parametr -t
b) ping wp.pl -f (Linux) – flood, czyli wysyłaj pakiety masowo, bez przerw. Kropki symbolizują pakiet, na który nie przyszła odpowiedź
c) ping 192.168.1.1 -s1450 (Linux) – wysyłaj pakiety o rozmiarze 1450 oktetów zamiast domyślnego 56 oktetów – pozwala na dokładniejsze określenie start na łączu, bo dla małych pakietów często możemy otrzymać 0 strat i dojść do błędnego wniosku, że wszystko jest w porządku
d) ping wp.pl -c100 (Linux), ping wp.pl -n 100 – wyślij 100 pakietów i zakończ
e) ping wp.pl -n (Linux) – nie przekształcaj adresu IP, z którego przyszła odpowiedź na domenę, czyli Reverse DNS (bo to zajmuje czas i czasem można odnieść wrażenie, że ping dziwnie działa)
f) ping 192.168.1.1 -fnc200 -s1000 (Linux) – połączenie wszystkim parametrów powyżej. Doskonały test na straty pakietów na łączu – szybko (-f) wyślij 200 pakietów (-c200) o rozmiarze 1000 oktetów (-s1000) i nie czekaj na rDNS (-n)
g) ping 192.168.1.1 -i0.2 (Linux) – określa interwał między kolejnymi pingami na 0,2 sek. Przydatne, gdy nie mam roota, wymaganego do floodowania
h) ping -r 9 (Windows), ping -R (Linux) – opisane poniżej
2. tracert (Windows), traceroute (Linux) – program również wysyła pakiety ICMP, ale takie, które nakazują wszystkim routerom po drodze wysłanie odpowiedzi. Służy do badania trasy pakietów. Trzeba pamiętać, że trasa do hosta docelowego może być inna niż trasa powrotna, traceroute pokaże nam tylko tę pierwszą. Czasem się zdarza, że router po drodze odmawia przysłania odpowiedzi. W takiej sytuacji (lub straty pakietu) traceroute wyświetla „*” zamiast czasu odpowiedzi. Dla mnie traceroute jest niewygodny i używam narzędzi poniżej.
3. pathping (Windows), mtr (Linux) – podobnie jak traceroute podaje trasę routingu do hosta docelowego, ale tworzy też statystykę czasów odpowiedzi i strat pakietów do kolejnych routerów. Część routerów ma limity odpowiedzi na pingi, co prowadzi często do błędnych wniosków, że loss jest do wskazanego routera.
4. WinMTR (Windows, trzeba ściągnąć) – program okienkowy, który działa bardzo podobnie do mtra z Linuxa.
5. hrping (Windows, trzeba ściągnąć) – program, który działa bardzo podobnie do pinga z Linuxa.
6. ping -r 9 (Windows), ping -R (Linux) – ping rejestruje trasę pakietu w obie strony. Dla małej liczy hopów (routerów po drodze) pozwala to określić trasę powrotną pakietu. Niestety rejestrowane jest tylko 9 kolejnych routerów, dlatego dokładne określenie trasy będzie możliwe tylko do hostów oddalonych o max 5 hopów. Powyżej tego zaczniemy tracić informacje.
Wiele hostów blokuje ICMP na firewallu, w tym Windowsy. Oznacza to, że nie dostaniemy odpowiedzi na pinga, mimo że połączenie działa bez zarzutów.
7. arping (Linux, zwykle trzeba doinstalować. Debian/Ubuntu: apt-get install iputils-arping) – komenda wykonuje sztuczne zapytanie ARP, tzn. wysyła do wszystkich pakiet MAC, z pytaniem: „Kto ma adres IP …?”. Żaden firewall nie może blokować takiego zapytania, bo inaczej nie działałoby mu połączenie. Dzięki temu arping powie nam czy host jest aktywny nawet jak ma firewalla blokującego ICMP. Arping pozwala też na wykrycie konfliktów IP w sieci, tzn. sytuacji w której 2 różne hosty mają ten sam adres IP.
a) arping 192.168.1.1 – w odpowiedzi otrzymamy adres MAC hosta 192.168.1.1 oraz czas całej operacji
8. Pewna symulacja arpinga pod Windowsem:
a) ping 192.168.1.1 (od razu wychodzimy, Ctrl+C)
b) arp -a – sprawdzamy adres MAC hosta 192.168.1.1 w naszej tablicy ARP, Type invalid oznacza brak odpowiedzi ARP
c) w tablicy ARP znajduje się host, który jako ostatni odpowiedział na zapytanie ARP, jeśli zdarzy się, że zobaczymy 2 różne adresy MAC dla danego hosta (kolejno powtarzając b)) – wykryliśmy konflikt
d) host będzie w tablicy przez pewien czas od rozłączenia (od minuty do kilku), dopiero gdy będzie usunięty z tablicy, ping+arp można powtórzyć
16. WIĘCEJ INFO
Zadanie 16a: jakie mamy tablice w urządzeniach sieciowych?
Zadanie 16b: jaka jest różnica między routerem a switchem? Porównaj odpowiedź do zadania nr 1.
Autor: Tomasz Gruca
Data aktualizacji: 2023-10-27