Adresacja IP – adres komputera, sieci, maska

Bez adresu IP komputer nie może komunikować się z innymi urządzeniami w sieci. Ale czym jest adres IP i czym jest maska? Czym jest adres sieci i do czego go potrzebujemy? Ten wpis to kontynuacja artykułu o protokole IPv4. Tm razem dowiesz się jakie są typy adresów IP jak adresowane są sieci. Zapraszam do lektury!

Do czego sieciom potrzebne są maski?

Maska sieci mówi nam o tym, jak duża jest sieć, tzn. ile maksymalnie hostów może się w niej znajdować. Adres IP dzieli się na dwie części, pierwsza z nich identyfikuje sieć, a druga identyfikuje host w tej sieci. Takie podejście jest bardzo wygodne ze względu na trasowanie (przesyłanie) pakietów pomiędzy podsieciami. Zamiast tworzyć duże tablice wskazujące na położenie każdego hosta tworzone są o wiele mniejsze tablice wskazujące na położenie podsieci i dopiero kiedy pakiet dotrze do wskazanej podsieci jest przesyłany do konkretnego hosta.

Maska może być zapisana podobnie jak adres IP na czterech oktetach i mieć np. wartość 255.255.0.0 albo zostać zapisana w notacji CIDR i w tym przypadku miałaby ona zapis /16. Ten drugi zapis jest łatwiejszy do zrozumienia, jak maska dzieli adres IP na część identyfikującą sieć i host. Zapis /16 oznacza, że maska jest ciągiem szesnastu jedynek uzupełnionych kolejnymi szesnastoma zerami do 32 bitów. Ma więc zapis 11111111 11111111 00000000 00000000. Jeśli przyłożymy teraz tak zapisaną maskę do binarnie zapisanego adresu IP część adresu, która pokrywa się z jedynkami to adres podsieci a część pokrywająca się z zerami to adres hosta. Zobaczmy to na przykładzie, zapisując binarnie adres 192.168.23.47/16.

Adres IP i maska

Jak widzisz pierwsze dwa oktety to identyfikator sieci a, trzeci i czwarty okter identyfikuje host w tej podsieci.

Adres broadcast i identyfikator sieci

Warto wspomnieć jeszcze o identyfikatorze sieci i adresie broadcast. Pierwszy adres w sieci to jej identyfikator. Identyfikator sieci podawany jest zazwyczaj wraz z maską w celu ustalenia, gdzie sieć się zaczyna i gdzie kończy. Adres broadcast jest natomiast ostatnim adresem w sieci. Komputery używają go do rozgłaszania informacji do wszystkich hostów w sieci. O ile standardowa komunikacja, czyli unicast służy do komunikacji 1:1, o tyle broadcast używany jest wtedy, kiedy komputer musi skomunikować się jednocześnie ze wszystkimi komputerami. Dzieje się tak np. w zapytaniach ARP, które używane są do korelowania adresów IP z adresami MAC kart sieciowych. Nie wchodząc w szczegóły komunikacji ARP, powiem tylko, że komputer wysyła na adres broadcast zapytanie o to, który z komputerów ma wskazany w zapytaniu adres IP i oczekuje, że komputer o takim adresie odeśle w odpowiedzi swój adres MAC.

Podział adresów na klasy (ABCDE)

Na wstępie trzeba zaznaczyć, że podział sieci na klasy jest podziałem historycznym i nie jest on już stosowany od wielu lat. Warto jednak o nim wspomnieć, ponieważ wyjaśnia, dlaczego nie używamy wszystkich adresów IP do adresowania naszych sieci i hostów w Internecie.

Klasa A – do klasy A należą wszystkie adresy zaczynające się od 0, a podsieci tej klasy mają maskę 8-bitową, czyli /8 w zapisie CIDR albo 255.0.0.0 w zapisie dziesiętnym. Mając tylko te dwie informacje, możemy o klasie A powiedzieć bardzo dużo:

  • Po pierwsze, ponieważ pierwszy bit jest zawsze stały i wynosi zero, to do identyfikacji sieci używanych jest siedem bitów, więc maksymalna liczba podsieci w klasie A wynosi 2^7, czyli 128.
  • Po drugie do identyfikacji hosta używane są aż 24 bity, czyli maksymalna ich liczba w każdej podsieci wynosi 2^24 -2 = 16 777 214. O tym, skąd wzięło się -2 w tym równaniu przeczytasz w dalszej części artykułu
  • No i po trzecie wiemy, że adresy w klasie A zaczynają się od 0.0.0.0 (zero na początki, identyfikator sieci składający się z samych zer oraz same zera w części identyfikującej host) a kończą na 127.255.255.255 (zero na początku, same jedynki w części identyfikującej sieć i same jedynki w części hosta).

