You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 42 Next »

TDAT2004-A Datakommunikasjon med nettverksprogrammering

Oppgave 38 - IPv6 Pakkeheader

Skrevet av Elena Falkenberg Nordmark og Erlend Tobiassen

1. Innledning

IPv6-pakker er delt i to. De har en nyttelast med data, og en header med informasjon om adressering av pakkene. Header-en har en hoveddel med fast størrelse, og en valgfri del som vi kaller utvidelses-header. Den faste delen inneholder all informasjonen som er nødvendig for en ruter, i mens den valgfrie delen inneholder informasjon som hjelper ruteren å forstå hvordan den skal behandle pakkene som blir sendt.

Relevante bestemmelser:

    • RFC 2460 - Internet Protocol, Version 6 (IPv6) Specification
    • RFC 2474 - Definition of the Differentiated Services Field (DS Field) in the IPv4 and IPv6 Headers
    • RFC 3168 - The Addition of Explicit Congestion Notification (ECN) to IP

2. Ønsket funksjonalitet

Behovet for IPv6 kom av at antall IP-adresser ble brukt opp. Adresserommet var for lite da det var 232 forskjellige adresser i IPv4. IPv6 utvider adresserommet til 2128 forskjellige adresser. Adresserommet blir definert i IPv6-headeren.

Header-formatet til IPv6 holder overhead-en så lav som mulig. Ved å fjerne unødvendige og valgfrie felter fra hoved-header-en, og heller plassere dem i en ekstra header, optimaliseres måten header-en blir prosessert i rutere på. 

Et eksempel på et valgfritt felt er feltet for støtte for fragmentering, som da er plassert i en ekstra header. Om det ikke er en ekstra header, så vil sendelser med for stor størrelse ikke bli sendt, og senderen vil i stedet få meldingen "Packet Too Big". 

Det er ingen checksum i IPv6-header-en. Dette er fordi man ønsker å gjøre den så effektiv som mulig, så man lar andre lag, som transport- eller applikasjonslaget, få styre med feilhåndtering. 

3. Virkemåte

 Byte0123
ByteBit0        34        78        1112        1516        1920        2324        2728        31
00VersionTraffic ClassFlow Label
432Payload LengthNext headerHop limit
864

 

Source Address

1296
16128
20160
24192

 

Destination Address

28224
32256
36288

 

3.1 Version

Versjonsfeltet er det første feltet i IPv6 pakke-header-en. Feltet er 4 bit langt og består alltid av konstanten 6, derav IPv6. På binært blir det (0110)2

3.2 Traffic Class

Trafikklassefeltet inneholder to verdier. De første seks siffrene i binær er tatt i bruk av differentiated services (DSCP) og de to siste er brukt til ECN. 

0        12        34        56        7
Differentiated ServicesECN

3.2.1 Differentiated Services

Differentiated services er en måte for nettverk å prioritere forskjellige pakker på, for eksempel slik at Skype-samtaler skal fungere på ett nettverk selv om noen andre laster ned noe. Dette kalles ofte for Quality of Service (QoS). I teorien er det 26 mulige prioriteringstyper. Wikipedia har følgene tabell[1] over vanlige verdier. 

DSCP valueMeaningDrop probabilityEquivalent IP precedence value
(101 110)2Expedited forwarding (EF)N/A101 Critical
(000 000)2Best effortN/A000 - Routine
(001 010)2AF11Low001 - Priority
(001 100)2AF12Medium001 - Priority
(001 110)2AF13High001 - Priority
(010 010)2AF21Low010 - Immediate
(010 100)2AF22Medium010 - Immediate
(010 110)2AF23High010 - Immediate
(011 010)2AF31Low011 - Flash
(011 100)2AF32Medium011 - Flash
(011 110)2AF33High011 - Flash
(100 010)2AF41Low100 - Flash override
(100 100)2AF42Medium100 - Flash override
(100 110)2AF43High100 - Flash override
3.2.2 Explicit Congestion Notification (ECN)

Eksplisitt trafikkforstoppelselsesadvarsel er en måte for to endepunkter, som begge støtter ECN, å si i fra om at det er trafikkforstoppelselse uten å 'droppe' pakker, slik som de ellers ville gjort. ECN-feltet består av to bits. De da 22 mulige verdiene vises i følgene tabell.

VerdiBetydningEnumerering
(00)2Non ECN-Capable TransportNon-ECT
(10)2ECN Capable TransportECT(0)
(01)2ECN Capable TransportECT(1)
(11)2Congestion EncounteredCE


3.3 Flow Label

Flytbeskrivelsesfeltet identifiserer en sammenhengene flyt med pakker som har tilhørighet. Hovedbruksområdet til dette feltet er som et hint til rutere og switcher at pakkene hører sammen og burde ideelt sett ta samme vei til målet. Slik kan omstokking av pakker som kommer ute av rekkefølge minimeres.

