IPv4: CIDR, VLSM i prefiks /31
 

Opisane zostały tutaj różnice pomiędzy routingiem klasowym i bezklasowym oraz obecnie stosowane sposoby podziału na podsieci i grupowania adresacji IP. Aktualnie, na wszystkich nowych urządzeniach działa domyślnie routingu bezklasowy ale istnieje możliwość zmiany tego zachowania.


Routing bezklasowy i CIDR

Routing klasowy ograniczał wygodny i efektywny sposób zarządzania adresami IP. Niezbędna była zmiana, której skutkiem powstał routing bezklasowy - CIDR (Classless Inter-Domain Routing).

Routing bezklasowy umożliwia routowanie pakietów bez zwracania uwagi na przynależność adresu do klasy. Wymaga to dodatkowej informacji, którą jest długość prefiksu (maska podsieci). Zapis maski w formie długości prefiksu pojawił się razem z CIDR, stąd często określany jest notacją CIDR. W routingu klasowym, informacje potrzebne do routowania były zaszyte w samym prefiksie (jego pierwsze bity). CIDR wymaga, aby tablice i algorytmy routowania wspierały podejmowanie decyzji w oparciu o prefiks i jego długość. Również protokoły routingu bezklasowego, muszą przenosić razem z prefiksem informację o jego długości.

Routing realizowany przez CIDR odbywa się poprzez wybranie najdokładniejszego wpisu. Jest nim wpis, który posiada “najdłuższy prefiks”. Stąd, najdokładniejszym wpisem jest trasa o długości prefiksu /32 - określa pojedynczy adres IP hosta, gdyż wszystkie bity muszą się zgadzać. Zaś najmniej dokładnym wpisem jest trasa /0 - trasa domyślna - pasuje do niej wszystko, gdyż żaden z bitów nie musi się zgadzać. 

Oczywiście, aby adres IP przełączanego pakietu pasował do wpisu w tablicy routingu, musi zajść pomiędzy nimi dopasowanie odpowiedniej ilość bitów. Jest ona określona przez długość prefiksu. 


Przykład routingu bezklasowego 

Załóżmy, że router otrzymał pakiet z adresem docelowym 10.0.1.128, a tablica routingu wygląda jak poniżej:

Network         |   Next Hop
---------------------------------

10.0.1.128/32   |  192.0.2.2
10.0.1.0/24     |  192.0.2.3
10.0.0.0/16     |  192.0.2.4
10.1.0.0/16     | 192.0.2.5
0.0.0.0/0       |  192.0.2.6 

Jako, że wybierany jest zawsze najdokładniejszy wpis, to pakiet zostanie przesłany do następnego przeskoku o adresie IP 192.0.2.2. Gdyby wpisu tego nie było w tablicy routingu, wybrany zostałby kolejny, czyli /24. Wpis o długości /0 wybierany jest tylko, kiedy żaden inny nie pasuje - przykładem jego użycia byłby pakiet do adresu 10.2.2.2.

O ile takiego działania każdy się spodziewa, to dotyczy ono tylko routingu bezklasowego.

W routingu klasowym, wszystkie podsieci składające się na daną sieć główną muszą być znane w tablicy routingu. W związku z tym, że w routingu klasowym nie wolno było tworzyć podsieci nieciągłych, inne podsieci danej sieci głównej niż te znane routerowi, nie mogły nigdzie indziej istnieć. Zatem nie ma sensu wysyłanie takich pakietów z użyciem trasy domyślnej. Dla przykładu, adres 10.0.1.128 i 10.2.2.2 należą do sieci głównej 10.0.0.0/8. W tablicy routera znane są drogi do innych podsieci sieci głównej 10.0.0.0/8, stąd z założenia inne podsieci składające się na tą sieć główną nie istnieją. Stąd w routingu klasowym pakiet zaadresowany do 10.2.2.2 zostałby w naszym przypadku odrzucony. Natomiast pakiet zaadresowany do 11.2.2.2 zostałby wysłany zgodnie z trasą domyślną.


VLSM

Nowe podejście ma wiele zalet. Możliwe jest nie tylko tworzenie podsieci o dowolnej wielkości i układanie ich w nieciągły sposób. Dodatkowo stało się możliwe tworzenie tzw. “nadsieci”, czyli agregowanie prefiksów. Ma to znaczący wpływ na wielkość obecnych tablic routingu. Oczywiście wymaga to hierarchicznej dystrybucji adresów. Agregowane prefiksy muszą posiadać takie same najbardziej znaczące bity. 

