Passa al contenuto principale

Introduction (Introduzione)

L'Internet Protocol (IP, Protocollo Internet) [1] viene utilizzato per il servizio datagramma host-to-host in un sistema di reti interconnesse chiamato catenet [2]. I dispositivi di interconnessione di rete sono chiamati gateway. Questi gateway comunicano tra loro a scopi di controllo tramite un Gateway to Gateway Protocol (GGP, Protocollo Gateway-a-Gateway) [3,4]. Occasionalmente un gateway o un host di destinazione comunicherà con un host sorgente, ad esempio per segnalare un errore nell'elaborazione del datagramma. Per tali scopi viene utilizzato l'Internet Control Message Protocol (ICMP). ICMP utilizza il supporto di base di IP come se fosse un protocollo di livello superiore, tuttavia ICMP è in realtà una parte integrante di IP e deve essere implementato da ogni modulo IP.

I messaggi ICMP vengono inviati in diverse situazioni: ad esempio, quando un datagramma non può raggiungere la sua destinazione, quando il gateway non ha la capacità di buffer per inoltrare un datagramma e quando il gateway può indirizzare l'host a inviare traffico su un percorso più breve.

L'Internet Protocol non è progettato per essere assolutamente affidabile. Lo scopo di questi messaggi di controllo è fornire feedback sui problemi nell'ambiente di comunicazione, non rendere IP affidabile. Non ci sono ancora garanzie che un datagramma verrà consegnato o che un messaggio di controllo verrà restituito. Alcuni datagrammi potrebbero ancora non essere consegnati senza alcuna segnalazione della loro perdita. I protocolli di livello superiore che utilizzano IP devono implementare le proprie procedure di affidabilità se è richiesta una comunicazione affidabile.

I messaggi ICMP tipicamente segnalano errori nell'elaborazione dei datagrammi. Per evitare la ricorsione infinita di messaggi su messaggi, ecc., non vengono inviati messaggi ICMP sui messaggi ICMP. Inoltre, i messaggi ICMP vengono inviati solo sugli errori nell'elaborazione del frammento zero dei datagrammi frammentati. (Il frammento zero ha un offset di frammento pari a zero).

Principi di progettazione importanti

1. Parte del livello IP

Livello applicazione

Livello trasporto (TCP/UDP)

Livello rete (IP + ICMP) ← ICMP è parte integrante di IP

Livello collegamento dati

ICMP non è un protocollo di livello superiore che utilizza IP; piuttosto, è una parte integrante del livello IP stesso.

2. Segnalazione errori, non affidabilità

Cosa fa ICMP:

  • ✅ Segnala problemi nell'elaborazione dei datagrammi
  • ✅ Fornisce feedback sulle condizioni di rete
  • ✅ Assiste nella diagnostica di rete

Cosa NON fa ICMP:

  • ❌ Garantire la consegna dei messaggi
  • ❌ Rendere IP affidabile
  • ❌ Fornire affidabilità end-to-end
  • ❌ Implementare il controllo di flusso

3. Nessuna ricorsione infinita

Regola: I messaggi ICMP non vengono mai inviati sui messaggi ICMP.

Datagramma con errore

Messaggio di errore ICMP inviato ✅

Messaggio ICMP con errore

NESSUN messaggio di errore ICMP inviato ❌ (Previene loop infinito)

Esempio:

1. Pacchetto TCP → Datagramma IP → Si verifica un errore
→ ICMP Destination Unreachable inviato ✅

2. ICMP Destination Unreachable → Si verifica un errore
→ NESSUN messaggio ICMP inviato ❌

Questo previene le cascate di messaggi di errore

4. Regola del frammento zero

I messaggi di errore ICMP vengono inviati solo per il primo frammento (offset frammento = 0) di un datagramma frammentato.

Datagramma originale (frammentato):
┌─────────────┬─────────────┬─────────────┐
│ Frammento 0 │ Frammento 1 │ Frammento 2 │
│ offset=0 │ offset=500 │ offset=1000 │
└─────────────┴─────────────┴─────────────┘
↓ ↓ ↓
Errore Errore Errore
↓ ↓ ↓
ICMP inviato ✅ Nessun ICMP ❌ Nessun ICMP ❌

Motivazione:

  • Evita di generare più messaggi di errore per lo stesso datagramma originale
  • Assicura che la segnalazione errori sia gestibile
  • Solo il primo frammento contiene informazioni complete del protocollo di livello superiore

Scenari comuni per i messaggi ICMP

Scenario 1: Destinazione non raggiungibile

Host A → Router → [Rete B è inattiva]

ICMP Type 3: Destination Unreachable

Host A riceve notifica errore

Scenario 2: Reindirizzamento

Host A → Gateway 1 → Gateway 2 → Destinazione

ICMP Type 5: Redirect
"Usa Gateway 2 direttamente per questa destinazione"

Host A aggiorna tabella di routing

Scenario 3: Tempo scaduto

Pacchetto con TTL=1

Router decrementa TTL a 0

ICMP Type 11: Time Exceeded

Host sorgente riceve notifica

Scenario 4: Limitazione sorgente (controllo congestione)

Buffer del gateway pieno

ICMP Type 4: Source Quench

Host sorgente riduce velocità di trasmissione

Nota: Source Quench è ora obsoleto (RFC 6633) a causa dell'inefficacia e del potenziale abuso.

Relazione con altri protocolli

ICMP e IP

Datagramma IP:
┌─────────────┬──────────────────┐
│ Header IP │ Payload IP │
│ Protocol=1 │ Messaggio ICMP │
└─────────────┴──────────────────┘

Header IP:
- Campo Protocol = 1 (indica ICMP)
- Source Address = Mittente ICMP
- Destination Address = Destinatario ICMP

ICMP e GGP

Gateway to Gateway Protocol (GGP):

  • I gateway utilizzano GGP per la comunicazione di controllo tra loro
  • ICMP viene utilizzato per la comunicazione gateway-a-host
  • Scopi diversi, protocolli complementari

ICMP e protocolli di livello superiore

Applicazione (es. utility Ping)
↓ Costruisce messaggio ICMP
Livello IP con modulo ICMP
↓ Invia ICMP in datagramma IP
Interfaccia di rete

Esempi di segnalazione errori

Esempio 1: Host non raggiungibile

Passo 1: Host A invia pacchetto a Host B (10.0.2.100)
┌─────────────────────────────┐
│ Src: 10.0.1.10 │
│ Dst: 10.0.2.100 │
│ Data: "Hello" │
└─────────────────────────────┘

Passo 2: Router R1 determina che Host B non è raggiungibile
Tabella di routing del Router R1: Nessun percorso per 10.0.2.0/24

Passo 3: Router R1 invia ICMP Destination Unreachable
┌─────────────────────────────┐
│ ICMP Type: 3 │
│ Code: 1 (Host Unreachable) │
│ Contiene: Header IP + 64 │
│ bit del │
│ datagramma │
│ originale │
└─────────────────────────────┘

Passo 4: Host A riceve ICMP e segnala errore all'applicazione

Esempio 2: Frammentazione richiesta ma DF impostato

Passo 1: Host A invia pacchetto grande con flag Don't Fragment (DF)
┌─────────────────────────────┐
│ Src: 192.168.1.10 │
│ Dst: 203.0.113.50 │
│ Flags: DF=1 (Don't Fragment)│
│ Length: 1500 bytes │
└─────────────────────────────┘

Passo 2: Router R1 riceve pacchetto
- MTU interfaccia in uscita = 1000 byte
- Dimensione pacchetto = 1500 byte
- Flag DF impostato → Non può frammentare

Passo 3: Router R1 invia ICMP Destination Unreachable
┌─────────────────────────────┐
│ ICMP Type: 3 │
│ Code: 4 (Fragmentation │
│ needed but DF set) │
│ Next-Hop MTU: 1000 │
└─────────────────────────────┘

Passo 4: Host A riceve ICMP
- Implementa Path MTU Discovery
- Riduce dimensione pacchetto a 1000 byte
- Ritrasmette i dati

Questo è un meccanismo critico per la Path MTU Discovery (PMTUD) [RFC 1191].

Regole di elaborazione

Per i mittenti ICMP

  1. Determinare se inviare ICMP:

    • Questa è una condizione di errore?
    • Riguarda un messaggio ICMP? (Se sì, non inviare)
    • Riguarda il frammento zero? (Se non frammento zero, non inviare)
  2. Costruire messaggio ICMP:

    • Impostare Type e Code appropriati
    • Calcolare checksum
    • Includere header IP originale + 64 bit di dati originali
  3. Inviare tramite IP:

    • Usare protocollo IP 1 (ICMP)
    • Impostare campi header IP appropriati

Per i destinatari ICMP

  1. Validare messaggio:

    • Verificare checksum
    • Controllare valori Type e Code
  2. Elaborare per Type:

    • Messaggi di errore: Segnalare al protocollo di livello superiore
    • Messaggi di richiesta: Generare risposta
    • Messaggi informativi: Elaborare appropriatamente
  3. Passare al gestore appropriato:

    • Demultiplexare in base alle informazioni del datagramma originale
    • Notificare protocollo o applicazione interessata

Contesto storico: ICMP è stato definito in RFC 792 (Settembre 1981) come parte della suite di protocolli Internet originale. Rimane un componente fondamentale delle reti IP, anche se alcuni tipi di messaggio sono stati resi obsoleti e nuovi sono stati aggiunti nel corso degli anni.