Fragmentacja

    W idealnym przypadku cały datagram mieści się w jednej ramce fizycznej. Nie zawsze jednak jest to możliwe.

    Dzieje się tak dlatego, że datagram może przemieszczać się przez różne sieci fizyczne. Każda z nich ma ustaloną górną granicę ilości danych, które mogą być przesłane w jednej ramce. Np. w sieci Ethernet “porcja” danych jest ograniczona do 1500 bajtów, natomiast w sieci FDDI można przesłać ok. 4470 bajtów w jednej ramce.

    Ten parametr sieci nosi nazwę maksymalnej jednostki transmisyjnej danej sieci -MTU (ang. Maximum Transfer Unit).

    Wielkość MTU może być całkiem mała, np. niektóre rodzaje sprzętu ograniczają porcje danych do 128 i mniej bajtów. Ograniczenie wielkości datagramów, tak aby pasowały do najmniejszego MTU, byłoby nieefektywne w przypadku przechodzenia przez sieci, które mogą przenosić większe ramki. Jednak zezwolenie, aby datagramy były większe niż minimalne sieciowe MTU sprawia, że datagram może nie zawsze zmieścić się w pojedynczej ramce sieciowej.

    Wobec tego zamiast projektować datagramy, które spełniają ograniczenia sieci fizycznych, oprogramowanie TCP/IP dobiera wygodny początkowy rozmiar datagramu i oferuje sposób dzielenia datagramu na mniejsze części, kiedy datagram musi przejść przez sieć, która ma małe MTU.

    Mniejsze kawałki, na które jest dzielony datagram nazywane są fragmentami, a proces ten nazywa się fragmentacją. Gdy takie pofragmentowane datagramy dotrą do odbiorcy podlegają procesowi odwrotnemu czyli defragmentacji.

 

 

    Jak widać na rysunku fragmentacja ma zwykle miejsce w routerze gdzieś na trasie między nadawcą a odbiorcą końcowym. Router otrzymuje datagram z sieci o dużym MTU i musi go przesłać przez sieć, której MTU jest mniejsze niż rozmiar datagramu.

    Protokół IP nie ogranicza rozmiaru datagramów ani nie gwarantuje, że duże datagramy zostaną dostarczone bez fragmentacji. Nadawca może wybrać dowolny rozmiar datagramu, jaki uważa za stosowny - fragmentacja i składanie dokonują się automatycznie, nadawca nie musi wykonywać tutaj żadnych specjalnych czynności.

    Fragmentowanie datagramu oznacza dzielenie go na wiele części. Każda z tych części ma format pierwotnego datagramu.

    Rysunek przedstawia wynik fragmentacji. Każdy z fragmentów zawiera nagłówek, w którym jest powielona większość zawartości nagłówka pierwotnego datagramu (nie licząc bitu w polu ZNACZNIKI, który wskazuje, że jest to fragment), a za którym jest tyle danych, ile może być przeniesione we fragmencie, tak aby długość całkowita nie przekroczyła MTU sieci, przez którą musi on przejść.

 

 

    W intersieci TCP/IP od chwili, gdy datagram jest dzielony na fragmenty, fragmenty te podróżują jako oddzielne datagramy, aż do ostatecznego odbiorcy, gdzie muszą zostać złożone. Rozwiązanie to ma dwie wady. Ponieważ datagramy nie są składane natychmiast po przedostaniu się przez sieć o małym MTU, małe fragmenty muszą być przenoszone od miejsca fragmentacji aż do końcowego odbiorcy, nawet jeżeli niektóre sieci fizyczne napotykane za miejscem fragmentacji mają duże MTU. Po drugie, gdy jakiś fragment zostanie zagubiony, datagram nie może zostać odtworzony. Maszyna odbierająca, gdy otrzymuje fragment początkowy, uruchamia zegar składania. Gdy czas na zegarze przekroczy określoną wartość, zanim przybędą wszystkie fragmenty, maszyna odbierająca porzuca otrzymane fragmenty bez przetwarzania datagramu. Stąd prawdopodobieństwo utraty datagramu wzrasta, gdy pojawia się fragmentacja, gdyż utrata pojedynczego fragmentu powoduje utratę całego datagramu.

    Kontrola Fragmentacji

    Po tych wyjaśnieniach wróćmy do nagłówka datagramu. Trzy pola nagłówka IDENTYFIKACJA, ZNACZNIKI, PRZESUNIĘCIE FRAGMENTU służą kontroli procesów fragmentacji i składania datagramów.

    Pole IDENTYFIKACJA (16-bitowe) zawiera liczbę całkowitą jednoznacznie identyfikującą datagram. Identyfikator jest niezbędny, gdyż zapobiega wymieszaniu się fragmentów pochodzących od różnych datagramów - wszystkie kawałki będące częściami tego samego datagramu posiadają ten sam identyfikator.

    Pole ZNACZNIKI (3-bitowe) służy do kontroli fragmentacji. Pierwszy z trzech bitów jest nie używany, nadanie drugiemu wartości 1 oznacza bezwzględny zakaz fragmentacji. Jeśli datagram nie może być przesłany w całości, zostaje odrzucony i sygnalizowany jest błąd. Ostatni z bitów ZNACZNIKÓW umożliwia identyfikację ostatniego kawałka datagramu - ma w nim wartość 0, w pozostałych przypadkach 1.

    Pole PRZESUNIĘCIE FRAGMENTU (13-bitowe) zawiera informację w którym miejscu datagramu umiejscowione są informacje przesyłane w tym kawałku. Jest ono mierzone w jednostkach 64-bajtowych. Umożliwia to poprawne scalenie datagramu - nie istnieje nic w rodzaju kolejnego numeru kawałka w datagramie.

    Pole CZAS ŻYCIA TTL (ang. Time To Live) określa jak długo, w sekundach, datagram może pozostawać w systemie sieci. Ten limit czasowy wynosi zwykle od 15 do 30 sekund.

    Wymogiem protokołu TCP/IP jest aby każdy router podczas przetwarzania nagłówka datagramu zmniejszał wartość pola CZAS ŻYCIA co najmniej o 1, nawet jeśli rzeczywiste przetwarzanie trwało krócej.

    Jeśli jednak router jest przeciążony i czas przetwarzania jest dłuższy wówczas wartość pola CZAS ŻYCIA zmniejsza się o czas faktycznego pozostawania datagramu wewnątrz routera. Gdy wartość pola maleje do zera router porzuca datagram i wysyła do nadawcy komunikat o błędzie.

    Mechanizm ten zapobiega podróżowaniu datagramów w sieci w nieskończoność, np. gdy tablice tras są nieaktualne, a routery wyznaczają datagramom trasy w kółko.

    Pole PROTOKÓŁ zawiera numer identyfikacyjny protokołu transportowego dla którego pakiet jest przeznaczony. W rzeczywistości zawartość pola PROTOKÓŁ wyznacza format pola DANE. Numery poszczególnych protokołów transportowych określone są przez Internet Network Information Center (INTERNIC).

    Najbardziej popularnymi są: ICMP oznaczony numerem 1 oraz TCP oznaczony numerem 6. Pełna lista protokołów obejmuje ok. 50 pozycji i jest dostępna w kilku dokumentach RFC.

    Pole SUMA KONTROLNA NAGŁÓWKA służy do sprawdzenia sensowności zawartości nagłówka. Obejmuje tylko nagłówek IP i nie dotyczy w żadnym stopniu danych. Zawiera bitową negację sumy obliczonej jako suma kolejnych 16-bitowych półsłów nagłówka.

    Obliczenie sumy kontrolnej bezpośrednio po otrzymaniu pakietu oraz porównanie jej z wartością zapisaną w niniejszym polu pozwala wykryć większość przekłamań, lecz nie wszystkie: np. nie jest wykrywane zagubienie zerowego półsłowa. Ponieważ jednak sumy kontrolne protokołów TCP i UDP obejmują cały pakiet więc przemycenie tego typu błędu jest praktycznie niemożliwe.

    Pola ADRES IP NADAWCY i ADRES IP ODBIORCY zawierają 32-bitowe adresy IP pierwotnego nadawcy i końcowego odbiorcy. (Z wyjątkiem sytuacji gdy datagram zawiera opcje wyznaczania trasy przez nadawcę).

    Pole OPCJE IP ma zmienną długość.

    Pole UZUPEŁNIENIE zależy od wybranych opcji. Zawiera ono zerowe bity, które mogą być potrzebne do zapewnienia, że nagłówek ma długość, która jest wielokrotnością 32 bitów (ponieważ pole DŁUGOŚĆ NAGŁÓWKA zawiera wartość mierzoną w jednostkach 32-bitowych).

    Pole OPCJE IP nie występuje w każdym datagramie - pierwotnym zastosowaniem opcji było ułatwienie testowania i usuwania błędów.

    Długość pola OPCJE zmienia się w zależności od tego jakie opcje są wybrane. Niektóre z nich mają długość 1 bajta, inne mają długość zmienną.

    Każda opcja składa się kodu opcji długości 1 bajta po którym może się pojawić ciąg bajtów tej opcji.

 

 

    Pole OPCJE składa się z trzech części.

    1-bitowy znacznik kopiuj określa, że opcje maja być przekopiowane do wszystkich fragmentów (wartość 1), bądź tylko do pierwszego (wartość 0).

    Bity KLASA OPCJI określają ogólną klasę opcji:

 

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

 

        W następnej tabeli są przedstawione opcje, które mogą towarzyszyć datagramom IP i podano wartości KLASY OPCJI oraz NUMERU OPCJI. Jak widać większość tych opcji jest używana do celów kontrolnych.

 

