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