一个FEC,只会为同一个路由分配标签.

同一个路由的含义:相同的前缀,相同的掩码.

那么有一个比较典型的情况会破坏这个规则:汇总。

过来的时候是明细,分发出去是汇总.虽然符合路由查找的规律,大网段包含小网段,可是对于FEC来说,是破坏了FEC的模型。

路由汇总在MPLS域内:

在下面这个汇总的图中来说.C是汇总点.

MPLS中LSP是啥 在mpls中,lsp指的是_MPLS中LSP是啥

路由汇总,会破坏MPLS域内不是同一条路由(前缀/掩码绝对相同)

汇总以后,以汇总点为中心,一条FEC会被分割成两端.

在上面的图中,从Router E传回来一个路由. 10.1.1.0/24, 24位的掩码,传到D,最后传到C,这个时候C做一个汇总,汇总成/16位的掩码从C通告给B,B再给A.前提是C只发送汇总路由,抑制明细路由.

这样,这个LSP已经被破坏成了两段.

最终,数据流在MPLS域中转发,由一条LSP变成了两条LSP.以router C为分界点.

非链路聚合,一条完整FEC路径的情况:

下面这个拓扑图,R4 有一个环回口.44.1.1.1/32

R5也有一个环回口:55.1.1.1/32

期间,R4,R1,R2,R3,R5,所有设备对该两条路由的认识都是一样的(掩码相同,前缀相同)

这样才能形成一个完成FEC链路的先决条件.

MPLS中LSP是啥 在mpls中,lsp指的是_R3_02

从R4到R5是一条路径,可以通过traceroute来进行查看:

MPLS中LSP是啥 在mpls中,lsp指的是_R3_03

从traceroute的结果来说,对于R4上面的55.1.1.1,R1分配的标签是102.

R2为55.1.1.1分配的标签是202.

R3为55.1.1.1分配的标签是302.

R5上面,因为55.1.1.1/32是直连,分配的标签是implict-null(3), 一个空标签.

所以traceroute的路径是:

label: 102-->202-->302-->(3)implict-null

这里整条路径是一条路径.没有做链路聚合.

链路聚合,一条不完整FEC路径的情况:

下面这个拓扑图,R4 有一个环回口.44.1.1.1/32

R5也有一个环回口:55.1.1.1/32

现在,R1,2,3,4,5,中间我们做一个路由聚合,让大家5台设备对这个前缀的认识不统一,看看会有什么样的情况发生.

最终选定R2做一个路由汇总.把/32位的路由汇总成/24位.

OSPF在同一个区域是不能做汇总的,所以环境需要稍微改造一下,R2--R3--R5属于区域1中.

MPLS中LSP是啥 在mpls中,lsp指的是_MPLS中LSP是啥_04

在R2上面的ospf进程中,对area1进行一个55.1.1.1/32--->55.1.1.0/24的路由汇总.

最终通告给R1和R4,意思是R1和R4上面学习到的路由针对于55.1.1.0/24是24位的掩码,而不是32位的。

最终,R4 traceroute 55.1.1.1的结果是:

MPLS中LSP是啥 在mpls中,lsp指的是_MPLS中LSP是啥_05

这里可以看到R4的数据包到了R1,R1对55.1.1.0/24分配的标签是100.

当数据包到了R1以后,R2因为55.1.1.0/24是直连,所以分配的是空标签给R1.R1将100标签移除.将IP报文送给R2.

R2拿到这个IP报文,经过查询,目的是55.1.1.1,他上面有55.1.1.1/32的路由,R3会为这个前缀分配一个标签30x给R2.

这个时候R2再将这个IP报文压入标签30x,然后进入MPLS转发流程.

R2压入30x的标签进入该报文,送到R3,因为R5上面55.1.1.1/32是直连路由,R5会分配空标签(3)给该前缀,并且将(3)分发给R3.

所以该MPLS包送到R3的时候,R3会移除之前的30x,然后剥离标签,直接发送IP报文给R5.

所以本身一段完整的LSP,最后被分割成了两断。

以R2为分界点.

下面是整个标签准发的整个流程:

MPLS中LSP是啥 在mpls中,lsp指的是_IP_06

最后,再来整理一下标签分发的过程:

1,R4始发该报文:

R4上面,路由表中对于55.1.1.x/24是24位的,因为R2做了area1的汇总,不会有明细32位的路由:

MPLS中LSP是啥 在mpls中,lsp指的是_空标签_07

在R4上面,outgoing的标签应该是R1针对55.1.1.0/24分配过来的:

MPLS中LSP是啥 在mpls中,lsp指的是_空标签_08

这样,IP包进入R4,然后R4 PUSH进一个100的标签.将该MPLS报文转发给R1.

2, R1转发MPLS报文.

R1上面对于55.1.1.0/24的路由前缀,是由R2分配的标签.

因为55.1.1.0/24是由R2产生的,也可以认为是R2的直连路由,所以R2会分配一个空标签给R1.

R1现在收到标签为100的MPLS报文,会做的动作是pop弹出该标签.

MPLS中LSP是啥 在mpls中,lsp指的是_R3_09

因为R1为55.1.1.0/24分配的是一个(3),隐式空标签.

所以R1收到了相关的100标签的报文,直接弹出,然后通过接口eth0/0发送给R2.

==============至此,第一个LSP已经完毕了===========================

==============下面是第二条LSP====================================

3, R2收到IP报文,继续PUSH然后转发MPLS报文给R3.

R2这个时候收到一个报文,目的地址是55.1.1.1.

IP进,MPLS出,应该查询cef表:

MPLS中LSP是啥 在mpls中,lsp指的是_MPLS中LSP是啥_10

R3为55.1.1.1/32路由前缀分配的标签是302.R2会将302作为出口PUSH进入那个IP包.然后通过e1/0转发给R3.

4, R3收到MPLS报文,pop掉标签,纯IP转发给R5.

因为55.1.1.1/32是R5的直连路由,所以R5会分配空标签(3)给LDP邻居R3.

MPLS进,mpls出,查看R3的标签转发表:

MPLS中LSP是啥 在mpls中,lsp指的是_空标签_11

当R3收到标签是302的MPLS报文,会pop掉标签,然后通过Et0/0发送纯IP报文给R5.

最终R5收到了相关IP报文,本地直连路由。单向通讯搞定。

所以最终的测试结果是:

MPLS中LSP是啥 在mpls中,lsp指的是_MPLS中LSP是啥_12

原文链接:http://blog.51cto.com/361531/1699680