Inleiding
MPLS LSP Ping is een basisgereedschap dat wordt gebruikt om de status van het label switched path (LSP) tussen inloop en uitloop te valideren. Dit document is bedoeld om de interactie van multipath informatie tussen initiator en responder in LSP boomspoor te verklaren. Het is handig om dit document te raadplegen voor uitgebreide opties die voor deze tool beschikbaar zijn.
Achtergrondinformatie
Deze implementatie van de MPLS EM-MPLS LSP Multipath Tree Trace-functie is gebaseerd op RFC 4379 voor het detecteren van fouten in dataplane van Multi-Protocol Label Switched (MPLS).
Door het IP-doeladres van het sonde-pakket in te stellen als loopback-adres (127.x.x.x) kan LSP-boomstructuur worden gebruikt om een fout in LSP te detecteren door te voorkomen dat het pakket IP-routing krijgt. Zo wanneer er van begin tot eind connectiviteitskwestie is, is het nuttig om LSP Ping als eerste stap te gebruiken om het even welke mislukking LSP te elimineren.
In het geval van multipath scenario's, kan LSP ping niet altijd helpen alle LSP mislukkingen te identificeren. Aangezien het zou kunnen worden opgemerkt, gebruikt om het even welke etiketinterfacerouterrouter (LSR) bij het ontvangen van een geëtiketteerd switch die uit veelvoudige uitgangsinterfaces kan worden verzonden, bepaalde sleutels van het pakket en ingangssignaal aan hakalgoritme om de uitgangsinterface te beslissen. Afhankelijk van de leverancier, hardware, etc. kunnen de onderstaande opties worden overwogen voor hashing:
- Inkomende label stack alleen.
- Inkomende labelstack en IP-headerdetails (als de payload IP is).
- Inkomende labelstack, IP-header en transportheaderdetails.
Normaal gesproken beschouwen Cisco-routers een combinatie van labelstack en IP-header als de stack een grootte kleiner dan of gelijk aan 3 heeft (met IP als de payload).
Ga uit van de volgende topologie.
R1-R7 zijn routers. In bovenstaande topologie zijn er 3 gelijkwaardige "multi path" (ECMP) routes van R1 naar R5 zoals hieronder beschreven.
PAD1: R1-R2-R3-R4-R5
PAD2: R1-R2-R6-R4-R5
PAD3: R1-R2-R6-R7-R5
Stel dat er een probleem is tussen R6 en R7 (zoals broken label distribution protocol (LDP) of label misprogrammeren, etc.) waardoor het verkeer van R1 naar R5 via PATH3 daalt. Als LSP Ping van R1 PATH1 of PATH2 neemt, kunt u er uiteindelijk van uitgaan dat het pad tussen R1 en R5 prima is.
Met LSP Ping kunt u het IP-doeladres instellen als elk ander adres uit het bereik 127.0.0.0/8. Hoewel één eenvoudige optie is om handmatig te proberen meerdere ping-pakketten met een ander doeladres te verzenden, is er geen garantie dat alle mogelijke ECMP-paden zullen 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" die is gedefinieerd in sectie 3.3.1 van RFC4379 en helpt u bij het valideren van alle ECMP-paden.
LSP Tree Tracering - Hoe het werkt
Een reguliere MPLS ping of traceroute kan erop wijzen dat er geen fout is afhankelijk van hoe de transitrouters load-share de pakketten via ECMP, maar LSP boomspoor biedt een betere methode om te valideren dat alle paden daadwerkelijk werken.
In LSP boomspoor, verzendt de initiatiefnemerrouter MPLS echoverzoek naar elke hop door TTL in het hoogste etiket op stijgende wijze te plaatsen (die van 1 beginnen). Het echoverzoek zal Multipath Information TLV dragen die een reeks IP-adressen (binnen 127.0.0.0/8 bereik) of entropie label bereik draagt. Momenteel ondersteunen Cisco-apparaten de optie voor de IP-bestemming en worden in ons voorbeeld de IP-adresbereiken gedetailleerd weergegeven.
Elke LSR bij ontvangst van het aanvraagpakket zal reageren met alle uitgaande ECMP-interfaces en zal een IP-adresbereik (of entropielabel) koppelen aan het verzoek voor elke interface.
LSP Tree Tracing - Gedetailleerd voorbeeld
Ga ervan uit dat de onderstaande topologie wordt gevolgd.
Voor eenvoud, gebruikt dit voorbeeld adresbereik van 127.0.0.0-127.0.0.200. Hier zijn de details van stappen in een LSP boomspoor.
1) Initiator (R1) stuurt het echoverzoek met onderstaande details:
- IP-bestemming als 127.0.0.0
- Multipath Information TLV met 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 het zelfde zal terug met Multipath Informatie voor elke uitgang interface antwoorden. In dit voorbeeld zal het als volgt antwoorden:
- Als IP-bestemming binnen 127.0.0.0 tot 127.0.0.10 valt, wordt het pakket naar R3 verzonden.
- Als IP-bestemming binnen 127.0.0.101 tot 127.0.0.200 valt, wordt het pakket naar R6 verzonden.
3) R1 realiseert zich dat er 2 mogelijke ECMP-paden zijn en moet dus 2 Echo-aanvraag verzenden met TTL ingesteld op 2. Uit verschillende tests is gebleken dat de initiator altijd eindigt met 1 pad voordat hij naar de volgende gaat. (Maar dit zou voor een specifieke implementatie kunnen gelden).
4) R1 verzendt nu het echoverzoek met onderstaande details:
- IP-bestemming als 127.0.0.0
- Multipath Information TLV met adresbereik van 127.0.0.0 tot 127.0.0.100.
- De TTL van het bovenste label wordt ingesteld op 2.
5) R2 zal het pakket door:sturen naar R3 (aangezien het bestemmingsadres 127.0.0.0 is). R3 bij het ontvangen van het zelfde zal terug met de zelfde Multipath Informatie antwoorden, aangezien er slechts één uitgaande interface is.
Hetzelfde geldt tot het R5 bereikt.
6) Zodra PATH1-overtrek is voltooid (na het ontvangen van het antwoord van uitgang), zal Initiator nu PATH2 opvragen. Dit wordt uitgevoerd door het verzenden van de echoverzoek met onderstaande details:
- IP-bestemming als 127.0.0.101
- Multipath Information TLV met adresbereik van 127.0.0.101 tot 127.0.0.200
- De TTL van het bovenste label is ingesteld op 2.
7) R2 zal het pakket door:sturen naar R6 (aangezien het bestemmingsadres 127.0.0.101 is). R6 zal bij het ontvangen van hetzelfde antwoord terug met Multipath Informatie zoals hieronder:
- Als IP-bestemming binnen 127.0.0.101 tot 127.0.0.150 valt, wordt het pakket naar R4 verzonden.
- Als IP-bestemming binnen 127.0.0.151 tot 127.0.0.200 valt, wordt het pakket naar R7 verzonden.
8) R1 realiseert zich dat er nog een ECMP-pad is dat het totaal aantal mogelijke paden op 3 brengt. R1 blijft PADET2 vragen door het volgende echoverzoek met onderstaande details te verzenden:
- IP-bestemming als 127.0.0.101
- Multipath Information TLV met adresbereik als 127.0.0.101 tot 127.0.0.150
- De TTL van hoogste etiket plaatste aan 3.
9) R2 zal het pakket naar R6 (aangezien de bestemming 127.0.0.101 is) door:sturen en R6 zal het aan R4 (aangezien de bestemming 127.0.0.101 is) door:sturen. R4 heeft geen ECMP-pad en zal dus terugantwoorden met dezelfde Multipath Information. Het volgende pakket zal uitgang R5 bereiken.
10) Aangezien PATH2 trace is voltooid, zal R1 de query voor PATH3 voortzetten. Dit wordt uitgevoerd door het verzenden van de echoverzoek met onderstaande details:
- IP-bestemming als 127.0.0.151
- Multipath Information TLV met adresbereik als 127.0.0.151 tot 127.0.0.200
- De TTL van hoogste etiket plaatste aan 3.
11) R2 zal pakket naar R6 door sturen, dat op zijn beurt het naar R7 door zal sturen. R7 zal terug met dezelfde Multipath Information TLV. Het volgende pakket bereikt uitgangsrouter R5.
Nadat deze stappen zijn voltooid, heeft R1 onderstaande informatie:
Door bestemmingsadres binnen 127.0.0.0 en 127.0.0.100 te gebruiken, zal het pakket door:sturen over PATH1 worden beïnvloed terwijl het gebruiken van het adres van andere bereiken het door:sturen van het pakket over respectieve paden zal beïnvloeden.
12) Nu zal Initiator 3 echo-aanvraagpakketten verzenden met TTL ingesteld op 255 en adres uit elk bereik selecteren zodat alle paden end-to-end gevalideerd zullen worden.
De opdracht die voor het ECMP-traceroute moet worden gebruikt, is traceroute mpls multipath ipv4 <prefix> <masker>. Hier 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 aangeeft dat er 3 paden zijn en dat alle paden prima werken. Het gebruik van de breedsprakige knop in bovenstaande opdracht zal alle hops zoals hieronder:
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