Label一般是由运营商端的Router添加。
去往相同网段的数据包打相同的标签
基于每个数据包的负载均衡
基于目的地的负载均衡
启用CEF无非做两件事:1.把路由表中条目进行优化,加入FIB;2.把ARP表项以及帧中继映射进行优化,内容加入Adjacency Table。
启用CEF生成一张FIB(Forwarding Information Base)表(经过优化的,解决了递归路由),FIB表是基于拓扑的
LIB(Label Information Base)用来存放TDP/LDP邻居给我分发的他们的标签以及保存本地基于路由条目所产生本地标签。
LFIB:真正用来转发带标签的报文的表
路由器分发标签永远是基于FIB表项(启用MPLS的前提是启用CEF)
在一台路由器上,不能为不同的路由条目分发相同的标签,每条路由条目对应一个本地唯一的标签。例外是0-15标签,如果给路由条目分发的标签取值范围在0-15之间,此时多条路由可以对应相同的被保留标签。
对于一条路由条目,如果该路由器路由表中该路由条目的出站接口是一个没有启用MPLS的接口,则该路由器就是最后一跳路由器,或者该路由条目对应的下一跳邻居不是本地的TDP/LDP邻居时该路由器同样为最后一跳路由器,只要一台路由器收到了关于一条路由条目的标签是3,则该路由器就会判断自己就是倒数第二跳路由器。
FEC:转发等价类。一个路由条目对应一个FEC,对应一个标签。
LDP/TDP:为FIB表中路由条目分发标签,把我本地的标签通告给我的邻居,并且形成LIB和LFIB。
CEF:运行MPLS的必要因素,先运行CEF才能运行MPLS,同时会形成两张表 FIB和Adj Table,其中FIB可以用来实现标 签的插入。
VRF Virtual Routing Forwarding.一个VRF就是一个MPLS VPN中的实力例(进程)。
一台PE为一个公司提供MPLS VPN就要为该公司定义一个本地唯一的VRF进程。
PE创建了VRF之后,一定要将其和某个连接CE接口关联。
RD(区分多家公司相同的路由前缀):当PE把私网路由在运营商内传递的时候能够区分相同的路由,做一个域内传递的区分。
RT:Route Targets 该路由条目会被哪个进程所接收。
MPBGP用来路由VPNv4路由 VPNv4路由条目举例:RD:目标网路/掩码
数据层面双标签机制:
里层标签:告知我的远端PE端收到报文之后查找哪张VRF表
外层标签:在mpls域传递的时候能杜绝数据层面的路由黑洞
在控制层面收到一条VPNv4路由,这个路由的入站接口没有和任何的VRF关联,这个时候该路由加入哪张表取决于RT。
在数据层面通过一个接口收到数据包,这个接口没有和任何VRF关联,这个时候我查哪张表,取决于里层标签。
VRF用来区分不同的路由表
RD用在传递路由时区分相同的路由条目(比如两条1.1.1.0/24)
RT用来标示应该把该路由加入哪个VRF
用RT来区分相同的路由条目就好了,为什么还要引入RD?
因为一条VPNV4路由只能添加一个RD值,但是可以添加若干RT值。
因为从不同VRF学到的相同的路由可以打相同的RT(负载均衡),所以才引入RD做本地路由区分,如果RD也和路由一样相同了就变成了两个相同的包。
用OSPF作为IGP,MPLS不能正常工作原因:
因为OSPF宣告环回口默认为32位,本地环回口路由又为24位,所以本地路由器不会为/32位路由条目分配标签(本地只为/24位分配标签),所以邻居路由器想到达该环回口只能untaged去掉标签采用普通方式与该环回口通信。
MPLS VPN会打两层标签,第一层是ldp根据路由前缀打的,第二层是BGP根据VPNv4路由前缀打的。
为什么LDP协议既能支持TCP又能支持UDP?
建立邻居使用UDP,传递标签使用TCP