3.4 Payload Length

Nyttelastlengdefeltet spesifiserer lengden på nyttelasten i bytes, der lengden inkluderer alle eventuelle utvidelses-headers. Dette feltet skal settes til 0 hvis en Hop-by-Hop utvidelses-header som tar i bruk jumbograms er tilstedet.

3.5 Next Header

Neste-header-feltet angir hvilken type header som kommer etter den nåværene header-en, dette kan være hvilken som helst header som har en tilsvarene verdi, men som oftest er det enten en utvidelses-header eller TCP/UDP-header. Vi beskriver de forskjellige utvidelses-header-ene i ett senere avsnitt.

Utvidelses-header

Verdi

Beskrivelse

Hop-by-Hop Options

0

Alternativer som må bli undersøkt av alle enheter på veien.

No Next Header

59

Bruk for å spesifisere at det ikke kommer noen header etter.

Destination Options (before routing header)

60

Alternativer som kun trengs å undersøkes av motakeren.

Routing

43

Metoder for å spesifisere veien til pakken. I bruk av Mobil IPv6.

Fragment

44

Parametere for 'fragmentasjon' av datagram.

Authentication Header (AH)

51

Inneholder informasjon for å autentisere deler av pakken.

Encapsulating Security Payload (ESP)

50

Inneholder krypterte meldinger for sikker overføring.

Destination Options (before upper-layer header)

60

Alternativer som kun trengs å undersøkes av senderen.

Mobility (currently without upper-layer header)

135

Parametere i bruk for Mobil IPv6.


3.6 Hop limit

Hoppbegrensningsfeltet sier noe om hvor mange hopp en pakke kan gjøre før pakken blir kastet bort. Dette feltet var kjent som levetid(TTL) i IPv4, men for at switcher o.l. skal slippe å regne ut tiden pakker ligger i buffer, brukes antall hopp istedet. Dette betyr at enheten kun trenger å trekke 1 fra feltet.

3.7 Source Address

Kildeadressefeltet spesifiserer IPv6-adressen til den enheten som har sendt pakken. Når en motakker svarer, vil den svare på denne adressen.

3.8 Destination Address

Motakeradressefeltet er IPv6-adressen til enheten som skal motta pakken.

4. Utvidelses-headers

Vi kommer ikke til å se på hvert enkelt felt for hver utvidelse her, men hver enkelt er beskrevet i RFC-bestemmelser. De utvidelsene vi tar for oss her er de som har blitt definert i RFC 2460. Alle utvidelses-header-ene skal ha feltene Next Header og Hdr Ext Len. Next Header feltene skal ha samme funksjon som i hoved-header-en.

4.1 Hop-by-Hop

 Byte0123
ByteBit0        78        1516        2324        31
00Next HeaderHdr Ext LenOptions and Padding
432

 

Options and Padding

864
1296


4.2 Routing Header

 Byte0123
ByteBit0        78        1516        2324        31
00Next HeaderHdr Ext LenRouting TypeSegments Left
432

 

Type-specific Data

 

864
1296

4.3 Fragment Header

 Byte0123
ByteBit0        78        1516        2324      2829   3031
00Next HeaderReservedFragment OffsetResM
432Identification

4.4 Destination Options Header

 Byte0123
ByteBit0        78        1516        2324        31
00Next HeaderHdr Ext LenOptions
432

 

Options

864
1296

5. Eksempel

For å se på ett kjapt eksempel har vi satt opp wireshark og spesifisert filteret ipv6.version == 6. Vi finner en TCP pakke som har blitt sendt over IPv6:

Det som er markert i blått er IPv6 header-en, vi leser at hele byte-strengen er:

(60 00 00 00 00 20 06 40 20 01 46 46 50 02 00 00 c4 a6 36 0b 19 f3 2b 2d 20 01 07 00 03 00 00 01 00 00 00 00 00 00 00 30)16

Ut i fra tabellen vår med hvert felt sin lengde får vi følgene oppdeling

Felt
Verdi
Beskrivelse
Version(6)166
Traffic Class(00)16CS0, Non-ECT
Flow Label(0 00 00)16Ingen flow label
Payload Length(00 20)16Nyttelasten er 32 bytes
Next Header(06)16Header type 6 (TCP)
Hop Limit(40)1664 hopp igjen
Source Address(20 01 46 46 50 02 00 00 c4 a6 36 0b 19 f3 2b 2d)162001:4646:5002::c4a6:360b:19f3:2b2d
Destination Address(20 01 07 00 03 00 00 01 00 00 00 00 00 00 00 30)162001:700:300:1::30


6. Referanser

Differentiated Services (Wikipedia)[1

IPv6 Packet (Wikipedia

Timeline of IPv6 (ipv6)

IPv6 Header (ipv6)

IPv6 Headers (tutorialspoint)

 

 

  • No labels