De functies van ICMP

Nodes in TCP/IP-implementaties gebruiken het Internet Control Message Protocol (ICMP) voor het uitwisselen van status- en foutmeldingen. Vooral applicatieservers en gateways (bijvoorbeeld routers) gebruiken dit aanvullende IP-protocol om meldingen over problemen met datagrammen terug te sturen naar de afzender van het gegevenspakket. In 1981 werden de opbouw, werkwijze en categorisering in de protocol stack in RFC 792 gedefinieerd. Voor versie 6 van het internetprotocol werd bovendien de specifieke implementatie ICMPv6 in RFC 443 gedefinieerd.

ICMP is een verbindingsloos protocol, ook al maken de verschillende berichten deel uit van gewone IP-pakketten. Daarom behandelt het internetprotocol de optionele uitbreiding als een protocol van de hogere lagen. Verschillende veelgebruikte netwerkdiensten, zoals traceroute en ping, baseren zich op het ICMP-protocol.


Hoe werkt ICMP?

Om de werkwijze van het protocol ICMP te begrijpen, kijken we eerst naar de opbouw van ICMP en de header. Deze is direct verbonden met de IP-header en wordt aangekondigd door het protocolnummer 1 of 58 (ICMPv6) in het IP-veld ‘Protocol’. De hoofding van het Internet Control Message Protocol zelf is niet erg omvangrijk en heeft onderstaande vorm:

Bit 0–7 Bit 8–15 Bit 16–23 Bit 24–31
0 type code controlecijfer
32 header-informatie

Het eerste, 8 bit lange veld ‘type’ legt vast welk type melding het ICMP-pakket in kwestie is. Deze informatie kan door het volgende veld ‘code’, dat ook 8 bit lang is, worden gespecificeerd. Een ICMP-melding type 3 zegt bijvoorbeeld dat de bestemming van het gegevenspakket niet bereikbaar is, terwijl de code dit bericht nader omschrijft en informatie geeft of het gewenste netwerk (0), de host (1) of de poort (3) niet hebben gereageerd op de aanvraag. Na de informatie over het type melding volgt het controlecijfer, dat ervoor zorgt dat de melding juist is. Het wordt op dezelfde manier gevormd als de controlecijfers van andere standaardprotocollen (IP, UDP, TCP).

Aan het einde zijn de ICMP-gegevens te vinden. Deze zijn – afhankelijk van type en oorzaak – verschillend opgebouwd en gestructureerd. Vaak worden de IP-header en de eerste 64 bit van het gegevenspakket dat verantwoordelijk is voor foutmeldingen en statusaanvragen opnieuw genoemd. Bij het zogenoemde ICMP-tunneling wordt het veld misbruikt om berichten onder de radar van firewalls te versturen of een versleuteld communicatiekanaal tussen twee computers te creëren.


Welke ICMP-pakketten zijn er?

Vanwege de veldlengte van 8 bit bestaan er theoretisch 256 verschillende typen ICMP-melding. Daarvan zijn er ongeveer 40 in gebruik (inclusief een aantal oudere soorten) en enkele zijn geblokkeerd voor experimenteel gebruik. Het merendeel van de nummers (42-252) is momenteel niet in gebruik, maar wel gereserveerd. IANA (Internet Assigned Numbers Authority), een organisatie die o.a. het uitdelen van IP-adressen en poorten regelt, is verantwoordelijk voor het toewijzen van de nummers. In de onderstaande tabel hebben we een aantal van de belangrijkste pakketsoorten samengevat die gebaseerd zijn op het Internet Control Message Protocol:

ICMP-type ICMPv6-type Typenaam Code Beschrijving
0 129 Echo Reply 0 Antwoord op een netwerk-ping om de bereikbaarheid te testen
3 1 Destination Unreachable 0–15 ICMP-melding die er o.a. over informeert dat de component die in het veld ‘Code’ aangegeven is (netwerk, protocol, poort, host) niet te bereiken is, dat er hosting-problemen voorliggen of dat de firewall is geblokkeerd
5 137 Redirect Message 0–3 Bericht dat een pakket wordt omgeleid voor het aangegeven netwerk (0), de gekozen host (1), de aangegeven dienst en het web (2), of de aangegeven dienst en host (3)
8 128 Echo Request 0 netwerk-ping
9 134 Router Advertisement 0 Wordt door routers gebruikt om met verschillende netwerk-clients te communiceren
11 3 Time Exceeded 0 of 1 Statusmelding die aangeeft dat de levensduur (Time to Live, TTL) van een pakket (0) of de wachttijd om een gefragmenteerd IP-pakket in elkaar te zetten (1) is verlopen
13 13 Timestamp 0 Voorziet het betreffende IP-pakket van een tijdstempel die overeenkomt met het tijdstip van verzending en wordt gebruikt om twee computers te synchroniseren
14 - Timestamp Reply 0 Antwoordbericht op een ICMP-timestamp die de ontvanger verstuurt, nadat hij deze heeft ontvangen
30 - Traceroute 0 Verouderd type ICMP-melding dat wordt gebruikt om de weg van een datapakket in het netwerk te vervolgen; tegenwoordig worden hiervoor Linie Echo-Requests en Line Echo-Reply’s gebruikt

Hier worden ICMP en ICMPv6 gebruikt

ICMP is van groot belang voor de communicatie tussen IP-netwerken. Het protocol ICMP wordt, zoals eerder gezegd, voornamelijk door routers gebruikt. Servers en clients maken ook gebruik van de berichten die aan het internetprotocol zijn verbonden en verkrijgen op deze manier belangrijke netwerkinformatie.

Het wordt ook veel gebruikt bij de zogenoemde netwerk-ping, die met behulp van gelijknamige applicaties via de commandoregel van het besturingssystem kan worden uitgevoerd. Het eenvoudige, maar nuttige hulpprogramma is de eenvoudigste oplossing om de bereikbaarheid van een bepaalde host in het netwerk te testen. Voor dit doeleinde verstuurt ping een IP-pakket inclusief ICMP(v6)- ‘Echo Request’ (type 8 of 128). Na ontvangst reageert de ontvanger op zijn beurt met een gegevenspakket dat de ICMP-melding ‘Echo Reply’ (type 0 of 129) bevat. Als het systeem dat de ping had moeten ontvangen niet wordt bereikt, verstuurt het laatste nog bereikbare netwerkstation een antwoordpakket. Ook dit omvat een ICMP-component als uitbreiding: type 3 of 1 ‘Destination Unreachable’ (‘bestemming niet bereikbaar’).

Routers gebruiken ICMP voor verschillende doeleinden. Met Router Advertisement (ICMP type 9; ICMPv6 type 134) informeer je bijvoorbeeld alle actieve netwerkdeelnemers regelmatig over je aanwezigheid en verschillende netwerkinformatie. Zij slaan de verkregen gegevens in hun cache op en maken van de router naar keuze de standaard gateway. Bovendien proberen routers de weg van gegevenspakketten in het netwerk te optimaliseren met behulp van ICMP-Redirects (type 5 of 137). De netwerkinterfaces laten door middel van deze mededelingsmogelijkheid een host weten dat er een betere eerste hop (tussenstation) ter beschikking staat om IP-pakketten te versturen.