最近在看OAM方面的文档,估计会花上一段时间。俗话说好记性不如烂笔头,不如把自己先看过的记录下来已形成一个完整的记录,今天先讲讲MPLS LSP ping。
关于LSP Ping的详细细节可参考K. Kompella和G. swallow的RFC4379(2006)。
MPLS的实现分控制平面与数据平面,BFD for MPLS(draft-ietf-bfd-mpls-07)可用于实现MPLS 数据平面的故障检测,但其不能校验MPLS控制平面和数据平面的一致性,只能校验数据平面的连通性。MPLS ping就是为了检测MPLS LSP数据平面的故障以及MPLS控制平面和数据平面一致性而产生的一种工具,它是对传统IP ICMP/Traceroute的一种扩展,但不是基于IP/ICMP封装,而基于UDP封装。
LSP ping通过两种报文MPLS "echo request" and "echo reply"来实现故障检测。"echo request"报文的目标地址为127/8范围内的随机地址,目标端口为UDP 3503, IP TTL为1, IP options的router alert必须置位。 LSP-ping可实现ping(basic connectivity check)和traceroute(fault isolation)两种功能。 在 "ping"模式下外层标签的MPLS TTL为255。在"traceroute" 模式下外层标签的MPLS TTL会依次被置为1, 2 and so on来一一触发沿途transit LSR的“echo reply”。
对于"echo reply" LSP ping并提供四种机制来实现可靠的OAM reply channels: no reply(mode 1,用于one-way检测),UDP(mode 2),UDP with Router Alert(mode 3),application level control channel(mode 4,比如VCCV)。
LSP ping常用replay模式为mode 2, Juniper设备目前只支持mode 2。注意mode 2的"echo reply" OAM报文不走MPLS label switching而走IP/UDP, 因此要求LSP ingress/Egress路由器之间有IP/UDP通道。
"echo request" 报文的转发路径与被测试FEC的普通MPLS报文转发的数据路径一致, 在"ping"模式下 (basic connectivity check), "echo request"报文会被一直转发到egress LSR才被上送至控制平面,控制平面会检验这是否是期望的egress LSR。而在"traceroute"模式下(fault isolation), "echo request"报文会在沿途每一跳LSR上上送至控制平面,控制平面进行各种校验以确认这是否是该LSP期望的Transit LSR,并返回信息进一步检验控制平面与数据平面的一致性,比如转发路径与信令面生成路径的一致性。
LSP ping目标地址(dst IP)使用127/8地址范围,这是因为LSP ping的"echo request" OAM报文是被label switching的(echo reply不一定),因此"echo request“中包含的IP地址信息与转发决策无关;同时为了防止LSP故障后,LSR路由器把OAM报文当做native IP报文进行转发出现不可预计的结果,MPLS LSP ping使用127/8这段特殊地址,这样当LSP故障后,127/8的地址会被路由器丢弃而不会被当作native IP数据包继续转发(rfc1122规定目标地址为127/8回送地址的报文不能离开主机)。
LSP Ping可以支持各种FEC的故障检测,比如IP prefix (for LDP-based LSPs), RSVP Session object (for RSVP-TE based LSPs), VPN-IPv4 prefix (for LSPs used by 2547 VPNs), pseudo-wire prefix (for pseudo-wire LSPs)等等,其通过“echo request”报文里的sub-type TLV进行区分,常见TLV举例如下:
Sub-Type Length Value Field
-------- ------ -----------
1 5 LDP IPv4 prefix
2 17 LDP IPv6 prefix
3 20 RSVP IPv4 LSP
4 56 RSVP IPv6 LSP
6 13 VPN IPv4 prefix
7 25 VPN IPv6 prefix
8 14 L2 VPN endpoint
10 14 "FEC 128" Pseudowire
11 16+ "FEC 129" Pseudowire
12 5 BGP labeled IPv4 prefix
13 17 BGP labeled IPv6 prefix
14 5 Generic IPv4 prefix
15 17 Generic IPv6 prefix
16 4 Nil FEC
MPLS LSP ping的一种使用场景是进行周期性的LSP ping,当发现数据平面故障时再发起LSP traceroute以确定故障点。另一种使用场景是进行周期性的LSP traceroute检验控制平面与数据平面的一致性,但这会给transit LSR增加负担,不推荐使用。
JUNOS做MPLS LSP Ping的范例如下:
r4@mx240b:r4> ping mpls rsvp r4-r1 !!!!!
--- lsping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
r4@mx240b:r4> ping mpls lsp-end-point 10.0.0.1 !!!!!
--- lsping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
r4@mx240b:r4> traceroute mpls rsvp r4-r2 Probe options: retries 3, exp 7
ttl Label Protocol Address Previous Hop Probe Status
1 299824 RSVP-TE 192.168.0.9 (null) Success
2 1048575 RSVP-TE 192.168.0.5 192.168.0.9 Egress
Path 1 via ge-1/1/9.2034 destination 127.0.0.64
r4@mx240b:r4# run ping mpls l2circuit virtual-circuit 24 neighbor 10.0.0.2 !!!!!
--- lsping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss