Rafał Rudewicz

13 kwietnia 2019

Inna Sieć Newsletter


Podstawa obecnego internetu - protókół IP w wersji 4. Dowiedz się jak wygląda nagłówek, czym jest maska podsieci czy do czego służy CIDR oraz VLSM.
Protokół IPv4

i 3 Spis treści

Protokół komunikacyjny IP „pracuje” w warstwie 3 modelu TCP/IP niezależnie od warstwy fizycznej. Oznacza to, że nie ma znaczenia czy dany host jest podłączony poprzez port rj-45, światłowód czy korzystamy z komunikacji bezprzewodowej. Wszystkie urządzenia mogą korzystać z różnych mediów fizycznych, a jednocześnie pozostać w tej samej sieci i korzystać ze wspólnej adresacji.

Dzięki protokołowi ARP (adress resolution protocol) możemy poinformować warstwę drugą który adres fizycznych (MAC) odpowiada konkretnemu adresowi logicznemu warstwy trzeciej. Dzięki temu jesteśmy w stanie skomunikować urządzenia w tej samej domenie rozgłoszeniowej. Jeśli jednak chcemy skomunikować się z hostem, serwerem czy usługą która znajduje się w innej podsieci potrzebujemy protokołu routingu warstwy trzeciej inaczej trasowania np. ospf lub eigrp. Możemy również oczywiście wykorzystać trasy statyczne.

Protokół IP

Protokół IP jest z natury bezpołączeniowy. Oznacza to, że nie jest nawiązywana żadna sesja pomiędzy hostami, a komunikacja odbywa się wyłącznie na żądanie. Nie mamy żadnej pewności czy host z którym się przed chwilą komunikowaliśmy jest nadal osiągalny. Nie gwarantuje on również dostarczenia danych zarówno w całości ani ich części, w tym zakresie polega na warstwie czwartej.

Zatem do czego służy nam ten protokół? Spełnia on dwie bardzo ważne funkcje. Zapewnia jeden spójny system adresacji wykorzystywany na całym świecie. Dodatkowo umożlwia odnalezienie interfejsu sieciowego oraz trasy do niego. Adres IP zarówno nadawcy jak i odbiorcy w odróżnieniu od adresu MAC jest przekazywany w sposób niezmieniony przez całą swoją trasę. Oczywiście od tej reguły jest wyjątek w postaci NAT. W takim wypadku najcześciej ukrywamy adresy sieci wewnętrznej na naszym routerze brzegowym zamieniając go na publiczny.

Nagłówek IPv4

Nagłówek protokołu IPv4 przedstawia się w formacie tabelki dla ułatwienia zrozumiena jakie pola się w nim znajdują oraz jaka jest ich wielkość.

Do najważniejszych pól w nagłówku należy:

  • Wersja – określa która wersja pakietu IP jest w użyciu oraz dalszą sktruktukę nagłówka. Dla IPv4 wartość wynosi 4.
  • Długość – Określa jak długi jest nagłówek. Wartośc tego pola wyrażona jest jako wielokrotność 32bitowego słowa. Minimalna wartość to 5.
  • Typ – Z angielskiego Type of Service TOS. Na 8 bitach tego pola możemy poinformować następny na ścieżce router co do wymagań jakie powinno zostać spełnione przy obsłudze tego pakietu. Odpowiednik pola CoS w warstwie drugiej.
  • Długość całkowita – Określa jak długi jest cały pakiet składający się z nagłówka i danych. Maksymalny rozmiar pakietu wynosi 65 535 bajtów. Pole to ma długość 16 bitów.
  • Identyfikacja – W przypadku fragmentacji pakietu na mniejsze pozwala na późniejsze złożenie danych w całość.
  • Flagi – Choć przeznaczona na nie trzy bity wykorzystywane są jedynie dwie. Pierwszy od prawej oznacza, czy jest końcowy fragment, drugi od prawej oznacza, czy pakiet może ulec fragmentacji.
  • Przesunięcie fragmentu – wskazuje pozycję fragmentu w stosunku do oryginalnego pakietu.
  • Czas życia TTL – Wskazuje w sekundach pozostały czas przydatności danych. Wartośc tego pola jest pomniejsza o 1 za każdym razem gdy pakiet przejdzie przez router na ścieżce. Maksymalna wartość tego pola wynosi 255.
  • Protokół – Określa protokół warstwy wyższej z którego oryginalnie pochodzą dane. Pole to ułatwia poźniejszą interpretację otrzymanego pakietu przez docelowego hosta.
  • Suma kontrolna –Pole wykorzystywane w celu sprawdzenie integralności nagłówka IPv4. Ponieważ wartość TTL jest dekrementowana za każdy razem kiedy pakiet opuszcza router, pole to jest ponownie obliczane.
  • Adres nadawcy – zawiera adres nadawcy.
  • Adres odbiorcy – zawiera adres odbiorcy.
  • Opcje –Projektacji nagłówka IPv4 pozostawiając to pole stworzyli sobie furtkę do późniejszej implementacji opcji które nie były przewidziane w oryginalnym nagłówku.
  • Uzupełnienie – Jeśli pole opcje nie zawiera 32 bitów informacji, to pole dopełnia słowo do teog rozmiaru.

