一个FEC,只会为同一个路由分配标签.
同一个路由的含义:相同的前缀,相同的掩码.
那么有一个比较典型的情况会破坏这个规则:汇总。
过来的时候是明细,分发出去是汇总.虽然符合路由查找的规律,大网段包含小网段,可是对于FEC来说,是破坏了FEC的模型。
路由汇总在MPLS域内:
在下面这个汇总的图中来说.C是汇总点.
路由汇总,会破坏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链路的先决条件.
从R4到R5是一条路径,可以通过traceroute来进行查看:
从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中.
在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的结果是:
这里可以看到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为分界点.
下面是整个标签准发的整个流程:
最后,再来整理一下标签分发的过程:
1,R4始发该报文:
R4上面,路由表中对于55.1.1.x/24是24位的,因为R2做了area1的汇总,不会有明细32位的路由:
在R4上面,outgoing的标签应该是R1针对55.1.1.0/24分配过来的:
这样,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弹出该标签.
因为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表:
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的标签转发表:
当R3收到标签是302的MPLS报文,会pop掉标签,然后通过Et0/0发送纯IP报文给R5.
最终R5收到了相关IP报文,本地直连路由。单向通讯搞定。
所以最终的测试结果是:
原文链接:http://blog.51cto.com/361531/1699680