IPv4 och IPv6 header

IPv4 header definierades i RFC 791 (September 1981) som Internet Protocol, DARPA Internet Program Protocol Specification. För en bättre förståelse kommer här att jämföras IPv4 och IPv6 header med hjälp av publicerade bilder på Internet.

Bild 1: IPv4 och IPv6 header

Bild 1 illustrerar skillnader genom att markera fält med olika färg:

  • Gul: samma fält för bägge protokoll
  • Mörk blå: fält som försvinner och inte finns på IPv6
  • Ljus blå: fält som byter namn och placering
  • Grönt: ny fält i IPv6

IPv6 header definieras i RFC 2460 (December 1998) som Internet Protocol, Version 6 (IPv6) Specification. Det som visas på bild 1 är huvudstrukturen (“main IPv6 header“) eftersom i IPv6 finns fler till header kallade “extension headers“.

På bild 1 presenteras bägge protokollen med samma bredd och det kan tolkas som att de är samma bitars bredd, men det är bara en logisk representation eftersom IPv4-header är 32 bitars bred och IPv6-header är 64 bitars bred.

Bild 2: IPv4 32 bitar bredd och IPv6 64 bitar bredd

Fälten

    • IPv4 och IPv6 Version – Båda header börjar med fältet Version, men i IPv4 headern är alltid fältets värde 4 och i IPv6 är värdet 6.
    • IPv4 Internet Header Length (IHL) – Det minimala värdet i IPv4 är 5 (0101 = 5; 5 x 4 = 20 byte) och det maximala värdet är 60 byte (1111 = 15, 15 x 4  = 60 byte). IPv6 har inte IHL-fält eftersom dess header har ett fast värde på 40 byte. Bild 2 illustrerar att IPv4 header innehåller 32 bitar eller 4 byte per rad. Om du räknar antal rader som är 5 kan du enkel multiplicera 5 x 4 och få som resultat 20 Byte. Det samma gäller för IPv6, men varje rad innehåller 64 bitar eller 8 byte. Om du räknar antal rader som är 5 kan du multiplicera 5 x 8 och få fram 40 byte.
    • IPv4 Type of Service (ToS) – IPv4 fältnamnet ändrades i IPv6 till Traffic Class, men behåller samma funktion för pakethantering, exempelvis ordning i vilken paketen överförs  samt deras prioriteringar. Förenklat kan man säga att värdet i Traffic Class beskriver paketets prioritet.
    • IPv4 Total Length –  Anger i byte den totala storleken på hela paketet inklusive dess header. Den maximala storleken är 65 535 bytes ( 216). De flesta IPv4 paket är oftast mycket mindre.
    • IPv6 Payload Length är en 16 bitar fält som indikerar storleken i byte av Payload eller nyttolasten (data utan styrinformation). I detta fält kan inkluderas header-tillägg (fler styrinformation) som en del av nyttolasten. Fälten IPv4 Total Length och IPv6 Payload Length har mycket gemensamt med en tydlig skillnad. IPv6 Payload anger endast storleken på nyttolasten i byte utan att inkludera den primära headern
    • IPv6 Flow Label (Control) – Ett nytt fält som används för att markera sekvenser av paket avsedda till en eller flera mottagare. Fältets syfte är att hjälpa till med identifiering av paket i grupper. En “flödes-indikator” som nätleverantörer kan  använda för att behandla olika typer av tjänster, protokoll eller dataöverföringar. Just nu finns inte så många implementationer till detta fält förutom lastbalansering och tunneling.
    • IPv4 Identification – 16 bitar som genererar en identifikationsnummer för ett paket och när ett paket fragmenteras associeras varje fragment med paketets identifikationsnummer.
    • IPv4 Flags – 3 bitar som indikerar vad som händer med ett fragment. Första biten används inte och sätts till noll, den andra känns som DF som står för Do Not Fragment när den är satt till 1. De flesta protokoll lägger inte mycket uppmärksamhet till fragmentering och DF flaggan sätts då till noll. Den tredje biten som är MF flaggan eller More Fragments som sätts till 1 om paketfragmentering sker.
    • IPv4 Fragment Offset – sammanlagt 13 bitar används för att markera paketfragment med ett visst värde som talar om för mottagare i vilken ordning fragmenten ska sättas ihop till paketet.
    • IPv4 Time To Live – IPv4 Time to Live (TTL) och IPv6 Hop Limit fälten säkerställer att paket inte vandrar i ett nätverk under en obestämd tid, som i fallet med routing-loopar. Dessa fälts värde minskas med 1 varje gång en router mottar IPv4 eller IPv6-paket. När fältet innehåller värdet 0 kasseras paket och ett ICMPv4 eller ICMPv6 Time Exceed meddelande skickas till avsändaren. I IPv4 var TTL ursprungligen avsedd att representera den faktiska maximala tiden som paket använder för att sig genom ett nätverk och inte nödvändigtvis antalet routrar paket tar sig genom. RFC 791 säger så här: “Även om ingen lokal information är tillgänglig på den tid som faktiskt förbrukats, måste TTL minskas med 1. Den tid som mäts är i sekunder (dvs. värdet 1 betyder en sekund). Således är den maximala tiden för fältet TTL 255 sekunder eller 4,25 minuter.
      I praktiken minskar routrar TTL värdet med 1 istället att beräkna tiden ett paket har använt i sin resa till mottagaren.
    • IPv6 Next Header – den anger vilken typ av header som förväntas efter den primära headern. I en situation där det bara finns den primära IPv6 header och inga Extension Header specificerar fältet Next Header protokollet som är inkapslat som en del av data. Samma värden som används i IPv4-fältet Protocol används i fältet IPv6 Next Header, tillsammans med några ytterligare värden för IPv6. Några av de vanligaste värdena för båda protokollen är exempelvis 1 för ICMPv4, 6 för TCP, 17 för UDP, 43 för Routing Extension Header IPv6, 44 för Fragment header för IPv6.

      Bild 3: Fältet Next Header i IPv6
  • IPv4 Header Checksum – En kontrollsumma för IPv4-Header tillhandahålls som skydd mot eventuell signaldeformationer vid dataöverföringar. Detta är inte den mer komplexa cykliska redundanskontrollen (CRC) som används av Ethernet, utan en mycket enklare 16-bitars kontrollsumma som kontrollerar endast IPv4-header och inte hela paketet. Varje router längs vägen verifierar och beräknar om detta fält. Om kontrollsumman misslyckas, tar routern bort paketet.
    Bild 4: Fältet Header and Data Checksum

    Det finns inget kontrollfält i IPv6-Header eftersom teknologier i Data länk skiktet, som Ethernet, utför sina egna kontrollsummor. Till skillnad från IPv4 är i IPv6 obligatorisk att protokoll inkluderar en checksumma, exempelvis TCP och UDP. Dessa två protokoll fungerar över IPv6 utan strukturella ändringar förutom att i beräkningar av checksumman ändrar de från 32-bitar adresser till 128-bitar adresser.
    Både TCP och UDP genererar en låtsas header så att checksumman kan utföras utan att påverka paketet. Följande ingår i beräkningen av checksumman:

    • Source IP-adress
    • Destination IP-adress
    • Övre-skikts protokollens nyttolast längden (TCP / UDP-header och data)
    • IPv6-värdet för Next Header (inklusive eventuella Extension Header)
  • IPv4 och IPv6 source och destinations adresser – Det största skillnaden mellan dessa två versioner är storleken men annars samma funktioner för avsändaren (source) som genererar datapaket och den använder alltid en unicast IP adress och destinationen (mottagare) som mottar överförda paket. Destinationen kan vara unicast, multicast, anycast eller broadcast.

Några frågor om IPv6

    1. Varför inkluderar inte IPv6 ett liknande fält som IHL?
    2. Vilka skillnader mellan IPv4 Total Length fält och IPv6 Payload fält?
    3. Vilken är det största skillnaden mellan IPv4 och IPv6 adresser?
    4. Hur paket fragmenteras i IPv6?
    5. Varför inkluderas inte ett checksumma fält i IPv6?