IP i IP er en IP-tunnelingsprotokol, der indkapsler en IP-pakke i en anden IP-pakke. Indkapsling af en IP-pakke i en anden IP-pakke er at tilføje en ydre header med SourceIP som tunnelindgangspunkt og Destination som tunneludgangspunkt. Samtidig blev den interne pakke ikke ændret (bortset fra TTL-feltet, som faldt). Felterne Don't Fragment og The Type of Service skal kopieres til den eksterne pakke. Hvis pakkestørrelsen er større end Path MTU , er pakken fragmenteret i indkapslingen, dette skal være i den ydre header. Dekapsulatoren skal samle pakken igen.
Ydre IP-header | Intern IP-header | Brugbar information |
Den ydre IP-header har følgende
versionsfelter: 4 bit
Dette felt indeholder protokollens versionsnummer. Altid 4, fordi IP i IP kun understøttes for IPv4.
Header Længde: 4 bit
Dette felt indeholder længden af den eksterne IP-header.
Tjenestetype (TOS): 8 bit
Dette felt er kopieret fra den interne IP-header.
Samlet længde: 16 bit
Dette felt indeholder længden af den indkapslede IP-header (inklusive den ydre IP-header, indre IP-header, nyttelast)
Identifikation: 16 bit
Dette felt bruges til at identificere de datagramfragmenter, der er nødvendige for, at indkapslingen kan samle fragmenterne igen. For den ydre IP-header er dette det nye genererede nummer.
Flag: 3 bits
R | D.F. | MF |
R:1bit
Denne bit er reserveret og skal sættes til 0.
DF: 1bit
Dette felt angiver om datagrammet må være fragmenteret eller ej. Hvis en bit er sat til 1 i den indre header, så skal den også sættes til 1 i den ydre header, hvilket indikerer at datagrammet ikke kan fragmenteres. Hvis en bit er sat til 0 i den indre header, så kan den være 1/0 i den ydre header.
MF: 1 bit
Dette felt bruges når datagrammet er fragmenteret, indikerer at datagrammet indeholder flere fragmenter, dette felt er ikke kopieret fra den indre header.
Fragment Offset: 13 bit
Dette felt bruges, når fragmenter indsamles.
Time To Live (TTL): 8 bit
Dette felt bruges til at holde styr på datagrammets levetid. Den interne TTL-header reduceres før indkapsling og ændres ikke i dekapsulatoren. Den ydre header indstiller TTL-værdien, således at datagrammet leveres til tunnelens endepunkt.
Protokol: 8 bit
Dette felt specificerer den næste datagramprotokol efter det. Værdien er sat til 4. I de fleste tilfælde vil det være IPv4, hvis der ikke er yderligere headere til den indkapslede pakke.
Header Checksum: 16 bit
Dette felt indeholder IP checksummen for den ydre header.
Kilde IP-adresse: 32 bit
Dette felt indeholder IP-adressen på encapsulatoren.
Destinations-IP-adresse: 32 bit
Dette felt indeholder IP-adressen på dekapsulatoren
Valgmuligheder: Variabel længde
Dette felt er ikke kopieret fra den interne IP-header. Nye muligheder kan tilføjes.
Padding: Variabel længde
Dette felt bruges til at udfylde datagrammet, så nyttelasten starter på en 32 bit grænse.
Efter modtagelse af datagrammet er der en chance for, at indkapslingsmaskinen vil modtage en ICMP-meddelelse fra mellemliggende noder. Indkapslen foretager handling på en ICMP-meddelelse afhængigt af typen og koden for ICMP-meddelelsen. Følgende ICMP-meddelelser med type og kode, og den handling, som indkapsleren foretager.
Sløjfer i tunneler kan forekomme af følgende årsager
I begge tilfælde SKAL routeren ikke sende datagrammet. I stedet skal datagrammet kasseres.
For ICMP-meddelelser returnerer mellemroutere et 64 bit datagram over IP-headeren, hvilket ikke er tilstrækkeligt til at kopiere den indre header. Dette forhindrer indkapslen i at videresende den tilsvarende besked til den oprindelige afsender. Men det kan behandles af tunnelsoftwaren. Den skal understøtte følgende