Formát datagramu
Fragmentace

Fragmentace je proces, při kterém dochází k rozdělení příliš velkého datagramu na několik menších tak, aby jeho velikost vyhovovala parametru MTU (Maximum Transmission Unit). MTU udává maximální velikost datagramu, kterou je daná linka1) schopna přenést. Minimální hodnota MTU je v případě IPv6 1280 bajtů. Tato velikost je zvolena s ohledem na minimalizaci fragmentace.

Pojem linka zde představuje propojení uzlů v rámci 2. vrstvy referenčního modelu ISO/OSI (např. Ethernet).

Každá přenosová cesta se skládá z průchozích uzlů a linek, kde každá linka může mít různou velikost MTU. Výsledná hodnota MTU přenosové cesty se nazývá PMTU (Path MTU) a je potom daná linkou s nejnižší hodnotou MTU.

Fragmentace je náročný proces, který zbytečně zatěžuje průchozí uzly. Tento fakt je v případě protokolu IPv6 zohledněn. Proto IPv6 povoluje fragmentaci pouze a výhradně na straně odesilatele. To znamená, že pokud je kdekoli na cestě linka s menší MTU, dojde k zahození datagramu a uzel, který tento datagram zahodí, informuje odesilatele o této skutečnosti ICMP zprávou Příliš velký paket.

## Postup fragmentace

Vzhledem k fragmentaci se datagram dělí na dvě části:

- Nefragmentovatelná část – tuto část tvoří základní a všechny rozšiřující záhlaví IPv6, které se mají zpracovávat po cestě k cílovému uzlu, včetně záhlaví směrování.
- Fragmentovatelná část – tuto část tvoří zbytek datagramu. To jsou všechny ostatní rozšiřující záhlaví, které mají být zpracovány až v cílovém uzlu, včetně dat a záhlaví protokolů vyšších vrstev.

Formát záhlaví Fragmentace

Fragmentace se týká pouze fragmentovatelné části. Ta se rozdělí na části o velikosti násobku osmi bajtů tak, aby byly tyto části zároveň menší, než požadované MTU. Tímto způsobem vzniknou fragmenty, jejichž záhlaví je sestaveno následně:

- Nefragmentovatelná část se převezme a upraví se velikost dat v položce Délka dat v základním záhlaví tak, aby odpovídala velikosti fragmentu. V posledním zřetězeném záhlaví se do položky Další záhlaví zapíše hodnota 44, která odpovídá rozšiřujícímu záhlaví Fragmentace.
- Přidá se rozšiřující záhlaví Fragmentace, které se vyplní následně:
  - Vygeneruje se hodnota identifikátoru a přidělí se všem fragmentům.
  - Převezme se hodnota položky Další záhlaví z nefragmentovatelné části původního datagramu.
  - Posun každého fragmentu se určí jako počet osmic bajtů, kde první fragment má nulový posun. Ostatní fragmenty mají posun roven celistvému násobku délky fragmentu, která je pro všechny stejná, kromě posledního fragmentu.
  - V poslední fragmentu se položka M nastaví na nulu, v ostatních fragmentech bude mít hodnotu jedna. Položka M reprezentuje příznak posledního fragmentu.
- V posledním kroku fragmentace dojde k připojení fragmentu.

Takto vzniklé fragmenty můžeme považovat za samostatné datagramy, které jsou odeslány příjemci. Na straně příjemce se z údajů v záhlaví fragmentace poskládá původní datagram.

Postup fragmentace