IP-fragmentering

IP-fragmentering är en mekanism som Internetprotokoll använder för att kunna transmittera stora datapaket, större än MTU - maximum transmission unit. Metoden bygger på att när mottagarens MTU är för liten för att ta emot ett datapaket från sändaren, så väljer internet-protokollet att fragmentera datapaketet i mindre delar. När alla delarna är framme sammanfogas de olika fragmenten till det ursprungliga datapaketet. Vem som sköter processen skiljer sig beroende på vilken version av internet protokollet. I IPv4 är det nätverket som har ansvar för processen, medan det i IPv6 är ett tillägg (Fragment Extension Header) som aktiveras vid överföring av stora paket. Dessa olika mekanismer presenteras i standarder för internet, Request For Comments [RFC]. I RFC 791 beskrivs processen för IP-fragmentering, överföring och sammanfogning av datapaket. RFC 815 beskriver mekanismen för sammanfognings-algoritmen.

Anledning till att IP-fragmentering används 

Det som gör internet väldigt kraftfullt är att det binder samman många olika nätverk, vilket skapar ett stort gemensamt nätverk som ger möjlighet för alla som är anslutna till internet att utbyta information. Vid överföring av data kallas den maximala storleken på ett datapaket som ett lager kan överföra för maximum transmission unit -  MTU.

Eftersom varje IP-datagram är inkapslat i en datalänklager ram för transportering från ena noden till den andra. MTU för datalager protokollet sätter en hård gräns på storleken på IP datagrammet. Vilket inte är problem, utan problemet ligger i att var och en av datalänkarna längs vägen mellan avsändaren och mottagaren kan använda olika datalänk lagerprotokoll och var och en av dessa protokoll kan ha olika MTU.

Mekanismerna för IP-fragmentering 
Innan de olika fragmenten kommer fram till sin destination måste de olika fragmenten sammanfogas, då nämligen både TCP och UDP förväntar sig att ta emot ett färdigt, ofragmenterat segment från nätverkslagret. Vid skapandet av IPv4 antogs att sammanfogningen av de olika fragmenten i noden skulle orsaka komplikationer i protokollet och minska nodens prestanda och effektivitet vid transport av data. Därför valdes att nodens arbetsuppgifter skulle vara avgränsade och enkla för att maximera dess effektivitet och prestanda. Därför valde man att låta sammanfogningen av paket ske i slutet av överföringsprocessen.

När mottagaren tar emot en serie av datagram från samma källa, behöver den ta reda på om det enskilda datagrammet är ett komplett paket eller ett fragment av ett paket. Samtidigt måste den kunna ta reda på när det sista fragmentet anländer för att kunna sätta ihop fragmenten till det ursprungliga datagrammet. För att möjliggöra sammanfogningen av fragmenten hos mottagaren har IPv4 flera verktyg för att informera om vilka delar som ska sammanfogas. Bland dessa verktyg är identification, flag och offset som återfinns i datagrammets header.

Identification [ID] är ett verktyg som är 16 bitar långt och är unik för varje datagram från samma källa. Det innebär att alla datagram mellan sändare och mottagare med ett specifikt protokoll måste ha en unik IPv4 ID.

Denna unika ID behålls under en viss tidsperiod, ofta i två minuter enligt rekommendationerna RFC1122.

Flaggan i headern representerar hur IP paketet ska behandlas av enheten. I fältet är det 3 bitar och de olika delarna representerar olika åtgärder. Det första fältet är alltid satt till 0. Det andra fältet representerar om datapaketet får fragmenteras eller inte. Om det andra fältet har 0 betyder det att datapaketet får fragmenteras, medan om den är satt till 1 innebär det att den inte får fragmenteras. Det tredje fältet representerar vilken position paketet har i serien av fragmenteringen. Om 0 är satt betyder det antingen att det är sista fragmentet eller att den inte har fragmenterats. Om värdet 1 är satt betyder det att den inte är sista paketet och att flera paket förväntas tas emot i en serie av fragment. Offset-fältet används för att indikera för destinationsenheten var ett mottaget fragment ska placeras när alla datapaket ska sammanfogas.

Skillnaden mellan IPv4 och IPv6 vid fragmentering 
Vid användningen av internetprotokollet version 4 (IPv4) sker fragmenteringsmekanismen annorlunda i jämförelse med internetprotokollet version 6 (IPv6). Det som sker i IPv4 är att när ett stort datapaket (> MTU) ska skickas fragmenteras det i mindre delar som kallas för fragment. I IPv4-headern talar den om att datapaketet är fragmenterat och vilken ordning de olika fragmenten har. Samtidigt sker fragmentering och sammanfogning av datapaketet i nätverket. Till skillnad från IPv6 så har den ingen fragmenteringsmekanism, istället har man lagt till en ny teknik som heter Path MTU Discovery [PMUTD] som används för att upptäcka det största datapaket som ska transmitteras. PMUTD mekanismen ska användas varje gång innan en anslutning ska upprättas. Det som sker när ett för stort paket ska överföras är att paketet förloras på vägen samtidigt som det skickas ett ICMPv6 typ 2 meddelande (Packet too big) till sändaren som talar om att paketet som ska överföras är för stort.

Om överföringen av paketet misslyckas använder man sig av Fragment Extension Header som är en mekanism som fragmenterar hela datapaketet. Det som skiljer sig mellan IPv4 och IPv6 vid fragmentering är att i IPv4 görs fragmentering och sammanfogning av nätverket medan det i IPv6 görs av sändaren.

Påverkan på överföring av data 
IP-fragmentering kan i vissa fall leda till att fragment förloras vilket ger paketförlust vilket i sin tur orsakar att protokoll som TCP tvingas skicka om det förlorade datapaketet. 

Sändaren kan använda sig av två metoder för att bestämma storleken på datapaketet som ska skickas över nätverket. Det första metoden är att sändaren skickar datapaket till mottagaren och långsamt öka mängden data tills nätverket når sitt maximala. Den andra metoden är genom Path MTU Discovery som används för att undersöka MTU mellan sändare och mottagaren för att undvika att IP-fragmentering ska behöva användas.

Referenser

Internetprotokoll