# Internetprotocol

Het internetprotocol, meestal afgekort tot IP, is een netwerkprotocol waarmee computers op een computernetwerk met elkaar kunnen communiceren, zoals op het internet.
Sinds 20 juli 2004 worden binnen het internet twee versies van het internetprotocol ondersteund, de versies IPv4 en IPv6. De eerste domeinen die van IPv6 gebruikmaken zijn Japan en Korea.
IPv4 wordt in tegenstelling tot veel andere protocollen door alle computers op het internet ondersteund.
Het internetprotocol is een onderdeel van een stack die nodig is voor communicatie. In combinatie met het Transmission Control Protocol (TCP) wordt wel over TCP/IP gesproken. Een ander veelgebruikt protocol dat samen met IP gebruikt kan worden is het User Datagram Protocol (UDP).
Iedere afzonderlijke computer die via IP met andere computers communiceert moet een uniek adres hebben. Aanvankelijk had iedere netwerkkaart een vast adres. Wegens het gebrek aan adressen wordt nu door gebruikmaking van NAT en DHCP meestal een tijdelijk of een intern IP-adres (IP-nummer) toegewezen.

## IPv4

Een IPv4-adres bestaat uit 32 bits, meestal weergegeven als vier 8 bits-getallen, gescheiden door punten, waarbij ieder getal de waarde 0 tot en met 255 kan bevatten. Het ene deel van deze 32 bits geeft het netwerknummer aan, het andere deel het hostnummer. Een apart netmasker bepaalt welke bits bij het netwerknummer horen, en welke bij het hostnummer. Hosts (computers) met hetzelfde netwerknummer kunnen direct met elkaar communiceren, hosts met een verschillend netwerknummer kunnen dat niet, en maken gebruik van een of meer tussenliggende routers om hun doel te bereiken.

### Structuur

Een IPv4-pakket moet de volgende onderdelen hebben. De hoeveelheid ruimte die voor ieder onderdeel gereserveerd is, is tussen haakjes gegeven.
De zogenaamde headers:
* Versie (4 bits). In dit geval 4.
* Headerlengte (4 bits). Lengte van de header, uitgedrukt in woorden van 32 bits. De minimumlengte is 5 woorden. Als dit veld bijvoorbeeld 0111 is, is de grootte van de header 28 bytes (0111 is 7 in decimale waarde, 7 * 32 = 224 bits = 28 bytes).
* Differentiated Service/Type Of Service (1 byte). Dit speelt een rol bij het bepalen van de route die het pakket aflegt. Het wordt tegenwoordig gebruikt voor Quality of Service (QoS). De eerste 3 bits wordt als volgt gedefinieerd:
** 111 - Netwerk Controle
*** 110 - Internetwerk Controle
*** 101 - CRITIC/ECP
*** 100 - Flash Overschrijving
*** 011 - Flash
*** 010 - Onmiddellijk
*** 001 - Prioriteit
*** 000 - Routine
** Het TOS-veld (4 bits) is sinds RFC 791 als volgt gedefinieerd:
*** 0000 - Standaard
*** 0001 - Minimale "kosten": lage prioriteit
*** 0010 - Maximale betrouwbaarheid
*** 0100 - Maximale doorvoersnelheid
*** 1000 - Minimale wachttijd
*** 1111 - Maximale beveiliging
** De laatste bit is gereserveerd voor toekomstig gebruik.
* Totale lengte in bytes (2 bytes): de grootte van het pakket (gebruikt om vast te stellen of er iets verloren is gegaan en om te weten waar het pakket ophoudt).
* Identificatie (2 bytes). Nodig voor het uitfilteren van foute pakketten en het aan elkaar plakken van gefragmenteerde data.
* Vlaggen (3 bits). De eerste vlag is (nog) ongebruikt, hij moet 0 zijn. Verder: mag dit pakket gefragmenteerd worden? Is dit pakket een fragment?
* Fragmentbegin (13 bits). Waar het fragment begint.
* Time To Live - TTL (1 byte). Aantal hops waarna het pakket moet verdwijnen. Iedere hop verlaagt de TTL van een pakket met 1. Als TTL 0 wordt, zal het pakket niet verder gestuurd worden.
* Protocol (1 byte): het protocol dat binnen dit IP-pakket gebruikt wordt, zoals UDP of TCP.
* Controlesom van headers (2 bytes). Gebruikt om verminkte pakketten te filteren.
* Bron (4 bytes): waar het IP-pakket vandaan komt.
* Bestemming (4 bytes). Waar het pakket naartoe moet.
Hierna volgt het datagedeelte, dat bijvoorbeeld TCP of UDP bevat.

## IPv6

Onder IPv6 zijn een aantal zaken anders, waaronder de grootte van de bron- en bestemmingsadressen. Deze bestaan uit zestien bytes. Dat is ook een reden waarom IPv6 steeds meer in zwang komt: IPv6 biedt een vrijwel oneindig aantal mogelijke adressen, terwijl IPv4 met 4 bytes slechts 256$^4$ mogelijkheden geeft: dat is grofweg 4,3 miljard. Dat lijkt veel, maar een groot deel is al gereserveerd voor allerlei subnets, die daar weer gedeelten van gebruiken. Bovendien mag een groot aantal adressen niet gebruikt worden, zoals de adressen die beginnen met 10.0.0.0/8 en 172.16.0.0/12 en 192.168.0.0/16, aangezien die gereserveerd zijn voor lokaal gebruik. Op 26 oktober 2007 werd door de RIPE-gemeenschap een resolutie uitgevaardigd om de versnelde invoering van IPv6 te bevorderen.
De eerder genoemde onderdelen vormen niet het gehele pakket. IP kan niet in zijn eentje voor een verbinding tussen de ene en de volgende "hop" zorgen. Hiervoor is voor iedere hop een andere "envelop" nodig: de datalinklaag. Dit kan bijvoorbeeld ethernet of Token Ring zijn.