Questo documento descrive la frammentazione e il riassemblaggio su collegamenti L2TP e spiega come il tuning della MTU (Maximum Transmission Unit) possa aiutare a risolvere alcuni dei problemi associati.
I lettori di questo documento dovrebbero conoscere:
Comandi generali di configurazione della VPDN (Virtual Private Dialup Network)
Argomenti IP generali come frammentazione, riassemblaggio, MTU, incapsulamento, intestazioni e così via.
La maggior parte dei miglioramenti illustrati in questa sezione relativi alla configurazione e alle funzionalità è disponibile nel software Cisco IOS® versione 12.1T o 12.2T e successive. Tuttavia, fare riferimento alle singole sezioni seguenti per ulteriori informazioni.
Le informazioni discusse in questo documento fanno riferimento a dispositivi usati in uno specifico ambiente di emulazione. Su tutti i dispositivi menzionati nel documento la configurazione è stata ripristinata ai valori predefiniti. Se la rete è operativa, valutare attentamente eventuali conseguenze derivanti dall'uso dei comandi.
Per ulteriori informazioni sulle convenzioni usate, consultare il documento Cisco sulle convenzioni nei suggerimenti tecnici.
A volte è necessario frammentare i pacchetti incapsulati nel tunnel per poterli trasmettere sul cavo. Ecco un esempio.
Nel caso di L2TP su UDP, il sovraccarico di tutti i protocolli include un set aggiuntivo di intestazioni IP, UDP e L2TP. L'intestazione IP è 20 byte, l'intestazione UDP è 8 byte e l'intestazione L2TP è generalmente 12 byte. I 12 byte dell'intestazione L2TP includono:
i campi versione e flag (2 byte)
campi id tunnel e id sessione (2 byte ciascuno)
2 byte di offset di spaziatura interna
4 byte di incapsulamento PPP (Point-to-Point Protocol)
Il diagramma mostra ulteriori dettagli:
Se si abilita il sequenziamento dei dati (è disabilitato per impostazione predefinita sui dispositivi Cisco), è necessario aggiungere altri 4 byte per i campi Ns e Nr. Aggiungere le intestazioni IP, UDP e L2TP per aggiungere 40 byte di incapsulamento del protocollo al pacchetto.
Quando si incapsula un pacchetto IP da 1500 byte in L2TP, il pacchetto incapsulato diventa 1540 byte (1500 + 40 byte di intestazioni IP, UDP e L2TP). È necessario frammentare il pacchetto per trasmetterlo su un'interfaccia standard di tipo Ethernet (con MTU di 1500 byte). Il pacchetto incapsulato viene frammentato in due parti. Il primo frammento è composto da 1500 byte (1460 byte del pacchetto IP originale + 40 byte di incapsulamento L2TP). Il secondo frammento è composto da 60 byte (gli ultimi 40 byte del pacchetto IP originale + 20 byte del sovraccarico IP).
Nota: solo il primo frammento contiene l'intestazione L2TP; il secondo frammento contiene solo un'intestazione IP. Questo consente al peer L2TP, che sia un LAC o un LNS, di ricomporre i due frammenti nel pacchetto incapsulato dal tunnel originale da 1540 byte.
Uno dei problemi riscontrati dal protocollo L2TP (Layer 2 Tunneling Protocol) su UDP (User Datagram Protocol) e da altri protocolli di tunneling basati su IP di layer 2 e layer 3 è che il sovraccarico del protocollo di tunneling aumenta le dimensioni del pacchetto incapsulato nel tunnel. Quando il pacchetto originale è già a dimensioni intere, è necessario frammentare il pacchetto incapsulato nel tunnel per trasmetterlo sul cavo.
Uno dei problemi causati dalla frammentazione e dal riassemblaggio del pacchetto L2TP su L2TP Access Concentrator (LAC) e L2TP Network Server (LNS) è che la frammentazione e il riassemblaggio vengono eseguiti a livello di processo nel software Cisco IOS. Quando si aggregano un gran numero di sessioni L2TP e flussi di traffico su una rete LAN, la commutazione di processo può ridurre drasticamente le prestazioni. Per questo motivo, è altamente desiderabile ridurre o eliminare la necessità di frammentazione e riassemblaggio nel percorso di commutazione L2TP.
Utilizzare uno dei metodi descritti in questo documento per regolare l'MTU (Maximum Transmission Unit) e risolvere il problema.
Varie configurazioni e funzionalità del software Cisco IOS sono state progettate per evitare la frammentazione e il riassemblaggio nel percorso di commutazione L2TP regolando l'MTU.
Configurare una MTU IP inferiore sull'interfaccia del modello virtuale utilizzando il comando ip mtu. Configurando un'MTU IP inferiore, il router scarta tutti i pacchetti IP che superano l'MTU IP e in cui il bit DF (Don't Fragment) è impostato nell'intestazione IP. Infine, il router genera un messaggio ICMP (Internet Control Message Protocol) di tipo 3, Host non raggiungibile, con frammentazione del codice 4 necessaria per raggiungere l'origine del pacchetto (l'host originale). Questo messaggio indica l'MTU IP dell'interfaccia, in modo che l'origine possa ridurre le dimensioni del pacchetto in modo che possa passare attraverso l'interfaccia. Questo processo è noto anche come PMTUD (Path MTU Detection). Per ulteriori informazioni, consultare la RFC 1191 . Configurare l'MTU IP sulla dimensione del pacchetto IP più grande, in modo che non superi la PMTU tra il LAC e il LNS quando si aggiunge l'intestazione L2TP completa. Per una PMTU di 1500 byte e un'intestazione L2TP standard da 40 byte, impostare l'MTU IP su 1460 (intestazione da 1500-40 byte).
Se la PMTU è sconosciuta (o cambia) tra il LAC e il LNS, è possibile configurare il comando ip pmtu nel gruppo vpdn. Il comando ip pmtu è stato aggiunto nel software Cisco IOS versione 12.2(4)T con l'ID bug CSCds72714 (non visualizzabile dagli utenti esterni). La funzionalità ip pmtu copia il bit DF del pacchetto interno sull'intestazione L2TP esterna e attiva il PMTUD tra il router e il relativo endpoint del tunnel L2TP.
In Microsoft Windows è disponibile un'impostazione del Registro di sistema che consente di abilitare una funzionalità di backoff per il rilevamento della PMTU. Per informazioni su Windows NT, vedere il seguente articolo sul sito Web Microsoft: Modifica dell'algoritmo PMTU Black Hole Detection per Windows NT 3.51 (Q136970) .
Per Windows 2000/XP, nell'articolo Microsoft How to Troubleshoot Black Hole Router Issues (Q314825) vengono descritti vari metodi in Windows per evitare questo problema. In questo articolo viene definito il termine "router del buco nero" e viene descritto un metodo per individuare i router del buco nero. Vengono suggeriti tre metodi per evitare la perdita di dati che può verificarsi a causa di un router del buco nero.
È possibile anche abilitare la regolazione automatica dell'MTU IP. Questa funzione consente al router di regolare automaticamente l'MTU IP sull'interfaccia di accesso virtuale per compensare le dimensioni dell'intestazione L2TP e la MTU dell'interfaccia di uscita. Questa funzione è stata aggiunta nel software Cisco IOS versione 12.1(5)T con ID bug CSCdr01713 (solo utenti registrati).
Nota: l'MTU IP viene regolata automaticamente solo se non è presente alcuna MTU IP configurata manualmente sull'interfaccia del modello virtuale (usando l'opzione della sezione precedente).
Inizialmente questa funzionalità era attivata per impostazione predefinita senza alcun metodo per disattivarla. L'ID bug CSCdt67753 (solo utenti registrati) nel software Cisco IOS versione 12.2(3) e 12.2(4)T ha aggiunto in seguito il comando [no] ip mtu adjust nel gruppo vpdn per abilitare e disabilitare la funzione. Per impostazione predefinita, questa funzionalità è attivata. questa funzionalità non dispone di un'interfaccia della riga di comando (CLI) per modificare il valore predefinito solo per le connessioni L2X, che non si associano a un gruppo vpdn (ad esempio un tunnel L2F o L2TP avviato da SGBP). L'impossibilità di disabilitarlo per le topologie MMPPP (Multilink PPP) multicassis, combinata con i problemi PMTUD descritti di seguito, ha causato molti problemi agli utenti. Per questo motivo, l'impostazione predefinita è stata modificata in modo che la funzione di regolazione automatica dell'MTU IP sia disabilitata a partire dal software Cisco IOS versione 12.2(6) e 12.2(8)T e successive utilizzando l'ID bug CSCdu69834 (solo utenti registrati).
La regolazione manuale e automatica dell'MTU si basa sul PMTUD tra gli host terminali. Anche se in teoria il processo PMTUD non funziona bene su Internet. Per una descrizione dettagliata dell'interruzione della funzionalità PMTUD su Internet, vedere la RFC 2923 . Il problema più grande è la presenza di "buchi neri" che fanno apparire i download delle pagine web bloccati a metà del flusso. I buchi neri sono generalmente causati da firewall o router configurati per filtrare i messaggi ICMP. Quando l'origine dei pacchetti di grandi dimensioni non è in grado di ricevere il messaggio "ICMP Host Unreachable" (Host ICMP non raggiungibile) dal router, per segnalare che è stata superata la MTU, non può ridurre le dimensioni del pacchetto. Al contrario, continua a cercare di trasmettere lo stesso pacchetto più e più volte con il bit DF impostato. Questi pacchetti vengono scartati dall'LNS perché superano la PMTU e la connessione si interrompe.
A causa di problemi relativi al rilevamento della MTU IP su un tunnel L2TP, tramite il PMTUD, Cisco ha aggiunto la funzione di regolazione delle dimensioni massime del segmento TCP (MSS) nel software Cisco IOS versione 12.2(4)T.
La funzione di regolazione della dimensione massima del segmento TCP, aggiunta dall'ID bug CSCds69577 (solo utenti registrati), è disponibile nel software Cisco IOS versione 12.2(4)T e successive e consente al router di modificare il valore TCP MSS annunciato nei pacchetti di sincronizzazione (SYN) in entrata e in uscita inviati dagli host terminali. Impostando il valore TCP MSS su un valore inferiore a quello predefinito di 1460, è possibile eliminare il TCP come origine dei pacchetti di dimensioni intere. Il valore TCP MSS deve essere impostato in modo che un segmento TCP con intestazione TCP/IP e incapsulato in L2TP su UDP non superi l'MTU IP dell'interfaccia in uscita. Un'intestazione TCP/IP è generalmente di 40 byte e l'intestazione L2TP over UDP è di ulteriori 40 byte. Pertanto, in generale, il valore TCP MSS deve essere impostato su 1420 (1500 - 40 byte - TCP/IP header - 40 byte L2TP su UDP header).
Il comando utilizzato per questa operazione è ip tcp adjust-mss <mss>, a livello di interfaccia.
L'ultima opzione per la riduzione della frammentazione in una rete L2TP richiede il supporto per la negoziazione dell'unità di ricezione massima (MRU, Maximum Receive Unit) sul client del protocollo Point-to-Point. L'opzione MRU in PPP consente a un peer di annunciare la propria unità di ricezione massima. Ad esempio, se un peer annuncia una MRU di 1460, non elaborerà un frame PPP con un payload di lunghezza superiore a 1460 byte. L'implementazione PPP di Cisco utilizza l'MTU dell'interfaccia come valore MRU annunciato durante la negoziazione PPP. Se l'MTU è impostata come valore predefinito di 1500 byte, non viene annunciata alcuna MTU, in quanto si tratta dell'impostazione predefinita standard per il protocollo PPP. Tuttavia, se l'MTU è impostata su 1460, viene pubblicizzato un valore PPP MRU di 1460. Se il peer PPP resta in ascolto dell'MRU annunciato durante la negoziazione PPP e adegua la MTU (e indirettamente l'MTU IP) del collegamento PPP, è possibile evitare la frammentazione. Con una MRU PPP pubblicizzata di 1460, il peer deve impostare l'MTU IP su 1460. Ciò, a sua volta, modifica il valore TCP MSS annunciato dal peer quando si aprono le connessioni TCP ed evita la frammentazione sulla rete L2TP.
Usare il comando mtu <bytes>per configurare una MTU inferiore sull'interfaccia del modello virtuale. Anche in questo caso, è necessario il supporto sul client PPP per ascoltare l'MRU annunciato durante la negoziazione PPP. Un client noto che resta in ascolto dell'opzione MRU è il client PPP di Windows XP. Purtroppo, altri client PPP comunemente implementati non aderiscono all'MRU PPP pubblicizzato come dovrebbero. Fare riferimento alla documentazione del client PPP per determinare se utilizza correttamente il PPP MRU annunciato. Quando si esegue L2TP con LCP proxy, è necessario eseguire la rinegoziazione LCP poiché l'opzione MRU viene negoziata durante la fase LCP. Per abilitare la rinegoziazione LCP, configurare la rinegoziazione LCP in caso di mancata corrispondenza o la rinegoziazione LCP sempre nel gruppo vpdn.
Un problema con la riduzione dell'MTU è che anche l'MTU IP viene ridotta automaticamente. Al momento non è possibile configurare una MTU IP superiore alla MTU su un'interfaccia di modello virtuale. Questa condizione viene rilevata tramite l'ID bug CSCdx39828 come richiesta di funzionalità o miglioramento (non visualizzabile agli utenti esterni).
Questo metodo richiede ai client di ascoltare l'opzione MRU durante la negoziazione LCP. Spesso i clienti sono diversi: alcuni ascoltano il MRU, altri no. I client che ignorano l'MRU incontrano i problemi relativi al PMTUD descritti nella sezione Regolazione automatica dell'MTU IP. Per questi client, è possibile adottare una soluzione diversa disabilitando il PMTUD annullando il bit DF sul pacchetto IP interno. A tale scopo, utilizzare la configurazione seguente:
interface virtual-template1 ip policy route-map clear-df ! route-map clear-df permit 10 match ip address 101 set ip df 0 ! access-list 101 permit tcp any any
Il software Cisco IOS offre molti modi per ottimizzare le prestazioni della commutazione L2TP. La funzionalità PMTUD è una soluzione ideale. Tuttavia, a causa di problemi su Internet, non è sempre affidabile. Il software Cisco IOS fornisce alcuni meccanismi alternativi per mantenere alte le prestazioni della commutazione L2TP e massimizzare la connettività degli utenti.