Klasa B – adresy w tej klasie zaczynają się od binarnego 10, a sieci mają maskę 16-bitową (255.255.0.0). Analogicznie jak w przypadku klasy A możemy powiedzieć o klasie B, że:

  • Do identyfikacji sieci używanych jest 14 bitów (maska jest 16-bitowa, ale 2 bity są zawsze stałe), a więc liczba sieci wynosi 2^14, czyli 16 384.
  • Do identyfikacji hosta w sieciach klasy B używamy 16 bitów, a więc maksymalna liczba hostów w każdej podsieci to 2^16 -2 = 65 534, a więc są to nadal sieci bardzo duże.
  • Adresy w klasie B zawierają się w zakresie pomiędzy 128.0.0.0 (10 na początku a później same zera), a 191.255.255.255 (10 a później same jedynki).

Klasa C – to adresy zaczynające się od binarnego 110, dla których identyfikator sieci ma 24 bity (255.255.255.0) a identyfikator hosta ma długość zaledwie 8 bitów. O adresach klasy C możemy powiedzieć, że:

  • Do identyfikacji sieci używanych jest 21 bitów, czyli mamy 2^21 = 2 097 152 takich sieci.
  • W każdej z nich możemy zaadresować 254 hosty (2^8-2).
  • Adresy klasy C zawierają się w przedziale od 192.0.0.0 do 223.255.255.255.

Klasa D – jak się pewnie domyślasz, adresy tej klasy zaczynają się od 1110, a więc są to adresy z przedziału 224.0.0.0 – 238.255.255.255. Jest to jednak jedyna cecha, która łączy tę klasę z trzema poprzednimi. Adresy z tej klasy używane są do transmisji Multicast, czyli równoczesnego wysyłania tych samych danych (streaming) do wielu hostów. Jest to kolejny po Unicast (komunikacja 1:1) i Broadcast (1:wszyscy) sposób, w jaki komputery mogę się ze sobą komunikować. W klasie D nie występuje już podział na podsieci, adresy tej klasy nie są podzielone na część identyfikującą sieć i host, a więc nie występuje w nich maska sieci.

Klasa E – jest najbardziej „tajemniczą” klasą adresów. Jej adresy zaczynają się od 1111 i są z przedziału od 239.0.0.0 do 255.255.255.255. Nie są one jednak nigdzie wykorzystywane, gdyż klasa E jest klasą zarezerwowaną na cele eksperymentalne, cokolwiek to ma oznaczać 🙂

Podsumowaniem niech będzie tabelka opisująca klasowy podział sieci (uwaga, tabelka nie uwzględnia adresów specjalnych, wykluczonych z użycia)

Podział sieci na klasy ABCDE

Bezklasowy podział sieci

W początkowej fazie tworzenia Internetu nikt chyba nie brał na poważnie tego, jak duże będzie zapotrzebowanie na adresy IP. Adresy były rozdawane na zasadzie kto pierwszy i większy, ten lepszy. Największe firmy dostawały adresy z klasy A, duże z klasy B a mniejsze z C. Oznaczało to olbrzymią rozrzutność w przydzielaniu adresów. Firma otrzymująca sieć z klasy A rzadko kiedy (żeby nie powiedzieć, że nigdy) nie wykorzystywała wszystkich 16 mln adresów IP, a więc duża ich część się marnowała. Z drugiej strony taki podział oznaczał, że do Internetu będzie podłączonych tylko 2 113 663 sieci (127 sieci klasy A, 16 384 klasy B i 2 097 152 klasy C). Czy to dużo? Z jednej strony całkiem sporo, ale z drugiej tylko 16 511 sieci mogło mieć więcej niż 254 hosty, a to już naprawdę duże ograniczenie.

Właśnie w związku z tymi ograniczeniami został wprowadzony bezklasowy podział sieci tzw. CIDR (Classless Inter-Domain Routing). Podział ten zakładał, że maska sieci może mieć różną długość. W praktyce oznaczało to, że firma, która potrzebowała więcej niż 254 adresy, nie musiała przechodzić na adresy klasy B, a zamiast tego mogła połączyć dwie leżące obok siebie klasy C, zastosować maskę 23-bitową i korzystać z 510 adresów (jak policzyć ilość wolnych adresów IP w zależności od maski przeczytasz w dalszej części artykułu).

