3. Internet Protocol


3.1 Inleiding 3.2 IP Header 3.2.1 IP header velden met IP waarden 3.2.2 IP header velden met TCP/UDP waarden 3.3 Adresseren en Routeren 3.4 Fragmentatie 3.5 Reassembly


Begin van File
3.1 Inleiding

Het Internet Protocol (IP) is ontworpen voor het gebruik in gekoppelde computer netwerken die gebruik maken van packet-switching (pakket georiënteerd) en dient ervoor om blokken data (datagrammen) te transporteren van het bronadres naar de bestemming. Het Internet Protocol heeft dus als hoofdtaak het routeren en fragmenteren van pakketten data door het netwerk op basis van IP bestemmings adressen en andere gegevens die beschreven staan in de IP header. Het is op zichzelf een niet goed betrouwbaar protocol wat betreft transmissie fouten en bufferoverflows, omdat er geen ACK’s (bevestigingen van ontvangst) worden gegeven, er geen error controle plaats vindt op de data (alleen op de header) en de data bij fouten dus niet herstuurd wordt. Vandaar dat IP bijna altijd samen met TCP wordt gebruikt, die weer wel de controle houdt op deze zaken. Het Internet Protocol is connectieloos en dus gebaseerd op het versturen van pakketjes data zonder onderlinge relatie en zonder volgorde (Datagram service).

Begin van File
3.2 IP Header

Elk datagram pakketje die door IP verstuurd wordt, wordt voorzien van een IP header die aan het begin van de data wordt “geplakt”. Deze header is opgebouwd uit verschillende velden en deze velden zien er als volgt uit.

Binnen deze header zijn verschillende velden te onderscheiden die allemaal een verschillende functie hebben voor het gebruik en de verwerking van de IP datagrammen. In figuur 3.1 zijn de velden die licht zijn afgedrukt, de velden die door de bovenliggende laag TCP (dat in hoofdstuk 2 al is behandeld) of door UDP (dat in hoofdstuk 4 wordt behandeld) worden meegegeven. De donker gekleurde velden worden door het Internet Protocol zelf van waarden voorzien als deze de header aan de data koppelt.

