Inleiding
MPLS LSP Ping is een basistool die wordt gebruikt om de gezondheid van het label switched path (LSP) tussen ingress en egress te valideren. Dit document is bedoeld om de interactie van informatie over meerdere paden tussen initiator en responder in LSP tree trace uit te leggen. Voor gedetailleerde opties die beschikbaar zijn voor deze tool, zou het nuttig zijn om dit document te verwijzen.
Achtergrondinformatie
Deze implementatie van de MPLS EM—MPLS LSP Multipath Tree Trace-functie is gebaseerd op RFC 4379, Detecting Multi-Protocol Label Switched (MPLS) Data Plane Failures.
Door het IP-bestemmingsadres van het probe-pakket in te stellen als loopback-adres (127.x.x.x), kan LSP tree trace worden gebruikt om fouten in LSP te detecteren door te voorkomen dat het pakket IP-routering krijgt. Dus wanneer er een end-to-end connectiviteitsprobleem is, is het handig om LSP Ping te gebruiken als de eerste stap om LSP-fouten te elimineren.
In het geval van scenario's met meerdere paden helpt LSP-ping mogelijk niet altijd om alle LSP-fouten te identificeren. Zoals opgemerkt kan worden, gebruikt elke label switch router (LSR) bij het ontvangen van een gelabeld pakket dat kan worden verzonden via meerdere uitgang-interfaces, bepaalde sleutels uit het pakket en invoer naar hashing-algoritme om de uitgang-interface te bepalen. Afhankelijk van de leverancier, hardware, enz., kan een van de onderstaande opties worden overwogen voor hashing:
- Stack van inkomend label alleen.
- Gegevens over de stapel van binnenkomende labels en de IP-header (als de payload IP is).
- Details over de binnenkomende labelstapel, de IP-header en de transporthoofd.
Normaal gesproken overwegen Cisco-routers een combinatie van labelstack en IP-header als de stack kleiner is dan of gelijk is aan 3 (met IP als de payload).
Neem de volgende topologie.

R1-R7 zijn routers. In bovenstaande topologie zijn er 3 Equal Cost Multi Path (ECMP) routes van R1 naar R5 zoals hieronder,
PATH1: R1-R2-R3-R4-R5
PATH2: R1-R2-R6-R4-R5
PATH3: R1-R2-R6-R7-R5
Stel dat er een probleem is tussen R6 en R7 (zoals een gebroken label distributieprotocol (LDP) of verkeerd labelprogrammeren, enz.) waardoor het verkeer van R1 naar R5 via PATH3 daalt. Als LSP Ping van R1 PATH1 of PATH2 gebruikt, kunt u er uiteindelijk van uitgaan dat het pad tussen R1 en R5 goed is.
Met LSP Ping kunt u het IP-bestemmingsadres instellen als een willekeurig adres uit het bereik van 127.0.0.0/8. Hoewel een eenvoudige optie is om handmatig meerdere pingpakketten met een ander bestemmingsadres te verzenden, is er geen garantie dat alle mogelijke ECMP-paden worden gevalideerd. U hebt een manier nodig die alle mogelijke paden tussen bron en bestemming opvraagt en valideert. LSP Multipath tree trace maakt gebruik van de "Multipath Information Encoding" zoals gedefinieerd in sectie 3.3.1 van RFC4379 en helpt u bij het valideren van alle ECMP-paden.
LSP Tree trace - Hoe het werkt
Een gewone MPLS-ping of traceroute kan aangeven dat er geen storing is, afhankelijk van hoe de transportrouters de pakketten via ECMP laden en delen, maar LSP tree trace biedt een betere methode om te valideren dat alle paden daadwerkelijk werken.
In LSP tree trace verzendt de initiator-router een MPLS-echoverzoek naar elke hop door de TTL stapsgewijs in het bovenste label in te stellen (vanaf 1). Het echoverzoek zal Multipath Information TLV bevatten met een bereik van IP-adressen (binnen het bereik van 127.0.0.0/8) of entropie-labelbereik. Momenteel ondersteunen Cisco-apparaten de IP-bestemmingsoptie en dus zal ons voorbeeld worden gedetailleerd met IP-adresbereik.
Elke transit-LSR bij ontvangst van het verzoekpakket beantwoordt alle uitgaande ECMP-interfaces en koppelt een reeks IP-adressen (of entropielabels) aan het verzoek voor elke interface.
LSP Tree trace - Gedetailleerd voorbeeld
Ga uit van de volgende topologie, bijvoorbeeld hieronder.