Sieci prywatne i publiczne

Ponieważ bezklasowy podział sieci nie rozwiązał problemu wyczerpującej się puli adresów IPv4, konieczne były dalsze kroki, aby umożliwić dostęp do Internetu dla wszystkich użytkowników. W związku z tym, że większość hostów nie świadczy usług sieciowych, a jest jedynie klientami takich usług, nie musimy dla nich zapewniać unikatowych adresów IP, pod którymi będą bezpośrednio dostępne. W związku z tym zostały wprowadzone sieci z adresacjami prywatnymi i mechanizm NAT (Network Address Translation) tłumaczący adresy prywatne na publiczne adresy IP.

Source Network Address Translation

Rozróżniamy 3 klasy prywatnych adresów IP, są to 10.0.0.0/8, 172.16, 0.0/12 oraz 192.168.0.0/16. My wykorzystujemy zazwyczaj te adresacje z zupełnie innymi maskami, aby zapewnić dodatkowy podział takich sieci na mniejsze podsieci (mechanizm znany jako subneting) i oddzielić między sobą komputery wewnątrz sieci.

Sieci prywatne działają tylko wewnątrz sieci danego przedsiębiorstwa. Ich adresy są nieroutowalne w Internecie i jeśli pakiet z taką adresacją pojawi się na którymś z routerów Internetowych, ten powinien go zablokować i nie dopuścić do dalszego przesyłania. Dzięki temu adresy prywatne mogą być wykorzystywane równocześnie w wielu przedsiębiorstwach, bo wystarczy, że są unikatowe w obrębie sieci wewnętrznych, a nie w skali całego Internetu. Ponieważ sieci prywatne są blokowane przez routery Internetowe na wyjściu z sieci wewnętrznej, muszą być przetłumaczone na adresy publiczne. Jak już wspomniałem mechanizm tłumaczenia adresów IP to NAT, a w przypadku ruchu wychodzącego do Internetu będziemy mówili o SNAT (source NAT) albo o maskaradzie (masquarade) adresów IP. Mechanizmy te służą do ukrywania adresów prywatnych pod jednym lub kilkoma adresami IP.

Innym sposobem translacji adresów jest DNAT, czyli Destination NAT. W tym przypadku ruch przychodzący na adres publiczny jest przekierowywany do hostów wewnętrznych, a przekierowanie może odbywać się na zasadach 1:1 (cały ruch z Internetu jest przekierowywany do jednego adresu wewnętrznego) lub w zależności od portu docelowego trafiać tylko do określonego serwera. Właśnie ten drugi przypadek został przedstawiony na poniższym obrazku, gdzie ruch na portach 80 i 443 (http i https) trafia do serwera www a komunikacja na portach 25, 110 i 143 (smtp, pop3 oraz imap) trafia do serwera mailowego.

Destination Network Address Translation

Inne zarezerwowane klasy adresów IP

Poza sieciami prywatnymi z powszechnego użycia w Internecie zostały wydzielone jeszcze dwa zakresy adresów. Pierwsza sieć 127.0.0.0/8 została wyodrębniona z klasy adresowej A i jest używana do celów diagnostycznych. Druga podsieć stanowi część publicznych adresów zarezerwowanych przez IANA (Internet Assigned Numbers Authority), która została wydzielona z użycia i jest przeznaczona dla celów automatycznej adresacji APIPA.

127.0.0.0/8, czyli adresy z zakresu 127.0.0.0-127.255.255.255 stanowią pulę adresów używanych do celów diagnostycznych oraz do komunikacji wewnętrznej komputera, bo komunikacja z dowolnym adresem z tej sieci oznacza komunikację wewnątrz systemu operacyjnego. Z tego zakresu najlepiej znany jest chyba adres 127.0.0.1, czyli localhost. Jest to adres przypisany do wirtualnej karty sieciowej loopback (w Linuksie oznaczonej jako lo). Kartę loopback możemy wykorzystać tam, gdzie komunikacja pomiędzy dwoma aplikacjami na naszym komputerze ma się odbywać za pomocą „sieci” 😊 Przykładowo, jeśli chcę przetestować swoją nową stronę www, to mogę zainstalować na swoim komputerze usługę serwera www (Apache lub IIS), a następnie za pomocą przeglądarki połączyć się z tą stroną z tego samego komputera.

