IPv4: FLSM oraz maska i prefiks
 

Nie od razu podział na podsieci był tak elastyczny jak obecnie. Zanim pojawił się VLSM i CIDR mieliśmy okres przejściowy, w którym protokoły routingu nie potrafiły jeszcze przenosić informacji o masce podsieci/długości prefiksu i dominował podział klasowy oraz FLSM. Do dziś na wielu urządzeniach dostępne są jeszcze protokoły routingu, posiadające takie ograniczenia, stąd warto poruszane tutaj zagadnienia chociaż kojarzyć. 


Maska podsieci i prefiks

Podział klasowy nie skalował się zbyt dobrze. Załóżmy, że potrzebujemy zbudować sieć, w której będzie znajdowało się 300 węzłów. Sieć klasy C jest zbyt mała, gdyż ma tylko 8 bitów w części hosta. Z 256 możliwości, dwie trzeba zarezerwować dla adresu sieci i rozgłoszeniowego, co daje 254 użyteczne adresy IP. Zmuszeni jesteśmy do zastosowania sieci klasy B. Mamy tam aż 16 bitów w części hosta. Daje to 65,534 użyteczne adresy hostów. Jako, że potrzebujemy tylko 300, to 65,234 adresów hostów pozostanie niewykorzystanych. 

Sztywny podział klasowy szybko został uznany za mało wydajny i elastyczny. Wprowadzone zostało pojęcie podsieci i maski podsieci. Maska podsieci wyznacza granicę pomiędzy częścią sieci i hosta w adresie IP. Jest ona 32 bitową wartością, w której jedynki oznaczają część sieci, a zera część hosta. Tak samo jak adres IP, maska została podzielona na 4 oktety i zapisana w postaci kropkowo dziesiętnej. 

Wróćmy do naszego adresu IP 148.152.32.115. Jest to adres klasy B, zatem jego domyślną maską jest:

  • kropkowo dziesiętnie 255.255.0.0,
  • binarnie 11111111.11111111.00000000.00000000.

Maska podsieci ma jeszcze jedną ciekawą właściwość. Kiedy wykonamy logiczną operację AND na adresie IP i masce podsieci, otrzymamy adres podsieci. Wynika to z tego, że maska podsieci przepisze nam część sieci i wyzeruje część hosta. Po wykonaniu operacji AND, zostaną przepisane tylko te wartości z adresu IP, gdzie znajdują się jedynki:

10010100.10011000.00100000.01110011

11111111.11111111.00000000.00000000

—————————————————————

10010100.10011000.00000000.00000000

 

Wartość 10010100.10011000.00000000.00000000 jest adresem IP 148.152.0.0, czyli adresem podsieci, do której należy wcześniej wybrany przez nas adres IP.

Wszystkie hosty w tej samej podsieci muszą mieć takie same najbardziej znaczące bity - są nimi bity przynależne do części sieci. Sprawia to, że maska podsieci zawsze posiada ciągłą ilość jedynek od strony lewej do strony prawej. Przypadłość ta, pozwoliła na użycie prostszego zapisu maski podsieci. Zapisu z użyciem prefiksu. Prefiks oznacza ilość jedynek od strony lewej do strony prawej lub ilość bitów, jaka należy do części sieci. Długość prefiksu podaje się po znaku slash (/). Korzystając z prefiksu, maskę podsieci 255.255.0.0 można zapisać w o wiele krótszej formie, tj. /16. Zapis z użyciem prefiksu nazywany jest też notacją CIDR (Classless Inter-Domain Routing).

W podziale klasowym, granica pomiędzy częścią sieci i hosta wyznaczana była na podstawie wartości pierwszego oktetu. Można zatem mówić o domyślnej masce, wynikającej z klasy adresu. Dla sieci klasy A jest to 255.0.0.0 - /8, dla klasy B 255.255.0.0 - /16, a sieci klasy C 255.255.255.0 - /24.


FLSM

Maska podsieci nie musi być ograniczona klasą adresu. Można ją wydłużyć, przenosząc bity z części hosta do części sieci. W ten sposób dochodzi do podziału na podsieci, gdzie jedną sieć klasową, dzielimy na mniejsze części, zwane podsieciami. Początkowo wszystkie podsieci musiały być tej samej wielkości, stąd podział ten nazywany był skrótowo FLSM od Fixed Length Subnet Masking

