Adresy IP i maski 

Wstęp

Każdy protokół komunikacji w sieci wymaga jakiegoś sposobu identyfikowania (adresowania) nadawcy i odbiorcy. W protokole IP taką funkcję spełnia adres IP. Adres nie jest tożsamy z komputerem. Czasami jeden komputer może mieć wiele interfejsów sieciowych, z których każdy ma oddzielny adres IP, innym razem wiele komputerów ma wspólny adres IP (broadcast, multicast). W warstwie trzeciej modelu OSI adres jest używany do identyfikacji konkretnych elementów. Adresy IP można podzielić na publiczne (takie, które identyfikują element sieci na zewnątrz) i prywatne (używane wewnątrz sieci do identyfikacji jej elementów). Główna motywacja stosowania prywatnych adresów IP wynika z ograniczonej dostępności publicznych adresów (w wersji 4 protokołu IP jest ich zdecydowanie za mało w stosunku do potrzeb), a w mniejszym stopniu także z chęci ochrony konkretnego urządzenia przed możliwością jego „zobaczenia”/połączenia się z nim z zewnątrz sieci.

Adresu IP nie należy traktować jak „numeru rejestracyjnego” komputera. Można go zmieniać dowolnie często (np. przy każdym wejściu do Internetu lub nawet częściej). Dodatkowo kilka urządzeń może dzielić jeden adres IP. Ustalenie konkretnego komputera z którego przeprowadzona została dana operacja, jeśli mamy do dyspozycji tylko adres IP bardzo często wymaga połączenia historycznych zapisów z wielu systemów i jest wiarygodne tylko wtedy gdy dane sieci są względnie odporne na ataki typu IP spoofing.

W wersji czwartej protokołu IP (IPv4), która jest obecnie najbardziej rozpowszechniona adres IP zapisuje się najczęściej w postaci dziesiętnej jako cztery ośmiobitowe liczby oddzielone kropkami (np. 212.22.145.123 ). Innym, mniej popularnym ale użytecznym przy omawianiu masek, jest zapis dwójkowy. Kolejne oktety (grupy ośmiu bitów oddzielone są spacją (dwójkowy zapis adresu 212.22.145.123 to 11010100 00010110 10010001 01111011 ).

Klasy adresów IP

Pierwotny system podziału adresów IP na klasy uwzględniał istnienie pięciu klas (z czego trzy służą do wydzielania podsieci, a pozostałe dwie są klasami specjalnymi). Klasy A, B i C służą do wydzielania podsieci zawierających odpowiednio ok. 16 mln, 65 tys. i 254 adresy identyfikujące hosty w sieci. Zakresy adresów dla poszczególnych klas i liczba klas przedstawiona jest w tabeli 1. Klasa D to adresy identyfikujące grupy komputerów. Ich zastosowanie w założeniu powinno zmniejszyć ruch w sieci w porównaniu z nawiązywaniem oddzielnych z każdym komputerem w grupie. Klasa E jest zarezerwowana dla IETF ( www.ietf.org).

KlasaBity adresujące siećBity adresujące hostZakres adresów w sieciLiczba sieciLiczba hostów w sieci
A 8 24 1.0.0.0 – 126.0.0.0 127 ok. 16 mln
B 16 16 128.1.0.0 – 191.254.0.0 16.382 65 tys.
C 24 8 192.0.1.0 – 223.255.254.0 2.097.150 254
D --- --- 224.0.0.0 – 239.255.255.254 Brak podziału Brak podziału
E --- --- 240.0.0.0 – 255.255.255.255 --- ---

Predefiniowane klasy okazały się mało elastyczne i powodowały nieefektywne wykorzystanie dostępnych w ograniczonej liczbie adresów IP. Jako odpowiedź stworzone zostały rozszerzenia protokołu IP, które rozwiązują ten problem:

  • maski podsieci o stałej długości,
  • maski podsieci o zmiennej długości (VLSM),
  • bezklasowy wybór ścieżki między domenami (CIDR),

Maski

Maska służy do podzielenia adresu IP na część identyfikującą sieć i tą, która identyfikuje hosta. Maski możemy zapisywać na kilka sposobów. Najbardziej zwartym sposobem zapisu jest slash po którym następuje liczba bitów, które są zarezerwowane dla identyfikatora sieci (np. /24 ). Zapisując tą samą maskę w postaci dwójkowej otrzymamy 11111111 11111111 11111111 00000000 natomiast w formacie dziesiętnym 255.255.255.0. Przykładowe maski w różnych formatach zapisu przedstawione są w tabeli poniżej.

/17 11111111 11111111 10000000 00000000 255.255.128.0
/21 11111111 11111111 11111000 00000000 255.255.248.0
/26 11111111 11111111 11111111 11000000 255.255.255.192
/28 11111111 11111111 11111111 11110000 255.255.255.240
/30 11111111 11111111 11111111 11111100 255.255.255.252

Pierwszy adres w danej sieci identyfikuje sieć, a ostatni jest adresem rozgłoszeniowym (broadcast). Uzyskanie adresu sieci jeśli posiadamy adres hosta i maskę jest bardzo proste. Należy wykonać operację logiczną „AND” pomiędzy bitami adresu IP i maski. Przykładowo dla adresu 214.35.56.23/24 operacja ta wygląda następująco:

11010110 00100011 00111000 00010111	[214.35.56.23]
11111111 11111111 11111111 00000000	[255.255.255.0]
---------------------------------------------------------
11010110 00100011 00111000 00000000	[214.35.56.0]

Zapisując uzyskany adres w postaci dziesiętnej otrzymujemy 214.35.56.0 jako adres sieci. Adres rozgłoszeniowy to 214.35.56.255 bo wszystkie bity, które nie są „schowane” za maską zamieniamy na jedynki (po to aby uzyskać ostatni dostępny adres w danej podsieci). Inaczej mówiąc same zera w części adresu odpowiadającego za identyfikację hosta to adres sieci, a same jedynki to adres rozgłoszeniowy.

Zakładając, że mamy wyznaczyć adres sieci i adres rozgłoszeniowy, a także podać zakres dostępnych interfejsów dla adresu IP 199.15.177.235/25 musimy wykonać następujące kroki:

  1. zamieniamy adres IP zapisany w systemie dziesiętnym na zapis w systemie dwójkowym: 199.15.177.235 -> 11000111 00001111 10110001 11101011
  2. zapisujemy maskę w postaci dwójkowej: /25 -> 11111111 11111111 11111111 10000000,
  3. wykonujemy operację AND pomiędzy maską a adresem IP
    11000111 00001111 10110001 11101011
    11111111 11111111 11111111 10000000
    ------------------------------------------------------- 
    11000111 00001111 10110001 10000000
    
  4. uzyskany wynik zamieniamy na zapis dziesiętny (to jest adres sieci): 11000111 00001111 10110001 10000000 -> 199.15.177.128
  5. adres rozgłoszeniowy uzyskujemy uzupełniając wszystkie „nie schowane” bity na jeden: 11000111 00001111 10110001 11111111 -> 199.15.177.255
  6. w związku z tym, że adres sieci jest pierwszym adresem a adres rozgłoszeniowy ostatnim, więc adresy dostępne dla interfejsów sieciowych urządzeń mieszczą się w przedziale pomiędzy nimi: 199.15.177.1 – 199.15.177.254,

Warto zwrócić uwagę, że maska determinuje liczbę komputerów, które można włączyć do danej sieci. Pamiętając o tym, że adres IP w wersji czwartej ma długość 32 bitów, a także o tym, że pierwszy i ostatni adres w sieci jest zarezerwowany odpowiednio dla identyfikacji sieci i jako adres rozgłoszeniowy można wyznaczyć liczbę hostów obliczając liczbę bitów w adresie, które nie są „schowane” za maską (32 – długość maski), następnie podnosząc liczbę 2 do tej potęgi i odejmując od tego dwa zarezerwowane adresy. Dla przykładu, maska /26 umożliwia włączenie do sieci 62 komputery (bo 32 – 26 = 6, 2^6=64, 64 – 2 = 62 ).

Podział sieci

Jako użytkownik określonej sieci (przydzielonej nam przez kogoś mającego większą sieć) możemy z reguły dowolnie dysponować adresami, które otrzymaliśmy. Często pojawia się potrzeba wydzielenia z większej, firmowej sieci, którą administrujemy mniejszych podsieci przeznaczonych dla oddziałów firmy czy poszczególnych jej części. Można to zrobić poprzez wybranie odpowiedniego adresu sieci i przesunięcie maski „w prawo”.

Załóżmy, że mamy do dyspozycji sieć 213.15.190.0 /24 . Odliczając adres sieci i adres rozgłoszeniowy w takiej sieci możemy zmieścić 254 interfejsy sieciowe. Chcąc podzielić dostępną sieć na dwie równe części zapiszmy najpierw adres w postaci dwójkowej: 11010101 00001111 10111110 00000000. Pierwsze trzy oktety (24 bity) są ukryte pod maską i w związku z tym nie możemy ich zmieniać. Do naszej dyspozycji jest 8 bitów, które możemy dowolnie zmieniać. W związku z tym możemy wydzielić jedną sieć po prostu przesuwając maskę o jeden w prawo /25 i zostawiając ten sam adres. Sieć przydzielona jednemu z oddziałów będzie miała adres: 213.15.190.0 /25 . Możemy w niej zmieniać tylko 7 ostatnich bitów. W związku z tym adres rozgłoszeniowy będzie miał dwójkowo postać: 11010101 00001111 10111110 01111111 czyli 213.15.190.127 w zapisie dziesiętnym.

Drugą część sieci możemy zidentyfikować ustawiając pierwszy bit w ostatnim oktecie na jeden i stosując taką samą maskę, tzn. /25. Otrzymujemy dwójkowo adres 11010101 00001111 10111110 10000000, a dziesiętnie 213.15.190.128 /25. Adresem rozgłoszeniowym będzie natomiast 213.15.190.255 . Możemy oczywiście dalej podzielić jedną z otrzymanych sieci. Spróbujmy w związku z tym podzielić sieć 213.15.190.128 /25 na dwie równe podsieci. Dwójkowy zapis tego adresu znajduje się powyżej. Znów przesuwamy maskę o jeden w prawo i otrzymujemy /26 . Dla pierwszej podsieci ustawiamy siódmy bit na 0 i uzyskujemy adres sieci 213.15.190.128 /26 i adres rozgłoszeniowy 213.15.190.191 /26 . W drugiej podsieci mamy siódmy bit ustawiony na 1 i w związku z tym 213.15.190.192 /26 jako adres podsieci i 213.15.190.255 jako adres rozgłoszeniowy. Daną siec można podzielić tylko na dwie równe części. Oczywiście procedurę tą można powtarzać aż do wyczerpania adresów. Często nie da się także przydzielić liczby adresów dokładnie odpowiadającej zapotrzebowaniu dlatego w praktyce przydziela się najbliższą potęgę liczby dwa.

Wygodną metodą podziału sieci jest drzewko. Rozpoczynamy jego rysowanie od dostępnej maski sieci, którą mamy do dyspozycji. Na każdym kolejnym poziomie zwiększamy maskę o jeden i jednocześnie otrzymujemy wszystkie dostępne podsieci wraz z prefiksami, które je identyfikują.

Drzewko podsieci


Zadania 

Zadania

  1. Znajdź adres sieci i adres rozgłoszeniowy mając adres IP hosta i maskę:
    1. 212.10.37.113 /23
    2. 192.168.0.234 /25
    3. 88.17.34.195 /26
    4. 65.156.130.223 /17
  2. Mając do dyspozycji sieć
    1. 88.123.45.0 /24 wydziel trzy podsieci z który w podsieci A i B zmieści się przynajmniej 45 komputerów a w sieci C minimum 110 komputerów,
    2. 212.10.57.128 /25 wydziel dwie podsieci z których w jednej zmieści się nie więcej niż 14 komputerów a w drugiej nie więcej niż 30,
    3. 112.56.252.0 /22 wydziel trzy podsieci A, B i C w których zmieści się przynajmniej po 250 hostów (w każdej podsieci).

Słownik 



Pliki 

Ten dział zostanie uzupełniony wkrótce...

W sieci