6.4 TCP Layer Actions (Azioni del livello TCP)
6.4 TCP Layer Actions (Azioni del livello TCP)
Il livello TCP deve tracciare il PMTU per la destinazione di una connessione; non dovrebbe inviare datagrammi più grandi di questo. Un'implementazione semplice potrebbe chiedere al livello IP questo valore (utilizzando l'interfaccia GET_MAXSIZES descritta in [1]) ogni volta che crea un nuovo segmento, ma questo potrebbe essere inefficiente. Inoltre, le implementazioni TCP che seguono l'algoritmo di prevenzione della congestione "slow-start" (avvio lento) [4] tipicamente calcolano e memorizzano nella cache diversi altri valori derivati dal PMTU. Può essere più semplice ricevere una notifica asincrona quando il PMTU cambia, in modo che queste variabili possano essere aggiornate.
Un'implementazione TCP deve anche memorizzare il valore MSS ricevuto dal suo peer (che per impostazione predefinita è 536), e non inviare alcun segmento più grande di questo MSS, indipendentemente dal PMTU. Nelle implementazioni derivate da 4.xBSD, questo richiede l'aggiunta di un campo aggiuntivo al record di stato TCP.
Infine, quando viene ricevuto un messaggio Datagram Too Big, implica che un datagramma è stato scartato dal router che ha inviato il messaggio ICMP. È sufficiente trattare questo come qualsiasi altro segmento scartato, e attendere che il timer di ritrasmissione scada per causare la ritrasmissione del segmento. Se il processo di PMTU Discovery richiede diversi passaggi per stimare il PMTU corretto, questo potrebbe ritardare la connessione di molti tempi di andata e ritorno.
In alternativa, la ritrasmissione potrebbe essere effettuata in risposta immediata a una notifica che il Path MTU è cambiato, ma solo per la connessione specifica specificata dal messaggio Datagram Too Big. La dimensione del datagramma utilizzata nella ritrasmissione non dovrebbe, ovviamente, essere più grande del nuovo PMTU.
Nota: NON SI DEVE ritrasmettere in risposta a ogni messaggio Datagram Too Big, poiché un burst di diversi segmenti sovradimensionati darà origine a diversi tali messaggi e quindi diverse ritrasmissioni degli stessi dati. Se il nuovo PMTU stimato è ancora sbagliato, il processo si ripete, e c'è una crescita esponenziale nel numero di segmenti superflui inviati!
Questo significa che il livello TCP deve essere in grado di riconoscere quando una notifica Datagram Too Big effettivamente diminuisce il PMTU che ha già utilizzato per inviare un datagramma sulla connessione data, e dovrebbe ignorare qualsiasi altra notifica.
Le implementazioni TCP moderne incorporano algoritmi di "congestion avoidance" (prevenzione della congestione) e "slow-start" (avvio lento) per migliorare le prestazioni [4]. A differenza di una ritrasmissione causata da un timeout di ritrasmissione TCP, una ritrasmissione causata da un messaggio Datagram Too Big non dovrebbe cambiare la finestra di congestione. Dovrebbe, tuttavia, attivare il meccanismo di avvio lento (cioè, dovrebbe essere ritrasmesso solo un segmento fino a quando gli acknowledgement iniziano ad arrivare di nuovo).
Le prestazioni TCP possono essere ridotte se la dimensione massima della finestra del mittente non è un multiplo esatto della dimensione del segmento in uso (questa non è la dimensione della finestra di congestione, che è sempre un multiplo della dimensione del segmento). In molti sistemi (come quelli derivati da 4.2BSD), la dimensione del segmento è spesso impostata a 1024 ottetti, e la dimensione massima della finestra (lo "send space" (spazio di invio)) è solitamente un multiplo di 1024 ottetti, quindi la relazione corretta si mantiene per impostazione predefinita. Se viene utilizzato PMTU Discovery, tuttavia, la dimensione del segmento potrebbe non essere un sottomultiplo dello spazio di invio, e potrebbe cambiare durante una connessione; questo significa che il livello TCP potrebbe dover cambiare la dimensione della finestra di trasmissione quando PMTU Discovery cambia il valore PMTU. La dimensione massima della finestra dovrebbe essere impostata al multiplo più grande della dimensione del segmento (PMTU - 40) che è inferiore o uguale alla dimensione dello spazio buffer del mittente.
PMTU Discovery non influisce sul valore inviato nell'opzione TCP MSS, perché quel valore è utilizzato dall'altra estremità della connessione, che potrebbe utilizzare un valore PMTU non correlato.