Związane to było z routingiem klasowym, który nie przenosił informacji na temat długości prefiksu (maski podsieci). Otrzymując w aktualizacji sam prefiks (np. 148.152.32.0), nie jesteśmy w stanie stwierdzić gdzie znajduje się w nim granica pomiędzy częścią sieci, a częścią hosta. Przyjęto więc zasadę, że wszystkie podsieci składające się na jedną sieć główną (wynikającą z klasy adresu), muszą posiadać tą samą długość prefiksu. Dzięki temu, dla wszystkich odbieranych prefiksów, router mógł zastosować maskę z interfejsu na którym odebrał aktualizację. Było to kolejnym ograniczeniem FLSM. Interfejs, na którym odbierana była aktualizacja routing-u o podsieciach, musiał należeć do tej samej sieci głównej co te podsieci. Bez tego nie był w stanie poprawnie zinterpretować tych informacji. W praktyce oznaczało to, że podzielona na podsieci sieć główna musiała być ciągła - nie można było jej przedzielić innymi sieciami.

Na samym początku istniało jeszcze kilka innych restrykcji. Nie można było korzystać z pierwszej i ostatniej podsieci. Pierwsza podsieć posiadała taki sam adres sieci, jak sieć główna. Ostatnia podsieć posiadała taki sam adres rozgłoszeniowy, jak sieć główna. Mogło prowadzić to do niejednoznaczności. W praktyce, routing klasowy świetnie sobie z tym radził, a podejście to prowadziło to marnowania adresów IP. W związku z tym, zdecydowano się w późniejszym etapie na wykorzystanie wszystkich podsieci. Jeszcze dziś, w interfejsie CLI niektórych urządzeń można znaleźć polecenia do zmiany tego zachowania.


Przykład zastosowania FLSM

Podczas podziału na podsieci z wykorzystaniem FLSM, należy najpierw zastanowić się nad potrzebną ilością podsieci. Wszystkie muszą mieć taką samą wielkość, czyli długość prefiksu. Stąd każda z podsieci będzie musiała pomieścić tyle hostów, ile znajdować się będzie w największym segmencie sieci. 

Załóżmy, że dysponujemy jednym adresem klasy B 148.152.0.0/16 i chcemy utworzyć 5 podsieci. Aby zacząć, trzeba określić ile bitów z części hosta powinno zostać przeznaczone na podsieci. Najprościej jest skorzystać z poniższego równania:

5 ≤ 2N, gdzie N jest szukaną przez nas liczbą bitów. 

22 to 4, więc to za mało. 23 to 8, więc spełnia nasze wymagania.

Tak więc, potrzebne będą nam 3 bity - możemy zapisać na nich 8 podsieci. Wydłużamy nasz prefiks /16 o 3 bity i w ten sposób otrzymujemy nowy: /19. W części hosta pozostaje nam 13 bitów (32 - 19 = 13), które dają możliwość zaadresowania 8,192 adresów w każdej z podsieci. Z tego oczywiście dwa z nich, adres sieci i rozgłoszeniowy nie mogą zostać wykorzystane do adresowania hostów. Mają one specjalne przeznaczenie.

Nasz podział sieci klasy B 148.152.0.0/16 na podsieci o stałej długości wygląda następująco:

Jak to szybko sprawdzić?

Adres IP to jedna 32 bitowa liczba, podzielona tylko w zapisie dla naszej wygodny. Wiemy, że w części hosta jest 13 bitów. 213 = 8,192. Zatem adresy dla każdej kolejnej podsieci będą rosły co 8,192 (adres podsieci, pierwszy adres użyteczny, ostatni adres użyteczny i adres rozgłoszeniowy). Powiedzieliśmy sobie we wcześniejszym artykule, że adres IPv4 A.B.C.D można odczytywać jako jedną liczbę, korzystając ze wzoru: A * 2563 + B * 2562 + C * 2561 + D * 2560. Podstawą w zapisie kropkowo dziesiętnym jest liczba 256. 8,192 nie jest podzielne bez reszty ani przez 2563, ani przez 2562. Za to 8,192/2561 daje nam 32. Tak więc, w każdej kolejnej podsieci, 3 oktet adresu IP powinien zwiększać się o 32. Widać, że tak jest zarówno dla adresu reprezentującego podsieć, jak i dla zakresu użytecznych adresów i adresu rozgłoszeniowego.


Zapraszamy do kontaktu drogą mailową This email address is being protected from spambots. You need JavaScript enabled to view it. lub telefonicznie +48 797 004 932.