I nodi delle reti TCP/IP uti­liz­za­no l’Internet Control Message Protocol (ICMP) per scam­biar­si in­for­ma­zio­ni relative allo stato e messaggi di errore. In par­ti­co­la­re gli ap­pli­ca­tion server e i gateway (ad esempio i router) uti­liz­za­no questa esten­sio­ne dell’Internet Protocol (IP) per no­ti­fi­ca­re al mittente del pacchetto eventuali problemi con i da­ta­gram­mi. La struttura, il modo di fun­zio­na­men­to e la col­lo­ca­zio­ne dell’ICMP nella suite di pro­to­col­li Internet sono stati definiti nella RFC 792 del 1981. Per la versione 6 del pro­to­col­lo Internet è stato im­ple­men­ta­to l’ICMPv6, descritto nella RFC 4443. L’ICMP è un pro­to­col­lo autonomo, anche se le sue notifiche sono incluse nei comuni pacchetti IP. A questo scopo il pro­to­col­lo Internet considera questa esten­sio­ne opzionale come un pro­to­col­lo di livello superiore. Servizi di rete molto uti­liz­za­ti come tra­ce­rou­te e ping si basano sul pro­to­col­lo ICMP.

Come funziona l’ICMP?

Per com­pren­de­re il fun­zio­na­men­to del pro­to­col­lo, conviene dare un’occhiata alla struttura dell’ICMP o meglio del suo header. Esso si collega di­ret­ta­men­te con l’header dell’IP, nel quale viene indicato dal numero 1 (ICMPv4) o 58 (ICMPv6) del campo Pro­to­col­lo. L’header dell’Internet Control Message Protocol non è molto ampio e ha la forma seguente:

Il primo campo di 8 bit (Tipo) indica la categoria a cui ap­par­tie­ne il messaggio ICMP. Il campo seguente (Codice), anch’esso di 8 bit, fornisce una de­scri­zio­ne ulteriore del messaggio. Facendo un esempio, un messaggio ICMP di tipo 3 specifica che la de­sti­na­zio­ne del pacchetto di dati non è rag­giun­gi­bi­le, mentre il codice indica se a non essere di­spo­ni­bi­le sia la rete di de­sti­na­zio­ne (0), l’host de­si­de­ra­to (1) o la porta (3). L’ultimo campo (Checksum) ha la funzione di ve­ri­fi­ca­re la cor­ret­tez­za dei dati forniti. La sua struttura è analoga a quella dei checksum degli altri pro­to­col­li standard (IP, UDP, TCP).

Per ultimi ci sono i dati ICMP, che sono creati e strut­tu­ra­ti di­ver­sa­men­te in base al tipo di messaggio e all’istanza in funzione. In questo campo vengono spesso men­zio­na­ti di nuovo l’header dell’IP e i primi 64 bit del pacchetto di dati re­spon­sa­bi­le del messaggio di errore o dello stato della query. Nel co­sid­det­to ICMP Tunneling questo campo viene uti­liz­za­to in modo improprio per inviare dati utente al di là del firewall o per stabilire un canale di co­mu­ni­ca­zio­ne tra due computer.

Quali sono i pacchetti ICMP esistenti?

Con­si­de­ra­ta la di­men­sio­ne di 8 bit del campo Tipo, i possibili tipi di messaggio ICMP sono in teoria 256. Di questi, circa 40 sono già assegnati (alcuni dei quali obsoleti), mentre alcuni sono bloccati per essere uti­liz­za­ti in modo spe­ri­men­ta­le. La maggior parte dei numeri (42-252) non è at­tual­men­te assegnata, ma in linea di principio prenotata. L’at­tri­bu­zio­ne dei numeri è sotto il controllo dell’Internet Assigned Numbers Authority (IANA), che regola anche l’as­se­gna­zio­ne degli indirizzi IP e delle porte. La tabella seguente riassume alcuni dei pacchetti più im­por­tan­ti basati su ICMP:

