Menu

 

Na czym polega fragmentacja

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. Ten parametr sieci nosi nazwę maksymalnej jednostki transmisyjnej (MTU - Maximum Transfer Unit). 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ą. Fragmentacja ma zwykle miejsce w ruterze na trasie między nadawcą a odbiorcą. Każdy z fragmentów zawiera nagłówek, w którym jest powielona większość zawartości nagłówka pierwotnego datagramu 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ść. Fragmenty podróżują jako oddzielne datagramy, aż do ostatecznego odbiorcy, gdzie muszą zostać złożone. Gdy jakiś fragment zostanie zagubiony, datagram nie może zostać odtworzony. Kontrola Fragmentacji - Trzy pola nagłówka: identyfikator, flagi, przesunięcie fragmentu służą do kontroli procesów fragmentacji i składania datagramów. Identyfikator 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. Flagi (3 bity) służą do kontroli fragmentacji. Pierwszy bit nie jest 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), trzeci umożliwia identyfikację ostatniego kawałka datagramu - ma wartość 0, w pozostałych przypadkach 1. Pole "przesunięcie fragmentu" określa w którym miejscu datagramu umiejscowione są informacje przesyłane w tym kawałku. Umożliwia to poprawne scalenie datagramu - nie istnieje nic w rodzaju kolejnego numeru kawałka w datagramie.