Voor eenvoud gebruikt dit voorbeeld het adresbereik van 127.0.0.0-127.0.0.200. Hier zijn de details van stappen in een LSP-boomstructuur.
1) Initiator (R1) stuurt het echoverzoek met onderstaande details:
- IP-bestemming als 127.0.0.0
- Multipath Information TLV met het adresbereik van 127.0.0.0 tot 127.0.0.200.
- De TTL van het bovenste label wordt ingesteld op 1.
2) R2 bij het ontvangen van hetzelfde zal antwoorden terug met Multipath Informatie voor elke uitgang interface. In dit voorbeeld zal het als volgt antwoorden:
- Als de IP-bestemming tussen 127.0.0.0 en 127.0.0.100 ligt, wordt het pakket naar R3 verzonden.
- Als de IP-bestemming binnen 127.0.0.101 tot 127.0.0.200 ligt, wordt het pakket naar R6 verzonden.
3) R1 realiseert zich dat er 2 mogelijke ECMP-paden zijn en dus moet het 2 Echo Request verzenden met TTL ingesteld op 2. Uit verschillende testen is gebleken dat de Initiator altijd met 1 pad eindigt voordat hij naar de volgende gaat. (Dit kan echter ook gelden voor een specifieke toepassing).

4) R1 verzendt nu het echoverzoek met onderstaande details:
- IP-bestemming als 127.0.0.0
- Multipath Information TLV met het adresbereik van 127.0.0.0 tot 127.0.0.100.
- De TTL van het bovenste label wordt ingesteld op 2.
5) R2 stuurt het pakket door naar R3 (het bestemmingsadres is 127.0.0.0). R3 bij het ontvangen van hetzelfde antwoord met dezelfde Multipath Information, omdat er slechts één uitgang-interface is.
Hetzelfde geldt totdat het R5 bereikt.

6) Zodra PATH1 trace is voltooid (na ontvangst van het antwoord van egress), zal Initiator nu PATH2 bevragen. Dit wordt gedaan door het echoverzoek te verzenden met onderstaande details:
- IP-bestemming als 127.0.0.101
- Multipath Information TLV met het adresbereik van 127.0.0.101 tot 127.0.0.200
- De TTL van het bovenste label is ingesteld op 2.
7) R2 stuurt het pakket door naar R6 (het bestemmingsadres is 127.0.0.101). R6 bij het ontvangen van hetzelfde zal antwoorden met Multipath Informatie zoals hieronder:
- Als de IP-bestemming binnen 127.0.0.101 tot 127.0.0.150 ligt, wordt het pakket naar R4 verzonden.
- Als de IP-bestemming tussen 127.0.0.151 en 127.0.0.200 ligt, wordt het pakket naar R7 verzonden.
8) R1 realiseert zich dat er nog een ECMP-pad is waardoor de totaal mogelijke paden als 3. R1 blijft PATH2 bevragen door het volgende echoverzoek te verzenden met onderstaande details:
- IP-bestemming als 127.0.0.101
- Multipath Information TLV met het adresbereik van 127.0.0.101 tot 127.0.0.150
- De TTL van het bovenste label is ingesteld op 3.
9) R2 stuurt het pakket door naar R6 (de bestemming is 127.0.0.101) en R6 stuurt het door naar R4 (de bestemming is 127.0.0.101). R4 heeft geen ECMP-pad en zal dus antwoorden met dezelfde multipad-informatie. Het volgende pakket zal uitgang R5 bereiken.
10) Aangezien PATH2 trace is voltooid, zal R1 doorgaan met de query voor PATH3. Dit wordt gedaan door het echoverzoek te verzenden met onderstaande details:
- IP-bestemming als 127.0.0.151
- Multipath Information TLV met het adresbereik van 127.0.0.151 tot 127.0.0.200
- De TTL van het bovenste label is ingesteld op 3.
11) R2 zal het pakket doorsturen naar R6, die het op zijn beurt doorstuurt naar R7. R7 zal antwoorden met dezelfde Multipath Information TLV. Het volgende pakket bereikt de uitgang router R5.
Nadat deze stappen zijn voltooid, heeft R1 onderstaande details:

Door gebruik te maken van het bestemmingsadres binnen 127.0.0.0 en 127.0.0.100, zal de pakketverzending worden beïnvloed via PATH1, terwijl het gebruik van het adres uit andere bereiken het doorsturen van het pakket over de respectieve paden zal beïnvloeden.
12) Nu verzendt Initiator 3 echo-aanvraagpakketten met TTL ingesteld op 255 en selecteert het adres uit elk bereik, zodat alle paden end-to-end worden gevalideerd.
De opdracht die voor ECMP trace moet worden gebruikt, is traceroute mpls multipath ipv4 <prefix> <mask>. Hierna volgt een voorbeelduitvoer.
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
Merk op dat bovenstaande uitvoer laat zien dat er 3 paden zijn en dat alle paden goed werken. Met behulp van de breedsprakige knop in de bovenstaande opdracht worden alle hop als volgt weergegeven:
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