Tipo di ICMP Tipo di ICMPv6 Nome del tipo Codice Nome del tipo
3 129 Echo Reply 0 Risposta al ping nel test di rag­giun­gi­bi­li­tà
0 1 De­sti­na­tion Un­rea­cha­ble 0–15 Messaggio che segnala, tra le altre cose, la non rag­giun­gi­bi­li­tà del com­po­nen­te indicato nel campo Codice (rete, pro­to­col­lo, porta, host), un problema di routing o il blocco di un firewall.
5 137 Redirect Message 0–3 Notifica del redirect di un pacchetto per la rete indicata (0), l’host se­le­zio­na­to (1) o l’host e il servizio spe­ci­fi­ca­ti (3).
8 128 Echo Request 0 Ping
9 134 Router Ad­ver­ti­se­ment 0 Uti­liz­za­to dai router per co­mu­ni­ca­re con diversi client di rete
11 3 Time Exceeded 0 oder 1 Rapporto che indica il tempo di vita (Time To Live, TTL) di un pacchetto (0) o lo scadere del tempo di attesa per la ri­co­stru­zio­ne di pacchetti IP fram­men­ta­ti
13 13 Timestamp 0 Fornisce al pacchetto IP cor­ri­spon­den­te una marca temporale che indica il tempo di invio e serve a sin­cro­niz­za­re due computer
14 - Timestamp Reply 0 Risposta a un messaggio del tipo timestamp, inviata dal suo de­sti­na­ta­rio dopo la ricezione
30 - Tra­ce­rou­te 0 Messaggio ICMP obsoleto, uti­liz­za­to per tracciare il percorso di un pacchetto dati nella rete. Per questo scopo sono uti­liz­za­te prin­ci­pal­men­te echo request ed echo reply.

Utilizzo dei pro­to­col­li ICMP e ICMPv6

Il pro­to­col­lo ICMP è di grande im­por­tan­za per la co­mu­ni­ca­zio­ne nelle reti IP, nelle quali viene uti­liz­za­to in par­ti­co­la­re dai router, ma non solo: server e client fanno uso dei messaggi legati al pro­to­col­lo Internet e ricevono in questo modo im­por­tan­ti in­for­ma­zio­ni di rete.

Una si­tua­zio­ne tipica di impiego è il co­sid­det­to ping test, che può essere eseguito uti­liz­zan­do l’omonimo comando di­spo­ni­bi­le in tutti i sistemi operativi. L’utilizzo di questo strumento è il modo più semplice per con­trol­la­re la di­spo­ni­bi­li­tà di un host nella rete. A questo scopo, ping invia un pacchetto ICMP(v6) di tipo Echo request (8 o 128), al quale il de­sti­na­ta­rio risponde con un messaggio con­si­sten­te in un pacchetto di tipo Echo reply (0 o 129). Nel caso in cui il sistema a cui è destinato il ping non sia rag­giun­gi­bi­le, l’ultimo nodo di rete di­spo­ni­bi­le invia un pacchetto di risposta di tipo De­sti­na­tion un­rea­cha­ble (3 o 1, cioè de­sti­na­zio­ne non rag­giun­gi­bi­le).

Dal canto loro, i router uti­liz­za­no il pro­to­col­lo ICMP per scopi diversi: at­tra­ver­so un Router ad­ver­ti­se­ment (ICMP di tipo 9; ICMPv6 di tipo 134), a in­ter­val­li regolari, informano della propria presenza tutti i par­te­ci­pan­ti attivi del network e co­mu­ni­ca­no loro le varie in­for­ma­zio­ni di rete. Questi a loro volta im­ma­gaz­zi­na­no i dati ricevuti nella cache e possono impostare il router  come gateway standard. Inoltre, i router cercano di ot­ti­miz­za­re il percorso dei pacchetti di dati nella rete usando i Redirect (tipo 5 o 137). Uti­liz­zan­do questo tipo di messaggi, le in­ter­fac­ce di rete no­ti­fi­ca­no all’host l’esistenza di una stazione in­ter­me­dia (hop) per l’invio di pacchetti IP.

Vai al menu prin­ci­pa­le