Dzięki CIDR, dostępny stał się nowy podział na podsieci, zwany VLSM od Variable Length Subnet Masking. Jest on bardzo elastyczny. Nie ma w nim w ogóle pojęcia klasy adresowej i sieci głównej. Podsieci, czyli prefiksy i ich długości mogą być dowolnej wielkości.


Przykład zastosowania VLSM

Załóżmy, że dysponujemy jednym adresem klasy B: 148.152.0.0/16 i chcemy utworzyć 5 podsieci. Dzięki VLSM, podsieci te mogą być bardziej dopasowane do naszych wymagań. Wiemy już, że możliwe jest utworzenie 5 podsieci w naszym zakresie adresowym. Zrobiliśmy to w poprzednim artykule, kiedy omawialiśmy FLSM. Doprecyzujemy zatem nasze pozostałe wymagania. Określmy ile dokładnie adresów potrzebne będzie w każdej z 5 podsieci. Nasze wymagania to:

  1. Podsieć A: 100 adresów
  2. Podsieć B: 1000 adresów
  3. Podsieć C: 300 adresów
  4. Podsieć D: 256 adresów
  5. Podsieć E: 2 adresy 

Podział na podsieci, najlepiej jest rozpocząć od podsieci wymagającej największej ilości adresów. Na końcu zobaczymy dlaczego. Tak więc zacznijmy od sieci B, która potrzebuje 1000 adresów. Wyliczyć musimy, ile bitów jest potrzebne w części hosta. Pamiętać należy o dodaniu 2 adresów, jako że w każdej podsieci mamy adresy “nieużyteczne”, którymi są adres sieci i rozgłoszeniowy. Zatem:

1000 + 2 ≤ 2N, gdzie N jest potrzebną liczbą bitów w części hosta. N = 10, gdyż 210 daje 1024.

Cały adres IP posiada 32 bity. Jeżeli w części hosta musi być 10 bitów, to w części sieci pozostaną 22 bity. 

Zatem pierwsza podsieć to 148.152.0.0/22. Potrzebujemy jeszcze określić zakres użytecznych adresów IP i adres rozgłoszeniowy. Musimy wrócić do tego, co powiedzieliśmy sobie we wcześniejszych artykułach. 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. Wiemy, że dostępne są 1024 adresy. 1024 / 2561 daje 4. W ten sposób wiemy, że adresem kolejne podsieci będzie 148.152.4.0. Numerację prowadzimy od zera, więc jest to kolejny wolny adres IP. Jako, że adres rozgłoszeniowy jest ostatnim adresem w podsieci, to będzie nim 148.152.3.255. Zakres użytecznych adresów IP, to przedział pomiędzy adresem sieci, a rozgłoszeniowym, czyli adresy od 148.152.0.1 do 148.152.3.254. 

Druga pod względem wielkości podsieć wymagana 300 adresów IP. 

300 + 2 ≤ 2N. N=9, gdyż 2N daje 512, co spełnia naszą nierówność.

I znowu, cały adres IP posiada 32 bity, a 9 z nich przeznaczamy na część hosta. W części sieci pozostaną nam 23 bity (32 - 9). Adresem drugiej podsieci jest 148.152.4.0/23, a podsieć ta pomieści 512 adresów z czego dwa są nieużyteczne. 512 / 2561 daje 2. Tak więc prefiksem kolejnej podsieci będzie 148.152.6.0, a jego długość zależna będzie od ilości potrzebnych adresów. Ostatnim adresem, czyli adresem rozgłoszeniowym będzie adres 148.152.5.255. Zakres adresów użytecznych będzie zawierał się w przedziale od 148.152.4.1 do 148.152.5.254.

Trzecia podsieć wymaga 256 adresów IP do zaadresowania urządzeń. Tutaj szczególnie należy pamiętać o 2 dodatkowych adresach. 256 adresów można zapisać na 8 bitach. 256 + 2 potrzebują już 9 bitów. Zatem nasza trzecia podsieć będzie takiej samej wielkości jak druga. Jej adres sieci to 148.152.6.0/23, pierwszy adres użyteczny to 148.152.6.1, a ostatni to 148.152.7.254. Adresem rozgłoszeniowym jest 148.152.7.255.

Kolejny wolny prefiks to 148.152.8.0. Aby wyliczyć jego długość, znowu wykorzystujemy naszą nierówność:

100 + 2 ≤ 2N. N równe jest 7. Zabierając 7 bitów na cześć hosta, pozostaje nam 25 na część sieci. Zatem naszą kolejną podsiecią będzie 148.152.8.0/25. Na 7 bitach zapisać można 128 możliwości, zatem kolejnym wolnym prefiksem stanie się 148.152.8.128. Adresem rozgłoszeniowym tej podsieci będzie 148.152.8.127 (ostatni dostępny adres IP ma zawsze w cześci hosta same jedynki). Zakres adresów użytecznych będzie w przedziale od 148.152.8.1 do 148.152.8.126.

Doszliśmy do ostatniej podsieci, która wymaga 2 adresów. Doliczając do tego adres podsieci i adres rozgłoszeniowy, potrzebujemy ich 4. 2 + 2 ≤ 2N. Nasze N wynosi 2, więc na część hosta potrzebne nam będą tylko 2 bity. Pozostałe 30 bitów będzie należało do części sieci. Biorąc kolejny wolny prefiks, naszą podsiecią będzie 148.152.8.128/30. Są w niej tylko 4 adresy IP, więc kolejnym wolnym prefiksem będzie 148.152.8.132. Adres rozgłoszeniowy to 148.152.8.131, a użyteczne adresy to 148.152.8.129 i 148.152.8.130.

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

Kolejny wolny adres IP to 148.152.8.132. Niemniej, długość jego prefiksu nie może być dłuższa niż /30. Gdybyśmy chcieli dać długość /24, to w części hosta nie znajdowałyby się same zera, stąd musielibyśmy przeskoczyć od razu do 148.152.9.0/24, zostawiając w adresacji dziurę. Widać to ładnie niżej, po rozpisaniu adresu sieci i maski binarnie.

148.152.8.132   10010100.10011000.00001000.10000100
255.255.255.252 11111111.11111111.11111111.11111100 
255.255.255.0   11111111.11111111.11111111.00000000
 
Jeżeli adresację rozpoczniemy od największej podsieci, unikniemy takiej sytuacji

Prefiks /31

Powiedzieliśmy sobie wcześniej, że z każdej podsieci musimy wyłączyć dwa "nieużyteczne" adresy. Jednym jest adres sieci (same zera w części hosta), a drugim adres rozgłoszeniowy (same jedynki w części hosta). Wyjątkiem od tej reguły jest prefiks /31 (255.255.255.254), który został opisany w RFC 3021. W podsieci /31 istnieją tylko dwa adresy, jeden ma w części hosta 0, a drugi 1. Obydwa mogą być przypisane do urządzeń. Do obsługi ruchu rozgłoszeniowego wykorzystywany jest zawsze adres rozgłoszeniowy ograniczony (limited broadcast, czyli 255.255.255.255). Wynika to z braku adresu rozgłoszeniowego skierowanego (directed broadcast). Prefiks ten dedykowany jest dla połączeń point-to-point, gdzie istnieją tylko dwa końce połączenia. Jego celem jest zaoszczędzenie adresów IP. Wcześniejsza praktyka zakładała używanie prefiksów /30 (dwa adresy były marnowane niepotrzebnie) lub nienumerowanie takich interfejsów (utrudniało to zarządzanie i rozwiązywanie problemów). 


Agregacja prefiksów

Gdybyśmy chcieli dokonać agregacji dwóch podsieci 148.152.4.0/23 i 148.152.6.0/23, trzeba znaleźć ich wspólne najbardziej znaczące bity. 

10010100 . 10011000 . 00000100 . 00000000 = 148.152.4.0/23

10010100 . 10011000 . 00000110 . 00000000 = 148.152.6.0/23

 

Nową długością prefiksu, będzie wspólna ilość bitów. Widać, że posiadają one wspólne 22 bity. Stąd nowym prefiksem, którym swoim zakresem pokryje dwie powyższe podsieci będzie 148.152.4.0/22.

Widać tutaj sporą elastyczność VLSM. Granica pomiędzy częścią sieci, a częścią hosta może być na dowolnym bicie. Cały adres IP jest tak naprawdę jedną dużą 32 bitową liczbą. Tworzenie podsieci lub grupowanie adresów sprowadza się do tego samego, określenia wspólnych najbardziej znaczących bitów. Pomimo tego, że obecnie do adresowania IPv4 stosowany jest VLSM, to warto znać zagadnienia związane z klasowością i FLSM omówione w poprzednich artykułach. Wynika to z domyślnego zachowania niektórych poleceń, protokołów oraz ich wartości domyślnych.


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.