MPLS对LSP连通性的检测
一、MPLS对TTL的处理模式
MPLS标签中包含一个8比特的TTL字段,其含义与 IP报头中的TTL字段相同,用于限制报文在传输过程中所经过的三层设 备数(每经过一跳值减1)。MPLS对TTL的处理与IP网络中对TTL的处 理一样,除了用于防止产生路由环路外,也用于实现Traceroute(路由 跟踪)功能。
RFC3443中定义了两种MPLS对TTL的处理模式:Uniform(统一) 和Pipe(管道)。缺省情况下,MPLS对TTL的处理模式为Uniform。
1、Uniform模式
在Uniform模式下,针对IP报头中的TTL字段,最终在离开MPLS域 时其值仍是减少了MPLS中所经过的跳数,只是在MPLS域内传输时,IP 报头TTL字段的改变移植到了MPLS标签中的TTL字段,然后在离开 MPLS域时再反向移植到IP报头的TTL字段。
具体来说,IP报文经过MPLS网络时,在入节点,IP报头的TTL值减 1映射到MPLS标签TTL字段,此后报文在MPLS网络中按照标准的TTL处 理方式处理,即逐跳减1,但IP报头中的TTL字段值在MPLS域中不改 变。在出节点将MPLS标签的TTL减1后的值再映射到IP报头的TTL字 段。最终的结果是,在IP报头的TTL字段值还是在逐跳减1,即把MPLS 网络中的每跳设备当作IP网络中的单跳来处理。
下面以图1-18所示的示例进行介绍。
图1-18 Uniform模式TTL处理示例
- IP报文由CE1设备发出时,IP报头中的TTL字段值为最大的 255。
- 到了PE1设备时,IP报头中的TTL字段值减1,变成了254,然 后把这个值映射到生成的MPLS标签TTL字段中,即254。
- MPLS报文传输到中间设备P后,MPLS标签TTL字段按标准TTL 方式处理,即再减1,变成了253,但此时IP报头中的TTL字段值仍为 254,保持不变。
- MPLS 报文继续传输到 PE2 设备时,MPLS 标签要弹出了,此 时会先把 MPLS标签中的TTL字段再减1,得到252,映射到IP报头中的 TTL字段,使得到达PE2设备时IP报文的TTL字段值为252。
- 从CE1到PE2,总的来说经过了三跳设备,如果没有经过MPLS封 装,IP报头中的TTL字段值也要减3,即255-3=252,这与经过MPLS网 络传输的结果是相同的,所以称之为Uniform(统一)模式。
2、Pipe模式
在Pipe模式中,IP报头中的TTL字段会把所经过的MPLS网络的中间 节点忽略,将其看作两端边缘节点通过一个管道的直连(这也是称之 为“Pipe”模式的原因),也就是无论在MPLS网络中经过了多少三层设 备,从MPLS入节点到出节点之间,IP报头中的TTL字段值只减1。
具体来说,IP报文进入到MPLS网络的入节点后,IP报头的TTL值减 1,MPLS标签中的TTL字段为一个固定值(这点与Uniform模式不同 ),此后报文在MPLS网络中传输,MPLS标签TTL字段值按照标准的 TTL处理方式处理,即每经过一跳减1,但IP报头的TTL值保持不变(这 点与Uniform模式相同 )。在出节点会直接弹出MPLS标签,然后将IP 报头TTL字段的值减1(这点与Uniform模式也不同 )。即IP报文在经 过MPLS网络时,无论中间经过了多少跳,IP报头的TTL值只在入节点 和出节点分别减1,中间传输过程中保持不变,即相当于把MPLS网络 中间节点忽略。
图1-19是一个采用 Pipe模式的TTL处理示例。在MPLS VPN应用 中,出于网络安全的考虑,需要隐藏 MPLS 骨干网络的结构,这种情况下,对于私网报文采用 Pipe模式。因为这种模式下,MPLS骨干网中 间节点是看不出来的。
图1-19 Pipe模式下TTL处理示例
二、ICMP响应报文
在MPLS网络中,当LSR收到TTL为1(表示不能再向下传了)的含 有标签的MPLS报文时,会生成一个ICMP的TTL超时消息。LSR将TTL超 时消息回应给报文发送者的方式有两种。
如果LSR上存在到达报文发送者的路由,则可以通过IP路由,直接 向发送者回应TTL超时消息。
如果LSR上不存在到达报文发送者的路由,则ICMP响应报文将按 照LSP继续传送,到达LSP出节点后,由Egress节点将该消息返回给发 送者。
通常情况下,当收到的MPLS报文只带一层标签时,LSR可以采用 第一种方式回应TTL超时消息,因为此时表明LSR是MPLS域的边缘节点LER,可直接通过IP路由传输响应报文。当收到的MPLS报文包含多层 标签时,LSR采用第二种方式回应TTL超时消息。但是,在MPLS VPN 中,ASBR(Autonomous System Boundary Router,自治系统边界路 由器)和HoVPN(Hierarchy of VPN,分层VPN)组网应用中的SPE (Superstratum PE or Sevice Provider-end PE,上层PE或运营商侧 PE)接收到的承载VPN报文的MPLS报文也可能只有一层标签,此时, 这些设备上并不存在到达报文发送者的路由,则采用第二种方法回应 TTL超时消息。
三、LSP连通性检测
在MPLS网络中,如果通过LSP转发数据失败,采用传统IP网络中 的Ping或Tracert操作,负责建立LSP的MPLS控制平面将无法检测到这 种错误,因为ICMP报文是基于IP路由转发的。此时,就要利用RFC 4379定义的MPLS Ping/MPLS Tracert功能来发现LSP错误,并及时定位 失效节点。MPLS Ping主要用于检查LSP的连通性,MPLS Tracert在检 查 LSP 的连通性的同时,还可以分析网络什么地方发生了故障,类似 于普通 IP 网络中的Ping/Tracert。
四、MPLS Ping/MPLS Tracert
MPLS Ping/MPLS Tracert使用MPLS回显请求(Echo Request)报 文和MPLS回显应答(Echo Reply)报文检测LSP的可用性,这也与IP网 络中Ping/Tracert所使用的回显请求和回显应答报文的工作机制类似。 但很显然,MPLS回显请求(Echo Request)报文和MPLS回显应答只有在使能了MPLS功能的设备才能被识别,因为这两种消息中都带有MPLS 标签。
在MPLS Ping的Echo Request/Echo Reply报文中最外层MPLS出标 签中的TTL字段为255,而MPLS Tracert Echo Request/Echo Reply报文 最外层MPLS出标签中的TTL字段值每次测试的赋值不同,依次是1、 2、3……这两种消息都以UDP报文格式发送, Echo Request报文的目 的UDP端口号为3503,接收端通过UDP端口号识别出MPLS Echo Request报文,并发出MPLS Echo Reply报文进行和响应。
MPLS Ping/MPLS Tracert Echo Request报文中携带需要检测的FEC 信息(在请求报文中的“目的FEC”字段中标识),和其他属于此FEC的 报文一样沿LSP发送,从而实现对LSP的检测。Echo Request报文以 MPLS网络以标签为导向转发给目的端,而Echo Reply报文则以IP网络 中的IP路由为导向转发给源端。另外为了防止LSP断路时,Echo Request进行IP转发,保证LSP的连通性测试,将Echo Request消息IP 头中目的地址设置为127.0.0.1/8(本机环回地址,供CPU识别,被上送 的报文需要由CPU自己处理), IP报头中的TTL值为1。
说明:
在MPLS Ping Echo Request报文中,通常会将一个特殊的标签,比 如Router Alert Label(值为1,参见表1-1),置于用于转发的MPLS出 标签后面(即Router Alert Label作为内层标签),当报文到达目的地 之后,目的LSR看到Router Alert Label后会把该报文送到CPU处理。 CPU检查到报文中IP报头部分的目的IP地址是127.0.0.1,就会对其进行 处理。
1、MPLS Ping工作原理
如图1-20所示,LSR_1上建立了一条目的地为LSR_4环回接口所在 网段的LSP。从LSR_1对LSR_4进行MPLS ping时的处理流程如下。
图1-20 MPLS ping测试示例
- 执行MPLS ping命令后,LSR_1首先会依据所ping的目的IP地 址4.4.4.4/32在FIB中查看有没有对应的TunnleID,由此判断该网段的 LSP是否存在(对于TE隧道,查找Tunnel接口是否存在且CR-LSP是否建 立成功)。如果不存在,返回错误信息,停止ping操作;如果存在, 则继续进行以下步骤。
- 在 LSR_1 上构造 MPLS Echo Request 报文,其中 IP 报头中 的目的地址为127.0.0.1/8,IP报头中的TTL值为1(用于阻断Echo Request报文采用IP路由方式进行转发 ),同时将4.4.4.4填入Echo Request报文中的“目的FEC”字段中,然后根据对应的NHLFE查找相应 的LSP的出标签,在MPLS Echo Request报文压入该出标签(内层中携 带值为1的Router Alter Lable标签),将报文发送给LSR_2。
- 正常情况下,中间节点LSR_2和LSR_3对MPLS Echo Request 报文会根据MPLS Echo Request报文中交换后的出标签进行普通的 MPLS转发。如果中间节点MPLS转发失败,则中间节点返回带有错误码 的MPLS Echo Reply报文,而这个回显应答报文不再通过MPLS标签转 发,而是通过IP路由进行转发。
- 当MPLS转发路径无故障时,则会把MPLS Echo Request报文 送达LSP的出节点LSR_4,然后检查目的FEC中包含的目的地址4.4.4.4是否为自己的Loopback接口地址,以此确定LSR_4是该FEC的真正出口 后 , 上 送 到 CPU 。 CPU 看 到 该 报 文 的 IP 报 头 中 的 目 的 IP 地 址 为 127.0.0.1,则认为此请求报文需要由CPU自己处理,于是产生一个 MPLS Echo Reply报文进行响应(同样采取IP路由方式转发)。至此整 个MPLS ping过程结束。
2、MPLS Tracert工作原理
同样以图1-20为例进行,从LSR_1对4.4.4.4/32进行MPLS Tracert 时的处理如下。
- 执行MPLS Tracert命令与执行MPLS ping命令一样,LSR_1首 先也会检查目的网段4.4.4.4/32的对应LSP是否存在(对于TE隧道,查 找Tunnel接口是否存在且CR-LSP是否建立成功)。如果不存在,返回 错误信息,停止Tracert,否则继续进行如下处理。
- LSR_1构造MPLS Echo Request报文,IP报头中的目的地址 为127.0.0.1/8,同时将4.4.4.4填入MPLS Echo Request报文中的目的 FEC中,然后从NHLFE中查找对应的 LSP,压入相应的 LSP 出标签,并 且将 MPLS TTL 字段值设置为 1,将报文发送给LSR_2。此MPLS Echo Request报文中包含Downstream Mapping TLV(用来携带LSP在当前节 点的下游信息,主要包括下一跳地址、出标签等)。
- 这里首先将MPLS Echo Request报文中的MPLS TTL 字段值设置为1的目的其实与在IP网络中执行Tracert命令时进行第一跳 测试时将TTL值设为1一样,就是用来进行第一跳的测试。第一跳测试 成功后再进行第二跳、第三跳……的测试,直到到达目的端对应的 MPLS Echo Request报文中的MPLS TTL字段值分别为2、3……
- LSR_2收到LSR_1发送来的MPLS Echo Request报文后,将报 文中的MPLS TTL减1为0后发现TTL超时,然后LSR_2需要检查是否存在该LSP,同时检查报文中Downstream Mapping TLV的下一跳IP地址、 出标签是否正确。如果两项检查都正确,返回正确的MPLS Echo Reply 报文(以IP路由方式转发),并且报文中必须携带LSR_2本身包含的下 一跳和出标签的Downstream Mapping TLV给LSR_1(这个很重要,也 是必须的,这是后面进行继续下一跳测试的依据 )。如果检查不正 确,则返回错误的MPLS Echo Reply报文(也以IP路由方式转发)。
- LSR_1收到正确的MPLS Echo Reply报文后再次发送MPLS Echo Request报文,报文的封装方式跟步骤(2)类似,只是将标签的 MPLS TTL设置为2,此时, MPLS Echo Request报文中的Downstream Mapping TLV是从MPLS Echo Reply报文中复制过来的。然后LSR_2收 到该报文后按出标签普通MPLS转发。LSR_3收到此报文,标签的TTL超 时,用与步骤(3)同样的处理后返回MPLS Echo Reply报文。
- LSR_1收到正确的MPLS Echo Reply报文后重复步骤(4), 把标签的MPLS TTL设置为3,复制Downstream Mapping TLV后发送 MPLS Echo Request报文。LSR_2和LSR_3对该报文进行普通MPLS转 发。LSR_4收到此报文,重复步骤(3)处理方式对报文进行处理,同 时检查目的FEC中包含的目的IP 4.4.4.4为自己的Loopback接口地址, 以此来发现已经是该LSP的出节点,于是上送到CPU,在上送的请求报 文中发现IP报头中的目的IP地址为127.0.0.1,因为需要要由CPU自己处 理,生成一个不带下游信息的MPLS Echo Reply报文进行响应,至此整 个MPLS Tracert过程结束。
通过上述步骤返回携带下游信息的MPLS Echo Reply报文,在 LSR_1上就获取了该LSP沿途每一个节点的信息。
以上就是本章的全部内容,如果本文章给你的学习带来了帮助麻烦点个赞加收藏,文章若有错误或疑问可联系博主删除更改,感谢大家的浏览观看!