Adresacja IPv4

Adres IP to 32 bitowy ciąg 0 i 1 nadany interfejsowi sieciowemu lub grupie interfejsów (adresy broadcast i multicast), bądź całej sieci. Dla naszej wygody zapisujemy je w formie dziesiętnej, rozdzielone kropkami na 4 ośmiobitowe oktety o wartościach od 0 do 255. Poniżej przykład adresacji IP z wykorzystaniem prywatnej puli adresowej. Temat maski podsieci poruszymy w dalszej części artykułu.

 

Przykład adresu hosta z wykorzystaniem IP w wersji 4

Warto w tym miejscu wspomnieć, że adresy warstwy trzeciej nie muszą jednoznacznie identyfikować fizycznego urządzenia, tak jak ma to miejscu w warstwie drugiej. Dzięki wydzieleniu z adresów publicznych (trasowalnych w internecie) specjalnych adresów prywatnych (przeznaczonych do stosowania wewnątrz sieci LAN) starano się opóźnić całkowite wykorzystanie puli adresów IPv4.

Klasy adresów

Na początku istnienia protokołu IP w warstwie 4 ilość dostępnych adresów wydawała się wystarczająca. W związku z czym ograniczanie wielkości sieci było podyktowane wydajnością routerów oraz chęcią separacji podsieci. Adresy IP były rozdawane w ogromnych blokach znacznie przewyższających rzeczywiste potrzeby odbiorców. Również same protokoły routingu były stosunkowo prymitywne i działały w oparciu o klasy adresów.

Standard IP podzielił całą pulę wszystkich możliwych kombinacji 32 bitowych adresów na pięć klas. Z czego przynależność do klasy określana jest wartością reprezentowaną przez pierwszy oktet. Klasa A otrzymała prawie połowę wszystkich dostępnych adresów. Jest ona reprezentowana przez sieci zaczynające się od 1 do 126. Następna w kolejności klasa B otrzymała 1/4 adresów zaczynających się od 128-191. Najpopularniejsza nadal klasa C zawiera 1/8 dostępnych adresów zaczynających się od 192-223. Wszystkie wymienione do tej pory klasy zawierają w sobie adresy przeznaczone do komunikacji typu unicast. Oznacza to, że każdy adres powinien być przypisanu do jednego hosta.

 

Podział sieci IPv4 na klasy

IPv4 stosuje 3 klasy dla adresów unicastowych nie bez powodu. Każda sieć z klasy A pozwala na adresację 16777214 hostów. Z powodu tak ogromnej liczby hostów istnieje tylko 126 takich sieci. Nieco mniejsza klasa B pozwala na adresację 65654 hostów dla 16385 sieci. Najpopularniejsza do dnia dzisiejszego klasa C pozwala na adresację 254 interfejsów sieciowych. Pozwala jednak na stworzenie 2097152 podsieci.

Adresy służące do komunikacji multicastowej i zaczynają się od 224-239 należą do klasy D. Ostatnia klasa E początkowo była oznacza jako eksperymentalna, ale obecnie jest oznacza do wykorzystania w przyszłości. Cała sieć 0 oraz 127 jest zarezerwowana.

Prywatne adresy IP

Początkowo wszystkie adresy miały być routowalne w internecie. Jak wiemy zarówno ilość adresów miała na to pozwalać, jak również względy bezpieczeństwa nie były jeszcze tak istotne. Jednakże z biegiem czasu oraz zastraszającym tempie wykorzystywania całej puli zauważono, że wiele hostów wcale nie musi być osiągalnych, a wręcz nie powinno być z poza naszej sieci. Jeśli nie udostępniasz na swoim komputerze żadnych treści oraz nie potrzebujemy możliwości drukowania na swojej drukarce będąc na drugim końcu świata, nie potrzebujesz publicznego adresu IP (trasowalnego w internecie). To samo dotyczy komputerów w wielu firmach czy uczelniach, które często nawet jeśli są serwami nie zawsze chcemy, aby ktoś z zewnątrz miał do nich dostęp. Wychodząc na przeciw tym oczekiwaniom IANA wydała RFC 1819 w którym wydzieliła 3 pule adresów IP które mogą być wykorzystywane w sieciach prywatnych:

10.0.0.0 – 10.255.255.255 (10/8 prefix)
172.16.0.0 – 172.31.255.255 (172.16/12 prefix)
192.168.0.0 – 192.168.255.255 (192.168/16 prefix)

Dlatego wewnątrz sieci prywatnych, na przykład w sieciach domowych stosujemy adresację 192.168.0.0/24. Następnie nasz dostawca internetu stosuje NAT (network adress translation) „tłumacząc” wszystkie nasze adresy ( i somsiada też 😉 ) na adresy publiczne.
Warto równiez wspomnieć , że w protokole IP nie ma mechanizmu który by uniemożliwił trasowanie sieci prywatnych w internecie. Jest to zdefiniowane w RFC 1819, jednakże trasowanie jest nadal możliwe.

Maska podsieci

W celu lepszego zrozumienia do czego służy maska podsieci odpowiedzmy sobie na pytanie czym jest podsieć. Jest to sieć składająca się z następujących po sobie kolejno adresów. Ok, mamy 32 bity do zaadresowania co daje nam całkiem sporo możlwości. Jednakże jak możemy określić które z 4 miliardów adresów należą do naszej sieci i nie powinny być wykorzystywane przez innych? Odpowiedzią na to pytanie jest właśnie maska podsieci która składa się z ciągu następujących po sobie jedynek i zer. Jak dobrze wiemy, dla maski podsieci bity przyjmują wartość 1 wyłącznie od lewej strony. Dzięki temu możemy w łatwy sposób określić wartość maski dla danego oktetu.

 

Wartości dziesiętne możliwe do zaadresowania w masce podsieci

Dlaczego jednak maska podsieci jest maską? Ponieważ gdy „nałożymy” maskę podsięci – tak jak prawdziwą maskę – na nasz adres dostaniemy odpowiedź do jakiej sieci należy nasz host oraz jak duża jest sieć. Posłużymy się przykładem znanego już nam hosta 192.168.0.100/24 i zamienimy go na wartości binarne.

Kiedy mamy już gotową zamianę wystarczy podstawić wartości adresu IP oraz maski aby ukazał się naszym oczom idealny schemat. Patrzymy które bity mają wartość 1 zarówno dla adresu jak i dla maski. Przepisujemy je do kolejnego rzędu i tak otrzymujemy adres naszej sieci.

Tak więc korzystając z naszego przykładu wiemy, że nasz host 192.168.0.100/24 należy do sieci 192.168.0.0/24.
Co jednak z bitami które mają wartość 0 w naszej masce? Są to bity które możemy zaadresować jako hosty w naszej sieci, czyli w naszym przypadku mam 8 bitów co daje nam łącznie 256 adresów. Jednakże w każdej sieci (wyłączając /31 i /32) mamy dwa specjalne adresy – adres sieci będący pierwszym adresem oraz ostatni adres który jest adresem broadcastowym.

CIDR – Classless Inter-domain Routing

Jak już wspomnieliśmy przy projektowaniu protokołu IPv4 nikt nie spodziewał się, że obecny internet rozrośnie się na tak ogromną skalę jak ma to miejsce dzisiaj. Każdy z nas posiada przynajmniej kilka urządzeń podłączonych do sieci -komputer, telefon, telewizor, konsolę czy inteligentny zegarek. W gruncie rzeczy to nawet nie wierzchołek góry którą szykuje nam IoT gdzie praktycznie każde urządzenie elektryczne może komunikować się po IP. Dochodzimy do punktu w którym potrzebujemy ogromne ilości podsieci, jednak niekoniecznie o wielkości zdefiniowanej w oryginalnych klasach adresowych. Przykładowo do zaadresowania połączenia punkt-punkt potrzebujemy 2 adresów. Najmniejsza klasa C oferuje 254 użyteczne adresy. Tak więc dla zaadresowania 2 interfejsów sieciowych zmarnujemy 252 adresy, których nie możemy wykorzystać nigdzie indziej.

Wychodząc na przeciw potrzebie lepszego dopasowania wielkości naszych sieci powstał Classless InterDomain Routing. Co on wprowadził do sieci? Początkowo klasy adresów miały z góry zdefiniowane maski. Klasa A /8, klasa B /16 oraz klasa C /24, jednak z zastosowaniem CIDR możemy tworzyć klasy sieci z maską podsieci o dowolnej długości.

Wszystkie współczesne protokoły routingu pozwalają na wykorzystanie CIDR, jednak należy mieć na uwadze, że pierwsze protokoły routingu np. RIPv1 wspierają tylko routing klasowy.

VLSM – Variable Length Subnet Mask

Kolejnym rozwiązaniem usprawniającym efektywne wykorzystanie sieci IPv4 jest Variable lenght subnet Mask – VLSM. Rozwiązanie to jest bardzo podobne do Classless Inter-domain Routing ponieważ również pozwala na podzieleniu większej podsieci na kilka mniejszych. Jednak jak zawsze diabeł tkwi w szczegółach.

Wykorzystanie maski podsieci nie było konieczne, ponieważ na podstawie pierwszego oktetu można było okreslić przynależność adresu do danej klasy. Dzięki czemu rozmiar był z góry ustalony. Jednak wraz z CIDR podział większej sieci np. /16 na mniejsze zakładał wykorzystanie masek o takiej samej długości np. /24. Możliwość utworzenia podsieci o różnych długościach maski wprowadzono dopiero w VLSM. W ten sposób możemy otrzymać blok adresów IPv4 o długości /24 i podzielić go na kilka /26 oraz jednocześnie wydzielić mniejsze jeszcze mniejsze sieci /30.

Rafał Rudewicz

Rafał Rudewicz

Specjalizuję się w rozwiązaniach Enterprise oraz Service Provider. Projektuję, wdrażam oraz naprawiam sieci dla największych firm na świecie.

0 komentarzy

Wyślij komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *