Passa al contenuto principale

6.2 Storing PMTU Information (Memorizzazione informazioni PMTU)

6.2 Storing PMTU Information (Memorizzazione delle informazioni PMTU)

In generale, il livello IP dovrebbe associare ogni valore PMTU che ha appreso con un percorso specifico. Un percorso è identificato da un indirizzo sorgente, un indirizzo di destinazione e un IP type-of-service (tipo di servizio). (Alcune implementazioni non registrano l'indirizzo sorgente dei percorsi; questo è accettabile per gli host single-homed, che hanno solo un possibile indirizzo sorgente.)

Nota: Alcuni percorsi possono essere ulteriormente distinti da diverse classificazioni di sicurezza. I dettagli di tali classificazioni vanno oltre lo scopo di questo memorandum.

Il luogo ovvio per memorizzare questa associazione è come un campo nelle voci della tabella di routing. Un host non avrà una route per ogni possibile destinazione, ma dovrebbe essere in grado di memorizzare nella cache una route per host per ogni destinazione attiva. (Questo requisito è già imposto dalla necessità di elaborare i messaggi ICMP Redirect (reindirizzamento).)

Quando il primo pacchetto viene inviato a un host per il quale non esiste una route per host, viene scelta una route dall'insieme delle route per rete, o dall'insieme delle route predefinite. I campi PMTU in queste voci di route dovrebbero essere inizializzati all'MTU del collegamento dati del primo hop associato, e non devono mai essere modificati dal processo di PMTU Discovery. (PMTU Discovery crea o modifica solo voci per route per host). Fino a quando non viene ricevuto un messaggio Datagram Too Big, il PMTU associato alla route inizialmente scelta è presunto essere accurato.

Quando viene ricevuto un messaggio Datagram Too Big, il livello ICMP determina una nuova stima per il Path MTU (sia da un valore Next-Hop MTU non zero nel pacchetto, sia utilizzando il metodo descritto nella sezione 5). Se una route per host per questo percorso non esiste, allora ne viene creata una (quasi come se un reindirizzamento ICMP per host fosse in corso di elaborazione; la nuova route utilizza lo stesso router di primo hop della route corrente). Se la stima PMTU associata alla route per host è superiore alla nuova stima, allora il valore nella voce di routing viene modificato.

I livelli di pacchettizzazione devono essere notificati delle diminuzioni del PMTU. Qualsiasi istanza del livello di pacchettizzazione (ad esempio, una connessione TCP) che sta utilizzando attivamente il percorso deve essere notificata se la stima PMTU diminuisce.

Nota: anche se il messaggio Datagram Too Big contiene un Original Datagram Header (intestazione del datagramma originale) che si riferisce a un pacchetto UDP, il livello TCP deve essere notificato se una delle sue connessioni utilizza il percorso dato.

Inoltre, l'istanza che ha inviato il datagramma che ha suscitato il messaggio Datagram Too Big dovrebbe essere notificata che il suo datagramma è stato scartato, anche se la stima PMTU non è cambiata, in modo che possa ritrasmettere il datagramma scartato.

Nota: Il meccanismo di notifica può essere analogo al meccanismo utilizzato per fornire la notifica di un messaggio ICMP Source Quench (soppressione della sorgente). In alcune implementazioni (come i sistemi derivati da 4.2BSD), il meccanismo di notifica esistente non è in grado di identificare la connessione specifica coinvolta, e quindi è necessario un meccanismo aggiuntivo.

In alternativa, un'implementazione può evitare l'uso di un meccanismo di notifica asincrono per le diminuzioni PMTU posticipando la notifica fino al prossimo tentativo di inviare un datagramma più grande della stima PMTU. In questo approccio, quando viene fatto un tentativo di INVIARE un datagramma con il bit DF impostato, e il datagramma è più grande della stima PMTU, la funzione SEND dovrebbe fallire e restituire un'indicazione di errore appropriata. Questo approccio può essere più adatto a un livello di pacchettizzazione senza connessione (come uno che utilizza UDP), che (in alcune implementazioni) può essere difficile da "notificare" dal livello ICMP. In questo caso, i normali meccanismi di ritrasmissione basati su timeout verrebbero utilizzati per recuperare dai datagrammi scartati.

È importante comprendere che la notifica delle istanze del livello di pacchettizzazione che utilizzano il percorso del cambiamento nel PMTU è distinta dalla notifica di un'istanza specifica che un pacchetto è stato scartato. Quest'ultima dovrebbe essere fatta il prima possibile (cioè, in modo asincrono dal punto di vista dell'istanza del livello di pacchettizzazione), mentre la prima può essere ritardata fino a quando un'istanza del livello di pacchettizzazione vuole creare un pacchetto. La ritrasmissione dovrebbe essere effettuata solo per quei pacchetti che sono noti per essere stati scartati, come indicato da un messaggio Datagram Too Big.