Begin van File
3.2.1 IP header velden met IP waarden

  • Version:
    Het version veld is een 4 bit veld die het internet formaat bevat (is op dit moment versie 4).

  • Internet Header Length (IHL):
    Het IHL veld bestaat ook uit 4 bit en geeft de lengte van de header weer in een aantal van 32 bit words. Hierdoor is ook gelijk bekend waar de data begint.

  • Total length:
    Dit is een 16 bit veld die de lengte van de gehele datagram (header + data) beschrijft, gemeten in bytes. Het uiterste maximum is 65535 bytes maar de normaal gebruikte maximum lengte voor de hosts is 576 bytes.

  • Flags:
    Het Flag veld bestaat uit 3 controle bits waarvan de eerste (bit 0) gereserveerd is voor toekomstig gebruik en dus nu nog waarde 0 moet bevatten. Bit 1 (DF flag) wordt gebruikt door de zender om aan te geven of de datagram gefragmenteerd mag worden. Als dit bit geset is dan mag er onderweg niet gefragmenteerd worden. Bit 2 (MF flag) wordt gebruikt bij fragmentatie en geeft aan, dat als hij geset is, er nog meer fragmenten volgen en als deze gereset is, dat het, het laatste fragment is.

  • Fragment offset:
    Dit is een 13 bit veld en wordt gebruikt bij het fragmenteren om aan te geven waar voor welke plek in de datagram dit fragment bedoelt is. Bij het eerste fragment is de offset altijd 0 en bij de andere fragmenten worden de offsets gemeten in units van 8 bytes.

  • Header Checksum:
    Dit is een 16 bits veld die zorgt voor een controle op de compleetheid van de header. De header checksum is de som van alle 16 bits words in de header en verandert per punt van passeren en bij fragmentatie.

  • Padding:
    Dit is een veld met een variabele lengte, die voor een stukje opvulling van de header zorgt, zodat deze eindigt op een 32 bit begrenzing.

    Begin van File
    3.2.2 IP header velden met TCP/UDP waarden

  • Type of Service:
    Dit 8 bit veld beschrijft de kwaliteit van de gewenste service waarbij elke bit een afzonderlijke instelling is. De invulling van deze bits kan als volgt.

    Bit 0 - 2 : Precedence. Bit 3 : 0 = Normal Delay, 1 = Low Delay. Bit 4 : 0 = Normal Throughput, 1 = High Throughput. Bit 5 : 0 = Normal Relibility, 1 = High Relibility. Bit 6 : Monetary Cost Bit 7 : Reserved for Future Use.


    Er kan maar 1 van de bits 3 - 6 geset zijn.


    - Precedence. 111 - Network Control 110 - Internetwork Control 101 - CRITIC/ECP 100 - Flash Override 011 - Flash 010 - Immediate 001 - Priority 000 - Routine
  • Identification:
    Dit veld is 16 bits groot en dient ervoor om de fragmenten van een datagram een specifiek nummer te geven zodat bij het reassembleren de verschillende fragmenten bij de juiste datagram worden gevoegd.

  • Time to Live:
    Dit 8 bit veld geeft de maximale tijd aan waarin de datagram zich op het internet mag bevinden voordat deze wordt verwijderd. De tijd die dit veld bevat wordt gemeten in seconden en wordt bij ieder punt van passeren bijgewerkt. Als de tijd nul wordt, wordt de datagram vernietigd en zo wordt dus voorkomen dat deze blijft rondspoken als er een error optreed.

  • Protocol:
    Dit 8 bit veld geeft het hogere level protocol aan die verwerkt zit in de data van de datagram (zie RFC 1700 voor de Assigned internet protocol numbers).

  • Source Adres:
    Dit is het 32 bit bron adres, dus van welke IP adres het bericht verstuurd is.

  • Destination Adres:
    Dit is het 32 bit bestemming adres, dus het IP adres waar het bericht naar verstuurd moet worden.

  • Options:
    Voor uitleg over de options velden zie hoofdstuk 2 over TCP.

    Begin van File
    3.3 Adresseren en Routeren

    Het routeren en adresseren van de pakketten gebeurt door middel van de adressen die worden meegegeven door de bovenliggende laag (TCP of UDP). En, omdat iedere aansluiting in een IP netwerk een uniek IP adres bevat die nergens ter wereld hetzelfde mag zijn, komt het pakket altijd bij de juiste bestemming. Deze adressen die gebruikt worden als bron -of bestemmingsadres bestaan uit 4 bytes en bestaan uit een netwerknummer gevolgd door een lokaal adres. Het routeren gebeurt doormiddel van een routerings tabel die door elke host wordt bijgehouden en waarmee de pakketten via de verschillende routers verstuurd kunnen worden.Er zijn drie soorten van adres classes te onderscheiden ingedeeld aan de hand van de grote van het netwerk. Dit zijn:

  • Class A :
    eerste bit = 0 + 7 bits = netwerk id. + 24 bits = host id.

  • Class B :
    eerste 2 bit = 10 + 14 bits = netwerk id. + 16 bits = host id.

  • Class C :
    eerste 3 bit = 110 + 21 bits = netwerk id + 8 bits = hostid.

    Hierbij gaat het er dus om of er een adres gewenst is met een klein aantal netwerken en een groot aantal hosts, of een gemiddeld aantal netwerken en hosts, of een groot aantal netwerken met een klein aantal hosts. Aan dit adres is dan ook door de source gelijk te zien of de bestemming binnen het lokale netwerk ligt of dat deze doorgestuurd moet worden naar een router om vandaar uit verder te worden verstuurd.

    Begin van File
    3.4 Fragmentatie

    Als een datagram te groot is voor het netwerk dat hij moet passeren, dan wordt deze gesplitst in fragmenten. ,Door dit splitsen, moet de IP header die bij de datagram hoort geheel of gedeeltelijk in de fragmenten worden gekopieerd. Hierbij kunnen een aantal velden veranderen, zoals:

  • Options field, deze bevat gedeeltes die weggelaten mogen worden bij fragmenteren.
  • More fragments flag, wordt geset als er meer fragmenten ontstaan.
  • Fragment offset, is per fragment verschillend.
  • Internet header length field en Total length field, door verschil in opties kunnen ook deze lengtes veranderen.
  • Header checksum, verandert bij elke verandering van de header.
    Om te kunnen fragmenteren moeten de volgende velden rechtstreeks gekopieerd worden in de fragmenten: Identification, omdat dit een uniek datagram nummer is en bij reassembly moet kunnen zien welke fragmenten bij elkaar horen.
  • Source en Destination adres en Protocol velden, elk fragment moet natuurlijk naar hetzelfde adres met het zelfde bovenliggende protocol.
    Andere velden in de header worden ook mee gekopieerd maar zijn niet van belang voor het goed fragmenteren. Zie de bijlage voor een voorbeeld van fragmentatie en nog een bijlage voor een blokschema van de handelingen nodig voor fragmentatie.

    Begin van File
    3.5 Reassembly

    Als de fragmenten bij het bestemmings adres aankomen moeten deze weer ge-“reassembled” worden naar een datagram. Aangezien de fragmenten verschillende routes kunnen volgen en door een error vernietigd kunnen worden, kunnen de fragmenten in verschillende volgorde aankomen en kunnen ook nog fragmenten van verschillende datagrammen door elkaar aankomen. Daarom worden de verschillende fragmenten eerst in een buffer geplaatst en pas als alle fragmenten van een datagram ontvangen zijn, wordt hier weer een geheel datagram van gemaakt. In figuur 3.2 is een voorbeeld te zien van een buffer waarin drie IP datagrammen worden gereassembled.

    Als de fragmenten binnenkomen worden ze gecontroleerd op hun IP identificatie (ip_id) en aan de hand daarvan naar de juiste reassembly buffer toegestuurd. Hierin worden de fragmenten met behulp van hun fragment offset geplaatst op de juiste plek in de datagrambuffer.

    Als de fragmenten binnen komen dan kan dat op verschillende manieren. Dit kunnen namelijk de eerst gestuurde fragmenten zijn maar ook fragmenten die na een error voor de tweede keer gestuurd zijn. Hierdoor kunnen fragmenten elkaar gedeeltelijk of geheel overlappen. Figuur 3.3 is een voorbeeld van hoe de verschillende fragmenten binnen komen en hoe ze elkaar gedeeltelijk of geheel kunnen overlappen.

    De fragmenten zijn genummerd op hun tijd van binnenkomst in de buffer. Hierbij worden er bytes weggegooid van het deel van het fragment dat het achterstuk van een eerder fragment overlapt. (de voorkant van fragment 5 die het achterstuk van 1 overlapt) of wordt het hele fragment weggegooid als alle bytes al aanwezig zijn (fragment 6). Als een fragment het voorstuk van een eerder fragment overlapt wordt het voorstuk van dat eerdere fragment verwijderd (fragment 2) of als het eerdere fragment geheel overlapt wordt dan wordt hij geheel verwijderd (fragment 3). Zie bijlage voor een blokschema van de handelingen die nodig zijn voor reassembly.



    Vorige hoofdstuk Volgende hoofdstuk
    Terug naar Index