Adresacja 169.254.0.0/16, chociaż jest adresacją publiczną, to w Internecie nie jest używana. W systemach Windows oraz Mac OS producenci tego oprogramowania przypisał tę adresację do usługi APIPA (Autimatic Private IP Addressing). Adresów z tej puli nie przypisuje się do interfejsu ręcznie, ale jest on automatycznie przypisywany do karty sieciowej wtedy, kiedy nie udało się pobrać adresu IP z serwera DHCP. Automatyczna konfiguracja adresu polega na wyliczeniu wartości trzeciego i czwartego oktetu adresu na podstawie MAC adresu karty sieciowej. Ponieważ sieć wykorzystuje maskę 16-bitową, prawdopodobieństwo powtórzenia się adresu IP w tak zaadresowanej sieci jest bardzo niskie, a dodatkowo komputer z przypisanym adresem z sieci APIPA nieustannie próbuje połączyć się z serwerem DHCP, aby uzyskać normalny adres sieciowy. Więcej o APIPA możesz przeczytać w RFC3927.

Ile hostów w zależności od maski? Jak to policzyć?

Wróćmy jeszcze na chwilę do identyfikatora sieci i maski. Obliczając maksymalną liczbę hostów w sieci, należy pamiętać, że identyfikator sieci i broadcast nie mogą być używane do adresowania komputerów i od maksymalnej liczby adresów IP w sieci należy odjąć te dwa adresy. Właśnie z tego powodu wzór na obliczenie maksymalnej liczny hostów to 2^n -2 gdzie n to 32 – maska.

W związku z tym, że w każdej sieci tracimy dwa adresy, podział na zbyt małe podsieci jest zwyczajnie nieopłacalny. W sieci z maską /28 możemy zaadresować maksymalnie 2^4 – 2 = 14 hostów tracąc 2 adresy na identyfikator i broadcast. Natomiast w sieci z maską /29 będzie to już tylko 2^3 – 2 = 6 hostów znów tracąc 2 adresy. Sieć z maską /30 wykorzystuje 4 adresy, ale skutecznie może zaadresować tylko 2 hosty – 2^2 – 2 = 4.

Na koniec tabelka, która pokazuje, ile hostów można umieścić w sieciach o maskach różnej długości. Żeby nie robić zbyt długiej tabelki szczegółowo skupiam się tutaj tylko na najpopularniejszych maskach sieciowych.

Ilość adresów IP w sieci w zależności od maski

O czym nie powiedziałem a co powinieneś jeszcze wiedzieć

Nawet tak obszerny artykuł nie pozwolił na umieszczenie wszystkich informacji o IPv4. Zdecydowanie informacje trzeba będzie uzupełnić o budowę nagłówka IP i omówienie jego pól. Postaram się uzupełnić te informacje w oddzielnym wpisie i podlinkować go tutaj. We wpisie zabrakło również kilku mniej oczywistych informacji o IPv4, o których uważam, że trzeba wiedzieć. Dlatego poniżej wrzucam kilka haseł i linków dla tych, którym ten artykuł nie wystarczył 😊

  • Poza wymionymi przeze mnie adresacjami prywatnymi i zarezerwowanymi możecie się spotkać jeszcze z kilkoma innymi grupami adresów i podsieciami. Są one jednak tak rzadko używane i do tak specyficznych celów, że nie pisałem o nich w artykule. Jeśli masz ochotę zgłębić tę wiedzę, to zapraszam na stronie IANA, gdzie znajdziesz informację o wszystkich zarezerwowanych adresach IPv4: https://www.iana.org/assignments/iana-ipv4-special-registry/iana-ipv4-special-registry.xhtml
  • Najczęściej używanym zapisem adresu IPv4 jest ten używający czterech oktetów rozdzielonych kropkami. Można się jednak spotkać również z zapisem dziesiętnym. Jest to adres binarny przekonwertowany do dziesiętnego, więc nie jest on najłatwiejszy do zapamiętania, ale jeśli chciałbyś przygotować dziwnie wyglądający link do strony, to jest to świetna opcja. Zresztą sam zobacz na przykłady dwóch takich linków https://16843009, https://134744072

Na koniec….

Jeśli doczytałeś aż do tego miejsca, to serdecznie gratuluję 😊. Jeśli artykuł Ci się podobał, koniecznie daj mi znać. Podziel się również informacją o wpisie z innymi, którym ta wiedza może się przydać. Dzięki!

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *