Protokół IP (Internet Protocol) występuje w pakiecie TCP/IP, jest to bezpołączeniowy protokół, który to wysyła dane w formie datagramów. Bezpołączeniowość tego protokołu mówi nam o tym iż protokół IP bada czy datagramy dotarły poprawnie do adresata. Do głównych zadań tego protokołu należą:
- wyznaczenie struktury datagramu,
- wyznaczenie schematu adresacji,
- zarządzanie ruchem datagramów w sieci,
- fragmentacja i defragmentacja datagramów.
Protokół ten stworzony został do stosowania w sieciach, w których stosowana jest komunikacja za pomocą pakietów zwanych datagramami. Jest on podstawową jednostką jaka jest przesyłana w sieci poprzez warstwę Internat, jest adresowany do wielu węzłów albo do pojedynczych węzłów. Datagramy w sieci są przesyłane poprzez routery, które to stanowią węzły sieci, wyznaczają one dla danego datagramu trasę od węzła nadawczego do docelowego. Datagramy mają różne zdefiniowane maksymalne długości w zależności od sieci, przez którą są przesyłane. Z tego powodu datagram może zostać podzielony na mniejsze części (datagramy), proces ten nazywamy fragmentacją datagramów. Format otrzymanego w ten sposób nowego datagramu jest taki sam jak dowolnego datagramu niepodzielonego. Występuje oczywiście wiele innych powodów fragmentacji datagramów między innymi występuje ona gdy przesyłamy datagramy poprzez sieć rozległą, która to sieć dopuszcza do przesyłania także innych protokołów oraz pakietów o innej długości (np. sieć X.25). Proces defragmentacji wysłanego datagramu z powstałych części odbywa się w komputerze odbiorcy.
Sam datagram budową przypomina ramkę fizycznej sieci podzielony jest bowiem na nagłówek i dane, różnica występuje polu nagłówka który w przypadku ramki sieci zawiera adres fizyczny natomiast w przypadku datagramu zawiera adres IP (który to został opisany na stronie 34). Pola datagramu są podobnie jak w przypadku ramek sieciowych poszczególnych standardów ściśle określone, format pakietu IPv4 przedstawia Rysunek 2.2.
0 4 8 12 16 20 24 28 31
Rysunek 2.2. Format datagramu IPv4 Źródło: Opracowanie własne na podstawie [27]
|
Każde z pól pełni określoną funkcję:
- wersja – pole to zajmuje 4 bity, zawarty w nim jest numer wersji protokołu IP użytego do stworzenia datagramu. Informacja ta jest konieczna ponieważ urządzenia sieciowe mogą stosować różne wersje tegoż protokołu;
- długość nagłówka – podobnie jak wersja zajmuje 4 bity, informuje o długości nagłówka wyrażaną w słowach 32-bitowych. Minimalna, a zarazem typowa długość nagłówka wynosi 5;
- typ obsługi – jest to pole 8-bitowe, decyduje w jaki sposób datagram powinien zostać obsłużony. Pole to składa się z pięciu podpól:
– pierwszeństwo – zajmuje trzy bity, w nim zawarta jest informacja o ważności danego datagramu, od 000 (normalny stopień) do 111 (sterowanie siecią),
O – zajmuje 1 bit, zawierające informację o opóźnieniu w sieci. Przy czym wartość „0” mówi o normalnej transmisji, natomiast wartość „1” o małym opóźnieniu,
S – zajmuje 1 bit, informuje o przepustowości. Gdzie „0” oznacza przepustowość normalną, natomiast „1” dużą,
P – zajmuje 1 bit, informuje nas o poziomie niezawodności. Wartość „0” to normalna niezawodność, natomiast wartość „1” w tym bicie mówi nam o dużej niezawodność,
– ostatnie dwa bity nie są używane, zawsze mają wartość „0”. Są przeznaczone dla nowych zastosowań;
• długość całkowita – jest to pole 16-bitowe, które definiuje długość datagramu IP mierzoną w bajtach. Ponieważ jest to pole 16 bitowe maksymalna długość datagramu wynosi 65535 (czyli 216 — 1);
• identyfikacja – podobnie jak poprzednie jest to pole 16-bitowe, stosowany jest w celu jednoznacznego oznaczenia wszystkich fragmentów datagramu pierwotnego;
• znacznik – pole to zajmuje 3 bity: pierwszy – zawsze jest to zero, drugi – mówi nam czy możemy (1) czy też nie możemy (0) dokonać fragmenta- cji datagramu, trzeci – służy do zidentyfikowania ostatniego fragmentu (0) w przeciwnym razie (1) wystąpi kolejny fragment;
• przesunięcie fragmentu – jest to pole 13-bitowe, informuje ono, którą częścią datagramu jest dany fragment;
• czas życia (TTL) – pole to zajmuje 8 bitów, określa jak długo datagram może przebywać w sieci, wartość ta jest wyrażana w sekundach. Zazwyczaj mieści się w przedziale od 15 do 30 sekund. Protokół TCP/IP wymaga aby wartość ta zmniejszyła się o 1 przy każdym przejściu przez router. Zapobiega to krążeniu datagramu w sieci w nieskończoność, ponieważ gdy pole to osiągnie wartość zero router odrzuci datagram;
• protokół – jest to pole 8-bitowe, które zawiera numer określający protokół warstwy transportowej, do którego dane zawarte w datagramie mają być przesłane. Cała lista protokołów tej warstwy zawiera około 50 pozycji, do najczęściej stosowanych należą: ICMP oznaczony numerem 1 i TCP oznaczony numerem 6. Numery innych protokołów dostępne są w dokumentach RFC;
• suma kontrolna nagłówka – podobnie jak pole długości całkowitej zajmuje ono 16 bitów, służy ono jedynie do sprawdzenia czy nagłówek został poprawnie dostarczony. Pole to zawiera jedynkowe uzupełnienie sumy kolejnych 16- bitowych słów nagłówka (w przypadku TCP oraz UDP suma kontrolna jest liczona dla całego pakietu). Obliczona wartość jest porównywana z wartością tam zapisaną, jeśli jest to ta sama liczba nagłówek został poprawnie przesłany, jeśli zaś liczby te są różne w przekazie nastąpiło przekłamanie;
• adres IP nadawcy – jest polem 32-bitowym, które to pole zawiera adres IP nadawcy;
• adres IP odbiorcy – podobnie jak adres IP nadawcy jest to pole 32-bitowe, które zawiera adres IP odbiorcy;
• opcje IP – pole to ma zmienną długość, będącą wielokrotnością 8 bitów. Nie zawsze pole to występuje w nagłówku. Składa się z pięciu podpól: podpola kopiuj („1” oznacza kopiuj do każdego fragmentu, a „0” kopiuj tylko do pierwszego), podpola klasa opcji (znaczenie tego pola jest przedstawione w Tabeli 2.1) oraz podpola numer opcji (znaczenie tego pola jest przedstawione w Tabeli 2.2);
Tabela 2.1. Klasy opcji oraz ich znaczenie
Klasa opcji
|
Znaczenie
|
0
|
Kontrola datagramów lub sieci
|
1
|
Zarezerwowane do Przyszłego użytku
|
2
|
Poprawianie błędów i pomiary
|
3
|
Zarezerwowane do przyszłego użytku
|
Źródło: Opracowanie własne na podstawie [27]
• uzupełnieni – podobnie jak pole opcji IP zazwyczaj nie występuje w nagłówku. Jest stosowane w celu dopełnienia poprzedniego pola do wielokrotności 32 bitów;
• dane – pole to ma zmienną długość, która to jest równą długości danych transmitowanych w sieci [6, 15, 16, 27].
Tabela 2.2. Numery opcji oraz ich znaczenie
Klasa
opcji
|
Numer
opcji
|
Długość
|
Opis
|
0
|
0
|
–
|
Koniec listy opcji. Jest stosowana kiedy opcje jeszcze
|
się nie kończą, a nagłówek już tak.
|
|||
0
|
1
|
–
|
Bez przypisanej funkcji – wypełnienie.
|
0
|
2
|
11
|
Tajność – używana do zastosowań wojskowych.
|
0
|
3
|
zmienna
|
Swobodne trasowanie wg nadawcy – używany do
|
prowadzenia datagramu określoną ścieżką.
|
|||
0
|
7
|
zmienna
|
Zapisuje trasę – używana do śledzenia trasy.
|
0
|
9
|
zmienna
|
Rygorystyczne trasowanie wg nadawcy – używana do
|
ścisłego prowadzenia datagramu.
|
|||
2
|
4
|
zmienna
|
Intersieciowy datownik – używany do zapisywania
|
czasów wzdłuż ścieżki.
|
Źródło: Opracowanie własne na podstawie [27]
Z powodu małej puli adresowej a także błędów występujących w IPv4, rozpoczęto prace nad nowym protokołem. W wyniku tych prac powstał protokół IPv6 przedstawia to Rysunek 2.3.
Rysunek 2.3. Format datagramu IPv6
0 4 8 12 16 20 24 28 31
Adres nadawcy IP
Adres odbiorcy IP Dane
|
Źródło: Opracowanie własne na podstawie [15]
Nagłówek powstałego protokołu różni się od poprzedniej wersji :
• pole Typ obsługi zostało zastąpione Klasą ruchu i jest używane do różnicowania prostszych usług;
• pole Długość nagłówka zostało całkowicie usunięte, dzięki czemu możemy między innymi znacząco zmniejszyć długość pakietu. Pojawiło się za to pole Etykieta Przepływu, które stosowane jest do implementacji QoS;
• dodatkowo wprowadzono pole Długość datagramu bez nagłówka, gdzie wartość zerowa mówi nam o tym, iż długość została określona przy pomocy
Jumbo Poyload. Pozwala to nam na tworzenie datagramów, których długość mieści się w przedziale od 65’536 do 4’294’967’295 bajtów, nazywanych Jumbogramami;
• pole które zawierało informacje o fragmentacji zmodyfikowano i przeniesiono do dodatkowego nagłówka;
• zamiast pola Protokół pojawiło się pole Następny nagłówek, w którym to konkretny wpis informuje o charakterze dodatkowego nagłówka, który umiejscowiony jest pomiędzy adresem odbiorcy, a danymi. Jeśli dodatkowy nagłówek nie jest wprowadzany, wówczas długość pojedynczego nagłówka IPv6 wynosi 40 bajtów (8 pól). w przypadku bezpieczeństwa szczególnie ważne są nagłówki: ESP (ang. Encapsulating Security Payload) – numer 50 i AH (ang. Authentication Header) – numer 51;
• pole TTL zastąpiono polem Liczba przeskoków (przejść przez router) [15].
Adres IPv4
Adres IPv4 jest to 32-bitowa liczba całkowita, która to informuje nas o sieci do jakiej został podłączony komputer oraz określa adres tego komputera. Ze względu na ilość bitów jaka jest przeznaczona na adres sieci i komputera adresy IPv4 dzielimy na 5 klas, a mianowicie na:
klasa A – w klasie tej pierwszy bit zawsze jest bitem zerowym, kolejne 7 to bity adresu sieci. Pozostałe 24 bity tworzą adres komputera podłączonego do tej sieci. W klasie tej mamy 27 = 128 adresów sieci, które to mogą mieć po 65536 adresów komputerów;
Rysunek 2.4. Klasa A
Źródło: Opracowanie własne na podstawie [27]
klasa B – w klasie tej pierwsze dwa bit to zawsze „10”, kolejne 14 to bity adresu sieci. Pozostałe 16 bitów tworzy adres komputera podłączonego do tej sieci. W klasie tej mamy 214 adresów sieci oraz 216 = 65536 adresów komputerów;
Rysunek 2.5. Klasa B
1 | 0 | Sieć (14 bitów) |
Komputer (16 bitów) |
Źródło: Opracowanie własne na podstawie [27]
klasa C -w klasie tej pierwsze trzy bit to zawsze „110”, kolejne 21 to bity adresu sieci. Pozostałe 8 bitów tworzy adres komputera podłączonego do tej sieci. W klasie tej mamy 221 adresów sieci oraz 28 = 256 adresów komputerów;
1 | 1 | 0 | Sieć (21 bitów) | Komputer (8 bitów) |
Rysunek 2.6. Klasa C
Źródło: Opracowanie własne na podstawie [27]
|
klasa D – w klasie tej pierwsze cztery bit to zawsze „1110”, pozostałe 28 bitów stanowi adres grupowy. Klasa ta jest stosowana wtedy gdy mamy do czynienia z jednoczesną transmisją danych do dużej ilości urządzeń w sieci;
1 | 1 | 1 | 0 | Adres grupowy (28 bitów) |
Rysunek 2.7. Klasa D
Źródło: Opracowanie własne na podstawie [27]
|
klasa E – w klasie tej pierwsze pięć bitów to zawsze „11110”, pozostałe bity zarezerwowane są do przyszłych rozwiązań.
1 | 1 | 1 | 1 | 0 | Zarezerwowane na przyszłość |
Rysunek 2.8. Klasa E
Źródło: Opracowanie własne na podstawie [27]
|
Adresy IPv4 podawane są w postaci czterech cyfr dziesiętnych, które oddzielone są kropkami. Adresy przyporządkowane poszczególnym klasą adresów IPv4 przedstawia Tabela 2.3.
Tabela 2.3. Zakres adresów IPv4 w poszczególnych klasach
Klasa
|
Najniższy adres
|
Najwyższy adres
|
A
|
1.0.0.0
|
126.0.0.0
|
B
|
128.0.0.0
|
191.255.0.0
|
C
|
192.0.0.0
|
223.255.255.0
|
D
|
244.0.0.0
|
239.255.255.255
|
E
|
240.0.0.0
|
247.255.255.255
|
Źródło: Opracowanie własne na podstawie [27]
Mimo że każda klasa ma przyporządkowane adres, to nie wszystkie mogą być użyte do oznaczania sieci czy też komputerów w niej występujących. Część adresów IPv4 z całej puli adresowej ma z góry ustalone zastosowanie, są to:
- od 10.0.0.0 do 10.255.255.255 – adresy prywatne,
- od 172.16.0.0 do 172.31.255.255 – adresy prywatne,
- od 192.168.0.0 do 192.168.255.255 – adresy prywatne.
Pozostałe adresy, które nie zostały zawarte w żadnej z klas także mają określone zastosowanie i tak:
- cała pula 127.X.X.X – jest przeznaczona na adresy diagnostyczne, przy czym 127.0.0.1 jest adresem pętli zwrotnej,
- 0.0.0.0 – oznacza „ścieżkę domyślną”,
- w każdej klasie adresów zarezerwowane są adresy: wyzerowane i wyjedynkowane (adres wyzerowany jest stosowany przez IP w tablicach rutowania, natomiast adres wyjedynkowany jest to adres rozgłoszeniowym dla danej podsieci) [6, 15, 16, 27].
Adres IPv6
Adres IPv6 zwiększył swój rozmiar z 32-bitowego ciągu, na ciąg 128-bitowy. Spowodowało to wzrost puli możliwych do przydzielenia adresów z 232 & 4,3×109 w IPv4 do 2128~ 3,4×1038 w IPv6. Adres ten ma postać 8 bloków, z których każdy jest 16-bitowym ciągiem, oddzielonych od siebie dwukropkiem, np.:
x:x:x:x:x:x:x:x, gdzie x = yyyy yyyy yyyy yyyy
Każdy ciąg yyyy jest prezentowany w formie szesnastkowej, np.:
0111 : FACB :1001 AC16 : 0000 : 0000 : 0012 : EECD
Grupa czterech zer zastępowana jest jednym, natomiast zera stojące po lewej stronie innej grupy zostaje pominięte, dzięki temu otrzymujemy:
111 : FACB :1001 AC16 : 0 : 0 : 12 : EECD
Zera które są oddzielone jednym dwukropkiem możemy zastąpić dwukropkiem, jednak taki podwójny dwukropek w zapisie może wystąpić tylko jeden raz:
111 : FACB :1001 AC16 :: 12 : EECD
Podobnie jak w IPv4 w IPv6 pewne adresy mają z góry przypisane przeznaczenie i tak:
- ::/128 – jest to adres zerowy, który używany jest tylko w oprogramowaniu;
- ::1/128 – jest to adres lokalnego hosta;
- ::/96 – adresy kompatybilne z adresem IPv4 hosta który korzysta z IPv6 i IPv4;
- ::ffff/96 – adresy kompatybilne z adresem IPv4 hosta który korzysta tylko z IPv4;
- fe80::/10 – adres typu link-local, który jest używany wewnątrz sieci, w czasie autokonfiguracji;
- ff00::/8 – adres rozgłoszeniowy [15].