Introduzione
Ping LSP MPLS è uno strumento di base utilizzato per verificare lo stato dell'LSP (Label Switched Path) tra l'ingresso e l'uscita. Lo scopo di questo documento è spiegare l'interazione delle informazioni su percorsi multipli tra l'iniziatore e il risponditore nella traccia della struttura LSP. Per informazioni dettagliate sulle opzioni disponibili per questo strumento, consultare questo documento.
Premesse
Questa implementazione della funzionalità MPLS EM - MPLS LSP Multipath Tree Trace è basata sulla RFC 4379, Detection Multi-Protocol Label Switched (MPLS) Data Plane Failures.
Impostando l'indirizzo di destinazione IP del pacchetto di richiesta come indirizzo di loopback (127.x.x.x), è possibile utilizzare la traccia dell'albero LSP per rilevare errori nell'LSP evitando il routing IP del pacchetto. Pertanto, in presenza di problemi di connettività end-to-end, è utile utilizzare il ping LSP come primo passo per eliminare eventuali errori LSP.
In scenari a percorsi multipli, il ping LSP potrebbe non sempre aiutare a identificare tutti gli errori LSP. Come si può notare, ogni router Label Switch (LSR) che riceve un pacchetto etichettato, che può essere inviato su più interfacce in uscita, usa alcune chiavi del pacchetto e l'input all'algoritmo di hashing per decidere l'interfaccia in uscita. A seconda del fornitore, dell'hardware e così via, per l'hashing può essere presa in considerazione una qualsiasi delle seguenti opzioni:
- Solo stack di etichette in ingresso.
- Stack etichette in ingresso e dettagli intestazione IP (se il payload è IP).
- Dettagli dello stack di etichette in ingresso, dell'intestazione IP e dell'intestazione di trasporto.
In genere, i router Cisco prendono in considerazione una combinazione di stack di etichette e intestazione IP se lo stack è di dimensioni inferiori o uguali a 3 (con IP come payload).
Si supponga di seguire la topologia.
![200097-MPLS-LSP-Multipath-Trace-00.jpeg](/c/dam/en/us/support/docs/multiprotocol-label-switching-mpls/multiprotocol-label-switching-mpls/200097-MPLS-LSP-Multipath-Trace-00.jpeg)
R1-R7 sono router. Nella topologia sopra riportata, esistono 3 percorsi ECMP (Multi Path) a costo uguale da R1 a R5, come illustrato di seguito.
PERCORSO1: R1-R2-R3-R4-R5
PERCORSO2: R1-R2-R6-R4-R5
PERCORSO 3: R1-R2-R6-R7-R5
Si supponga che esista un problema tra R6 e R7 (ad esempio, un protocollo LDP (Breakdown Label Distribution Protocol) o una programmazione errata delle etichette, ecc.) che causa la perdita del traffico da R1 a R5 tramite PATH3. Se LSP Ping da R1 accetta PATH1 o PATH2, è possibile che si supponga che il percorso tra R1 e R5 sia corretto.
Il ping LSP consente di impostare l'indirizzo di destinazione IP come qualsiasi indirizzo compreso nell'intervallo 127.0.0.0/8. Anche se un'opzione semplice consiste nel provare a inviare manualmente più pacchetti ping con un indirizzo di destinazione diverso, non vi è alcuna garanzia che tutti i percorsi ECMP possibili vengano convalidati. È necessario un modo per interrogare e convalidare tutti i possibili percorsi tra origine e destinazione. La traccia dell'albero a percorsi multipli LSP sfrutta la "Multipath Information Encoding" definita nella sezione 3.3.1 della RFC4379 e consente di convalidare tutti i percorsi ECMP.
Traccia dell'albero LSP - Come funziona
Un ping MPLS o un traceroute regolare può indicare che non vi sono errori a seconda di come i router di transito condividono il carico sui pacchetti tramite ECMP, ma il trace dell'albero LSP fornisce un metodo migliore per verificare che tutti i percorsi funzionino realmente.
Nel trace dell'albero LSP, il router dell'iniziatore invia una richiesta echo MPLS a ciascun hop impostando il valore TTL nell'etichetta superiore in modo incrementale (a partire da 1). La richiesta echo conterrà il valore TLV (Multipath Information) che trasporta un intervallo di indirizzi IP (nell'intervallo 127.0.0.0/8) o di etichette di entropia. Attualmente i dispositivi Cisco supportano l'opzione della destinazione IP, quindi il nostro esempio verrà dettagliato con l'intervallo di indirizzi IP.
Ogni LSR di transito che riceve il pacchetto di richiesta risponderà con tutte le interfacce ECMP in uscita e assocerà un intervallo di indirizzi IP (o etichetta di entropia) dalla richiesta per ciascuna interfaccia.
Traccia dell'albero LSP - Esempio dettagliato
Si supponga, ad esempio, di seguire la topologia riportata di seguito.
![200097-MPLS-LSP-Multipath-Trace-01.jpeg](/c/dam/en/us/support/docs/multiprotocol-label-switching-mpls/multiprotocol-label-switching-mpls/200097-MPLS-LSP-Multipath-Trace-01.jpeg)
Per semplicità, in questo esempio viene utilizzato un intervallo di indirizzi compreso tra 127.0.0.0 e 127.0.0.200. Di seguito sono riportati i dettagli dei passaggi in una traccia della struttura LSP.
1) L'iniziatore (R1) invia la richiesta echo con i seguenti dettagli:
- Destinazione IP come 127.0.0.0
- Multipath Information TLV contenente l'intervallo di indirizzi da 127.0.0.0 a 127.0.0.200.
- Il valore TTL dell'etichetta superiore verrà impostato su 1.
2) R2 alla ricezione dello stesso risponderà con Multipath Information per ogni interfaccia in uscita. In questo esempio, la risposta sarà la seguente:
- Se la destinazione IP è compresa tra 127.0.0.0 e 127.0.0.100, il pacchetto verrà inviato a R3.
- Se la destinazione IP è compresa tra 127.0.0.101 e 127.0.0.200, il pacchetto verrà inviato a R6.
3) R1 si rende conto che esistono 2 possibili percorsi ECMP e quindi deve inviare 2 richieste echo con TTL impostato su 2. Da vari test, è stato osservato che l'iniziatore finisce sempre con 1 percorso prima di passare a quello successivo. (ma questo potrebbe essere vero per un'implementazione specifica).
![200097-MPLS-LSP-Multipath-Trace-02.jpeg](/c/dam/en/us/support/docs/multiprotocol-label-switching-mpls/multiprotocol-label-switching-mpls/200097-MPLS-LSP-Multipath-Trace-02.jpeg)
4) R1 invia la richiesta echo con i seguenti dettagli:
- Destinazione IP come 127.0.0.0
- Multipath Information TLV contenente l'intervallo di indirizzi da 127.0.0.0 a 127.0.0.100.
- Il valore TTL dell'etichetta superiore verrà impostato su 2.
5) R2 inoltrerà il pacchetto a R3 (poiché l'indirizzo di destinazione è 127.0.0.0). R3 alla ricezione dello stesso risponderà con le stesse informazioni a percorsi multipli, poiché è presente una sola interfaccia in uscita.
Lo stesso vale finché non raggiunge R5.
![200097-MPLS-LSP-Multipath-Trace-03.jpeg](/c/dam/en/us/support/docs/multiprotocol-label-switching-mpls/multiprotocol-label-switching-mpls/200097-MPLS-LSP-Multipath-Trace-03.jpeg)
6) Una volta completata la traccia PATH1 (dopo la ricezione della risposta dall'uscita), l'iniziatore eseguirà la query su PATH2. A tale scopo, inviare la richiesta echo con i dettagli riportati di seguito:
- Destinazione IP come 127.0.0.101
- Multipath Information TLV contenente l'intervallo di indirizzi da 127.0.0.101 a 127.0.0.200
- Il valore TTL dell'etichetta superiore è impostato su 2.
7) R2 inoltrerà il pacchetto a R6 (poiché l'indirizzo di destinazione è 127.0.0.101). R6 alla ricezione dello stesso risponderà con Informazioni multipath come di seguito:
- Se la destinazione IP è compresa tra 127.0.0.101 e 127.0.0.150, il pacchetto verrà inviato a R4.
- Se la destinazione IP è compresa tra 127.0.0.151 e 127.0.0.200, il pacchetto verrà inviato a R7.
8) R1 si rende conto che esiste un altro percorso ECMP rendendo il totale dei percorsi possibili pari a 3. R1 continua a eseguire query su PATH2 inviando la richiesta echo successiva con i dettagli seguenti:
- Destinazione IP come 127.0.0.101
- Multipath Information TLV contenente l'intervallo di indirizzi da 127.0.0.101 a 127.0.0.150
- Il valore TTL dell'etichetta superiore è impostato su 3.
9) R2 inoltrerà il pacchetto a R6 (poiché la destinazione è 127.0.0.101) e R6 lo inoltrerà a R4 (poiché la destinazione è 127.0.0.101). R4 non dispone di alcun percorso ECMP, quindi risponderà con le stesse informazioni a percorsi multipli. Il pacchetto successivo raggiungerà la R5 in uscita.
10) Poiché la traccia PATH2 è stata completata, R1 continuerà la query per PATH3. A tale scopo, inviare la richiesta echo con i dettagli riportati di seguito:
- Destinazione IP come 127.0.0.151
- Multipath Information TLV contenente l'intervallo di indirizzi da 127.0.0.151 a 127.0.0.200
- Il valore TTL dell'etichetta superiore è impostato su 3.
11) R2 inoltrerà il pacchetto a R6, che a sua volta lo inoltrerà a R7. R7 risponderà con lo stesso TLV informazioni su percorsi multipli. Il pacchetto successivo raggiunge il router R5.
Al termine della procedura, R1 conterrà i seguenti dettagli:
![200097-MPLS-LSP-Multipath-Trace-04.jpeg](/c/dam/en/us/support/docs/multiprotocol-label-switching-mpls/multiprotocol-label-switching-mpls/200097-MPLS-LSP-Multipath-Trace-04.jpeg)
Utilizzando l'indirizzo di destinazione tra 127.0.0.0 e 127.0.0.100, l'inoltro del pacchetto verrà influenzato su PATH1, mentre l'uso dell'indirizzo di altri intervalli influenzerà l'inoltro del pacchetto sui rispettivi percorsi.
12) Ora l'iniziatore invia 3 pacchetti di richiesta echo con TTL impostato su 255 e seleziona l'indirizzo da ciascun intervallo in modo che tutti i percorsi vengano convalidati end-to-end.
Il comando da utilizzare per la traccia ECMP è traceroute mpls multipath ipv4 <prefix> <mask>. Di seguito viene riportato un esempio di output.
R1#traceroute mpls multipath ipv4 10.1.5.5 255.255.255.255
Starting LSP Multipath Traceroute for 10.1.5.5/32
Codes: '!' - success, 'Q' - request not sent, '.' - timeout,
'L' - labeled output interface, 'B' - unlabeled output interface,
'D' - DS Map mismatch, 'F' - no FEC mapping, 'f' - FEC mismatch,
'M' - malformed request, 'm' - unsupported tlvs, 'N' - no label entry,
'P' - no rx intf label prot, 'p' - premature termination of LSP,
'R' - transit router, 'I' - unknown upstream index,
'l' - Label switched with FEC change, 'd' - see DDMAP for return code,
'X' - unknown return code, 'x' - return code 0
Type escape sequence to abort.
LLL!
Path 0 found,
output interface Et0/0.12 nexthop 10.1.12.2
source 10.1.12.1 destination 127.0.0.4
LL!
Path 1 found,
output interface Et0/0.12 nexthop 10.1.12.2
source 10.1.12.1 destination 127.0.0.2
L!
Path 2 found,
output interface Et0/0.12 nexthop 10.1.12.2
source 10.1.12.1 destination 127.0.0.0
Paths (found/broken/unexplored) (3/0/0)
Echo Request (sent/fail) (9/0)
Echo Reply (received/timeout) (9/0)
Total Time Elapsed 27 ms
L'output precedente mostra che sono presenti 3 percorsi e che tutti funzionano correttamente. L'uso della manopola verbose nel comando precedente elenca tutti gli hop come indicato di seguito:
R1#traceroute mpls multipath ipv4 10.1.5.5 255.255.255.255 verbose
Starting LSP Multipath Traceroute for 10.1.5.5/32
Codes: '!' - success, 'Q' - request not sent, '.' - timeout,
'L' - labeled output interface, 'B' - unlabeled output interface,
'D' - DS Map mismatch, 'F' - no FEC mapping, 'f' - FEC mismatch,
'M' - malformed request, 'm' - unsupported tlvs, 'N' - no label entry,
'P' - no rx intf label prot, 'p' - premature termination of LSP,
'R' - transit router, 'I' - unknown upstream index,
'l' - Label switched with FEC change, 'd' - see DDMAP for return code,
'X' - unknown return code, 'x' - return code 0
Type escape sequence to abort.
LLL!
Path 0 found,
output interface Et0/0.12 nexthop 10.1.12.2
source 10.1.12.1 destination 127.0.0.4
0 10.1.12.1 10.1.12.2 MRU 1500 [Labels: 22 Exp: 0] multipaths 0
L 1 10.1.12.2 10.1.23.3 MRU 1500 [Labels: 23 Exp: 0] ret code 8 multipaths 2
L 2 10.1.23.3 10.1.34.4 MRU 1500 [Labels: 22 Exp: 0] ret code 8 multipaths 1
L 3 10.1.34.4 10.1.45.5 MRU 1500 [Labels: implicit-null Exp: 0] ret code 8 multipaths 1
! 4 10.1.45.5, ret code 3 multipaths 0
LL!
Path 1 found,
output interface Et0/0.12 nexthop 10.1.12.2
source 10.1.12.1 destination 127.0.0.2
0 10.1.12.1 10.1.12.2 MRU 1500 [Labels: 22 Exp: 0] multipaths 0
L 1 10.1.12.2 10.1.26.6 MRU 1500 [Labels: 16 Exp: 0] ret code 8 multipaths 2
L 2 10.1.26.6 10.1.46.4 MRU 1500 [Labels: 22 Exp: 0] ret code 8 multipaths 2
L 3 10.1.46.4 10.1.45.5 MRU 1500 [Labels: implicit-null Exp: 0] ret code 8 multipaths 1
! 4 10.1.45.5, ret code 3 multipaths 0
L!
Path 2 found,
output interface Et0/0.12 nexthop 10.1.12.2
source 10.1.12.1 destination 127.0.0.0
0 10.1.12.1 10.1.12.2 MRU 1500 [Labels: 22 Exp: 0] multipaths 0
L 1 10.1.12.2 10.1.26.6 MRU 1500 [Labels: 16 Exp: 0] ret code 8 multipaths 2
L 2 10.1.26.6 10.1.67.7 MRU 1500 [Labels: 17 Exp: 0] ret code 8 multipaths 2
L 3 10.1.67.7 10.1.57.5 MRU 1500 [Labels: implicit-null Exp: 0] ret code 8 multipaths 1
! 4 10.1.57.5, ret code 3 multipaths 0
Paths (found/broken/unexplored) (3/0/0)
Echo Request (sent/fail) (9/0)
Echo Reply (received/timeout) (9/0)
Total Time Elapsed 29 ms