소개
MPLS LSP Ping은 인그레스(ingress)와 이그레스(egress) 간의 LSP(Label Switched Path) 상태를 확인하는 데 사용되는 기본 툴입니다. 이 문서에서는 LSP 트리 추적에서 initiator와 responder 간의 다중 경로 정보 상호 작용을 설명합니다. 이 도구에 사용할 수 있는 자세한 옵션은 이 문서를 참조하는 것이 좋습니다.
배경 정보
이러한 MPLS EM 구현—MPLS LSP 다중 경로 트리 추적 기능은 RFC 4379를 기반으로 MPLS(Multi-Protocol Label Switched) 데이터 플레인 장애를 감지합니다.
프로브 패킷의 IP 대상 주소를 루프백 주소(127.x.x.x)로 설정하면 LSP 트리 추적을 사용하여 패킷이 IP로 라우팅되는 것을 방지하여 LSP에서 오류를 탐지할 수 있습니다. 따라서 엔드 투 엔드 연결 문제가 발생할 때마다 LSP 장애를 제거하기 위한 첫 번째 단계로 LSP Ping을 사용하는 것이 좋습니다.
다중 경로 시나리오의 경우, LSP ping이 모든 LSP 장애를 식별하는 데 도움이 되지는 않을 수 있습니다. 주지하는 바와 같이, 다중 이그레스 인터페이스로 전송될 수 있는 레이블이 지정된 패킷을 수신하는 모든 LSR(Label Switch Router)은 패킷의 특정 키를 사용하여 해싱 알고리즘에 입력하여 이그레스 인터페이스를 결정합니다. 공급업체, 하드웨어 등에 따라 다음 옵션 중 하나를 해싱할 수 있습니다.
- 들어오는 레이블 스택만
- 수신 레이블 스택 및 IP 헤더 세부사항(페이로드가 IP인 경우).
- 수신 레이블 스택, IP 헤더 및 전송 헤더 세부사항.
일반적으로 Cisco 라우터는 스택의 크기가 3 이하인 경우(페이로드로 IP 포함) 레이블 스택과 IP 헤더의 조합을 고려합니다.
다음 토폴로지를 가정합니다.
R1-R7은 라우터입니다. 위 토폴로지에는 R1에서 R5까지 3개의 ECMP(Equal Cost Multi Path) 경로가 있습니다.
경로1: R1-R2-R3-R4-R5
경로2: R1-R2-R6-R4-R5
경로3: R1-R2-R6-R7-R5
R6과 R7 사이에 문제가 있다고 가정합니다(예: LDP(broken label distribution protocol) 또는 레이블 오프로그래밍 등). 따라서 PATH3를 통해 R1에서 R5로 이동하는 트래픽이 손실됩니다. R1에서 LSP Ping이 PATH1 또는 PATH2를 사용하는 경우 R1과 R5 사이의 경로가 멀다고 가정할 수 있습니다.
LSP Ping을 사용하면 IP 대상 주소를 127.0.0.0/8 범위 중 하나로 설정할 수 있습니다. 간단한 옵션 중 하나는 여러 ping 패킷을 서로 다른 대상 주소로 수동으로 보내려고 시도하는 것이지만, 모든 가능한 ECMP 경로가 검증된다는 보장은 없습니다. 소스와 대상 간에 가능한 모든 경로를 쿼리하고 검증하는 방법이 필요합니다. LSP 다중 경로 트리 추적은 RFC4379의 Section 3.3.1에 정의된 "Multipath Information Encoding"을 활용하며 모든 ECMP 경로를 검증하는 데 도움이 됩니다.
LSP 트리 추적 - 작동 방식
일반 MPLS ping 또는 traceroute는 트랜짓 라우터가 ECMP를 통해 패킷을 로드 공유하는 방법에 따라 장애가 없음을 나타낼 수 있지만, LSP 트리 추적은 모든 경로가 실제로 작동하는지 검증하는 더 나은 방법을 제공합니다.
LSP 트리 추적에서 개시자 라우터는 증분 방식(1부터 시작)으로 상단 레이블의 TTL을 설정하여 각 홉에 MPLS 에코 요청을 보냅니다. 에코 요청은 IP 주소 범위(127.0.0.0/8 범위 내) 또는 엔트로피 레이블 범위를 전달하는 다중 경로 정보 TLV를 전달합니다. 현재 Cisco 디바이스는 IP destination 옵션을 지원하므로 IP 주소 범위를 사용하여 이 예제를 자세히 살펴보겠습니다.
요청 패킷을 수신하는 각 트랜짓 LSR은 모든 ECMP 발신 인터페이스에 응답하고 각 인터페이스의 요청에서 IP 주소(또는 엔트로피 레이블)의 범위를 연결합니다.
LSP 트리 추적 - 자세한 예
아래 예를 들어 다음 토폴로지를 가정합니다.
간소화하기 위해 이 예에서는 주소 범위 127.0.0.0-127.0.0.200을 사용합니다. 다음은 LSP 트리 추적의 세부 단계입니다.
1) 개시자(R1)가 아래의 세부 사항과 함께 에코 요청을 보냅니다.
- IP 대상(127.0.0.0)
- 주소 범위를 127.0.0.0~127.0.0.200으로 전달하는 다중 경로 정보 TLV입니다.
- 상단 레이블의 TTL은 1로 설정됩니다.
2) 동일한 수신 시 R2는 각 이그레스 인터페이스에 대해 다중 경로 정보로 다시 응답합니다. 이 예에서는 다음과 같이 회신합니다.
- IP 대상이 127.0.0.0에서 127.0.0.100 사이인 경우 패킷이 R3로 전송됩니다.
- IP 대상이 127.0.0.101에서 127.0.0.200 사이인 경우 패킷이 R6로 전송됩니다.
3) R1은 2개의 가능한 ECMP 경로가 있음을 인식하고 TTL이 2로 설정된 2개의 에코 요청을 전송해야 합니다. 다양한 테스트에서 Initiator가 다음 단계로 넘어가기 전에 항상 1개 경로로 끝나는 것이 관찰되었습니다. (그러나 이는 특정 구현에 해당될 수 있습니다.)
4) R1은 이제 아래 세부 사항과 함께 에코 요청을 보냅니다.
- IP 대상(127.0.0.0)
- 주소 범위를 127.0.0.0~127.0.0.100으로 전달하는 다중 경로 정보 TLV입니다.
- 상단 레이블의 TTL은 2로 설정됩니다.
5) R2는 패킷을 R3에 전달합니다(대상 주소가 127.0.0.0이므로). 이그레스 인터페이스가 하나뿐이므로 동일한 수신 시 R3는 동일한 다중 경로 정보로 다시 응답합니다.
R5에 도달할 때까지 마찬가지이다.
6) PATH1 추적이 완료되면(이그레스(egress)에서 회신을 받은 후) Initiator는 PATH2를 쿼리합니다. 이 작업은 아래 세부 정보와 함께 에코 요청을 전송하여 수행됩니다.
- IP 대상(127.0.0.101)
- 주소 범위를 127.0.0.101에서 127.0.0.200으로 전달하는 다중 경로 정보 TLV
- 최상위 레이블의 TTL은 2로 설정됩니다.
7) R2는 패킷을 R6에 전달합니다(대상 주소는 127.0.0.101). 동일한 를 수신하는 경우 R6는 아래와 같이 Multipath Information(다중 경로 정보)으로 다시 응답합니다.
- IP 대상이 127.0.0.101에서 127.0.0.150 사이인 경우 패킷이 R4로 전송됩니다.
- IP 대상이 127.0.0.151에서 127.0.0.200 사이인 경우 패킷이 R7로 전송됩니다.
8) R1은 가능한 전체 경로를 3으로 만드는 ECMP 경로가 하나 더 있음을 인식합니다. R1은 아래의 세부 사항과 함께 다음 에코 요청을 전송하여 PATH2를 계속 쿼리합니다.
- IP 대상(127.0.0.101)
- 주소 범위를 127.0.0.101에서 127.0.0.150으로 전달하는 다중 경로 정보 TLV
- 상위 레이블의 TTL은 3으로 설정됩니다.
9) R2는 패킷을 R6에 전달하며(대상이 127.0.0.101이므로) R6는 패킷을 R4에 전달합니다(대상이 127.0.0.101이므로). R4에는 ECMP 경로가 없으므로 동일한 Multipath Information(다중 경로 정보)으로 다시 회신합니다. 다음 패킷은 이그레스 R5에 도달합니다.
10) PATH2 추적이 완료되었으므로 R1에서 PATH3에 대한 쿼리를 계속 진행합니다. 이 작업은 아래 세부 정보와 함께 에코 요청을 전송하여 수행됩니다.
- IP 대상(127.0.0.151)
- 주소 범위를 127.0.0.151에서 127.0.0.200으로 전달하는 다중 경로 정보 TLV
- 상위 레이블의 TTL은 3으로 설정됩니다.
11) R2는 패킷을 R6에 전달하며, R7에 전달합니다. R7은 동일한 Multipath Information TLV로 다시 응답합니다. 다음 패킷은 이그레스 라우터 R5에 도달합니다.
이 단계를 완료 한 후, R1은 다음과 같은 세부 사항을 갖습니다.
127.0.0.0 및 127.0.0.100 내의 목적지 주소를 사용하면 패킷 전달이 PATH1에 영향을 미치는 반면, 다른 범위의 주소를 사용하면 각 경로를 통해 패킷을 전달하는 데 영향을 미칩니다.
12) 이제 Initiator는 TTL이 255로 설정된 3개의 에코 요청 패킷을 전송하고 각 범위에서 주소를 선택하여 모든 경로가 엔드 투 엔드로 검증되도록 합니다.
ECMP 추적에 사용할 명령은 traceroute mpls multipath ipv4 <prefix> <mask>입니다. 다음은 샘플 출력입니다.
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
위의 출력에는 3개의 경로가 있으며 모든 경로가 정상적으로 작동하는 것으로 표시됩니다. 위 명령에서 자세한 정보 표시(verbose knob)를 사용하면 다음과 같이 모든 홉이 나열됩니다.
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