Klasa opcji Numer opcji Długość Opis
0 0 - Koniec listy opcji. Używana gdy opcje nie kończą się wraz z końcem nagłówka.
0 1 - Bez przypisanej funkcji - wypełnienie
0 2 11 Tajność - używana do zastosowań wojskowych
0 3 zmienna Swobodne trasowanie wg nadawcy - używana do prowadzenia datagramu określoną ścieżką.
0 7 zmienna Zapisuj 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żywana do zapisywania czasów wzdłuż ścieżki.

 

    Aby przedstawić koleje życia datagramu należy wyjaśnić pojęcie routera i trasowania (ang. routing). W systemie z wymianą pakietów trasowanie oznacza proces wyboru ścieżki, po której będą przesyłane pakiety, a router to komputer, który dokonuje tego wyboru. Algorytm wyznaczania tras musi uwzględniać sposób przesyłania pakietu przez wiele sieci fizycznych.

    Wybór optymalnej trasy pakietu jest złożonym problemem, rozwiązywanym na wiele sposobów. Idealne oprogramowanie trasujące powinno przy wyznaczaniu tras korzystać z takich informacji, jak obciążenie sieci, długość datagramu, czy zawarty w nagłówku datagramu typ obsługi. Jednak przeważająca część oprogramowania trasującego jest znacznie mniej wyrafinowana i wybiera trasy na podstawie ustalonych informacji o najkrótszych ścieżkach.

    Chcąc zrozumieć trasowanie, musimy przypomnieć sobie architekturę TCP/IP. Intersieć składa się z wielu sieci fizycznych połączonych przez specjalizowanie komputery nazywane routerami. Każdy router ma fizyczne połączenie z jedną lub więcej sieciami, natomiast zwykły komputer ma zwykłe połączenie tylko z jedną siecią fizyczną. Zarówno komputery w sieci, jak i routery biorą udział wyznaczaniu tras datagramów. Gdy oprogramowanie użytkowe jakiegoś komputera chce nawiązać połączenie, oprogramowanie TCP/IP wysyła jeden lub więcej datagramów. Komputer - nadawca musi wybrać trasę, którą pośle datagramy.

    Upraszczając zagadnienie można wyróżnić dwa rodzaje trasowania: dostarczanie bezpośrednie i pośrednie. Dostarczanie bezpośrednie - przesyłanie danych od jednej maszyny do drugiej w ramach pojedynczej sieci fizycznej - jest podstawą komunikacji. Dwie maszyny mogą wziąć udział w bezpośrednim przesyłaniu tylko wtedy, kiedy są podłączone do tej samej sieci fizycznej (np. Ethernet). Dostarczanie pośrednie ma miejsce, gdy adresat nie jest podłączony do tej samej sieci fizycznej, co wymaga przesłania datagramu za pośrednictwem routera.

    Ponieważ zagadnienie trasowania jest złożonym problemem, zainteresowanego czytelnika odsyłamy do literatury poświęconej temu tematowi.


| Wprowadzenie | Sieć komputerowa | Protokoły | Model OSI (Open Systems Interconnection) | TCP/IP a model OSI | Adresowanie fizyczne | Adresy IP |

| Protokół Odwzorowania Adresów (ARP) | Protokół Odwrotnego Odwzorowania Adresów (RARP) | Internet Protocol (IP) | Kapsułkowanie | Fragmentacja |

| Koleje Życia Datagramu | ICMP | Określanie Ostatecznego Adresata | UDP | Multipleksowanie I Demultipleksowanie | Transmission Control Protocol (TCP) |

| Idea przesuwających się okien | Segment TCP | Porty i połączenia | Konfiguracja TCP/IP w systemie Unix | Przyszłość TCP/IP | Bibliografia |