Maski w IPv4 – jak to liczyć?

black network switch with cables

Maski w IPv4 – jak to liczyć?

Temat ten poruszałem kilka lat temu na moim poprzednim blogu. Stwierdziłem jednak, że mój wpis z tamtego czasu nadal jest dosyć ciekawy i cały czas aktualny. Dlatego też postanowiłem go nieco zmodyfikować i rozbudować oraz opublikować ponownie właśnie tutaj

Podstawowe pojęcia

Na początku wypadałoby wyjaśnić w kilku słowach podstawowe pojęcia, których będziemy używać w dalszej części opracowania:

  • Adres sieci – jest to adres IP określający całą sieć, nie możemy go przypisać do żadnego hosta. W ramach jednej podsieci możemy zaadresować określoną (właśnie przez maskę) liczbę hostów.
  • Adresy hostów – są to adresy przydzielone do konkretnych urządzeń w sieci.
  • Adres rozgłoszeniowy – jest to ostatni adres w danej podsieci, służy do wysyłania komunikatów do wszystkich hostów znajdujących się w tej podsieci.
  • Maska podsieci – jest to liczba, która służy do określenia jaka część adresu IP określa adres podsieci, a jakie adresy są używane przez hosty w ramach tej podsieci.

Przykłady

Modelowym przykładem może być typowy dla sieci lokalnej adres 192.168.1.1 oraz maska 255.255.255.0 (/24). W takim przypadku adresy z powyższych definicji prezentują się następująco:

  • Adres sieci: 192.168.1.0
  • Adresy hostów: 192.168.1.1-192.168.1.254
  • Adres rozgłoszeniowy: 192.168.1.255

W przypadku zmiany maski na 255.255.0.0 (/16) zwiększy się liczba dostępnych adresów dla hostów w ramach tej podsieci:

  • Adres sieci: 192.168.0.0
  • Adresy hostów: 192.168.0.1-192.168.255.254 //(256 * 256) – 2 = 65 534
  • Adres rozgłoszeniowy: 192.168.255.255

Ostatnim najprostszym przypadkiem jest maska 255.0.0.0 (/8). Tutaj ilość możliwych do zaadresowania hostów jest już ogromna:

  • Adres sieci: 192.0.0.0
  • Adresy hostów: 192.168.0.1-192.255.255.254 //(256 * 256 * 256) – 2 = 16777214
  • Adres rozgłoszeniowy: 192.255.255.255

Jak widać na powyższych przykładach, grupy/oktety w masce odpowiadają poszczególnym grupom/oktetom w adresie IP. Tam gdzie występuje liczba 255, tam w adresie IP wyszczególniona jest część sieci, a tam gdzie 0 część przeznaczona dla hostów. Wynika to bezpośrednio z zapisu binarnego:

255.255.255.0 = 11111111.11111111.11111111.00000000

Jedynki określają, które bity mają kodować adres sieci, natomiast zera adresy hostów. Z teorii to tyle. Jak możesz zauważyć powyżej podałem tylko idealne przykłady masek, gdzie w każdym z oktetów występują albo same zera, albo same jedynki. Oczywiście w praktyce nie musi tak być – maskę można przesuwać co jeden bit, a nie tylko co osiem, jak zrobiłem to w poprzednim przykładzie.

Jak liczyć? Sposób nauczany (także w mojej) szkole

Mając na uwadze powyższe musi istnieć jakiś sposób na określenie adresu sieci oraz zakresu w jakim możemy adresować w niej hosty w przypadku użycia bardziej niestandardowej maski. Roboczo załóżmy, że mamy dany adres IP jakiegoś komputera w sieci. Jest to 192.168.20.122 z maską 255.255.255.192. Na tej postawie mamy obliczyć:

  • Adres sieci, w której się znajduje
  • Adres rozgłoszeniowy tej sieci
  • Liczbę hostów w tej sieci

Jak uczą w szkole? Generalnie robić to tak, jak zrobiłby to komputer 🙂 Czyli najpierw określimy adres sieci. W tym celu musimy zamienić jego postać na postać binarną, to samo robimy z maską. Następnie wykonujemy operację logiczną AND pomiędzy liczbami znajdującymi się w każdym z wierszy:

11000000.10101000.00010100.01111010 = 192.168.20.122
11111111.11111111.11111111.11000000 = 255.255.255.192
11000000.10101000.00010100.01000000 = 192.168.20.64 (odnaleźliśmy adres sieci, hurra!)

Następnie musimy poszukać adresu rozgłoszeniowego, w tym celu znowu zamieniamy naszą maskę na postać binarną oraz wykonujemy tym razem operację logiczną NOT:

11111111.11111111.11111111.11000000 = 255.255.255.192
00000000.00000000.00000000.00111111 = 0.0.0.63

Tak otrzymaną liczbę dodajemy do adresu sieci:

192.168.20.64
+0.0.0.64
192.168.20.128 (no i mamy adres rozgłoszeniowy)

Na liczbę możliwych do zaadresowania hostów też jest mądry wzór: 2^(32 – liczba bitów o wartości 1 w masce) – 2. Tutaj wyjdzie nam 2^(32-26) – 2, czyli 62.

Jak to liczyć? Sposób alternatywny – przy użyciu systemu dziesiętnego

Powyżej przedstawiłem sposób, o którym można przeczytać chyba w połowie internetu i którego też nauczano mnie w szkole. Problem w tym, że jest on dosyć… niewygodny. Bez kawałka kartki ciężko na szybko policzyć na jakim adresie sieć zaczyna się, a na jakim kończy. Oczywiście w internecie znajduje się masa kalkulatorów, z których można korzystać – jednak chciałbym zaprezentować inny, moim zdaniem szybszy sposób na policzenie tego wszystkiego co przedstawiłem powyżej. Będę tutaj operować tylko i wyłącznie na systemie dziesiętnym, który dla człowieka jest troszkę bardziej intuicyjny. Zostańmy dla ułatwienia przy tym samym przykładzie co powyżej. Czyli adresie 192.168.20.122 z maską 255.255.255.192.

Najpierw określmy, co jaką liczbę następuje adres kolejnej sieci. W tym celu należy od liczby 256 odjąć końcówkę naszej maski:

256 – 192 = 64

Co mówi nam ten wynik? Mówi, że każda kolejna sieć będzie mieć adres +64 do ostatniej sieci. Dokładniej:

  • Sieć pierwsza – 192.168.20.0 //+64
  • Sieć druga – 192.168.20.64 //+64
  • Sieć trzecia – 192.168.20.128 //+64
  • Sieć czwarta – 192.168.20.192  //+64
  • 192.168.20.256 //nie możliwe, taki adres nie istnieje

Nasz host ma adres 192.168.20.122 – widać wyraźnie, że musi znajdować się w sieci 192.168.20.64.
Łatwo można też określić adres pierwszego i ostatniego hosta w tej sieci. Pierwszy host będzie miał adres 192.168.20.64 + 1, czyli 192.168.20.65. Ostatni host 192.168.20.126, ponieważ ostatni adres w tej sieci 192.168.20.127 – przeznaczony jest dla rozgłoszenia.

Określenie liczby hostów w takiej sieci też nie jest żadnym problemem. Wiemy przecież, że każda następna sieć to +64 do adresu, gdzie pierwszy adres przeznaczony jest dla sieci, a ostatni dla rozgłoszenia. Dlatego też, odejmując od 64 liczbę 2 otrzymamy maksymalną liczbę hostów w tej sieci, czyli 62.

A co w przypadku innych masek?

Zasada pozostaje niezmienna. Jedyna różnica, jaką można zauważyć jest sposób, w jaki liczmy maksymalną liczbę hostów w sieci. Załóżmy, że mamy dany adres z klasy B: 128.65.18.100, przy masce 255.255.128.0. Obliczmy te same wartości, co w poprzednim przykładzie:

Tak, jak wcześniej określamy adres sieci: 256 – 128 = 128

W związku z tym, wiemy że:

  • Sieć pierwsza: 128.65.0.0 //+128
  • Sieć druga: 128.65.128.0

W tym momencie widać już, że nasz host znajduje się w sieci 128.65.0.0.
Adres pierwszego hosta w tej sieci to 128.65.0.1, natomiast ostatniego 192.65.127.254. Rozgłoszenie zgodnie z definicją będzie miało ostatni adres dostępny w tej sieci: 192.65.127.255.

Teraz określmy liczbę hostów. W tym celu wystarczy wykonać proste działanie: (128*256) – 2 = 32768 – 2 = 32766. Mnożymy tutaj liczbę co jaką następuje adres nowej sieci z liczbą 256. W tym przypadku to 128. Od wyniku należy odjąć liczbę dwa, gdyż są to adresy przeznaczone dla sieci i rozgłoszenia.

Podsumowanie

To chyba na tyle. Myślę, że drugi sposób również działa i może niektórym bardziej przypaść do gustu. Jeżeli ktoś znajdzie w nim jakiś błąd zachęcam do podzielenia się spostrzeżeniami w komentarzu 🙂

Opublikuj komentarz


The reCAPTCHA verification period has expired. Please reload the page.