47.2.1 帧模式MPLS转发
前面简要介绍了MPLS的传播过程,这里我们来详细介绍MPLS的转发机制,在MPLS的转发机制中,通
常分为帧模式和信元模式。帧模式工作流程如下:
首先,当San Jose路由器收到IP分组以后,将会根据其目的地址,对IP转发表FIB进行3层查找。由于Cisco
的CEF是唯一使用FIB表的第3层交换机制,所以必须在运行MPLS的所有路由器上启用CEF,而所有接收非标
签分组,并将其以标签分组的方式通过MPLS主干传播的入口接口,都必须支持CEF交换。核心路由器不执
行CEF交换—他们只交换标签分组---但为分配标签,他们仍然以全局方式启用CEF。通过如下命令可以查看
FIB的信息:
SanJose#show ip cef 192.168.2.0
192.168.2.0/24, version 11, cached adjacency to Serial1/0/1
0 packets, 0 bytes
tag information set
local tag: 29
fast tag rewrite with Se1/0/1, point2point, tags imposed: {30}
via 172.16.1.4, Serial1/0/1, 0 dependencies
next hop 172.16.1.4, Serial1/0/1
valid cached adjacency
tag rewrite with Se1/0/1, point2point, tags imposed: {30}
标签的转发通常使用特定的标签转发表.查看方式如下:
SanFrancisco#show tag forwarding-table tags 30 detail
Local Outgoing Prefix Bytes tag Outgoing Next Hop
tag tag or VC or Tunnel Id switched interface
30 28 192.168.2.0/24 0 Se0/0/1 172.16.3.1
MAC/Encaps=14/18, MTU=1504, Tag Stack{28}
00107BB59E2000107BEC6B008847 0001C000
Per-packet load-sharing
NewYork#show tag forwarding-table tags 37 detail
Local Outgoing Prefix Bytes tag Outgoing Next Hop
tag tag or VC or Tunnel Id switched interface
37 untagged 192.168.2.0/24 0 Se2/1/3 192.168.2.1
MAC/Encaps=0/0, MTU=1504, Tag Stack{}
Per-packet load-sharing
MPLS标签使用栈结构,也就是一个分组可以包含多个标签,并利用BoS位标识栈底。
在帧模式MPLS中,运行Cisco IOS软件并作为MPLS LSR的Cisco路由器可以对分组标签执行大量的操作:
弹出标记(Pop tag):
删除MPLS标签栈顶的标签,将余下的有小负载作为一个标签分组进行传递。
聚集(Aggregate):
删除MPLS标签栈顶的标签,并对低层的IP分组执行3层查找。被删除的标签是栈底标签,如
果不是则丢弃报文。
标签栈进行MPLS交换的工作原理如下: 在网络中通过某些功能使得边缘路由器就分组规则达成一致,
而不需要了解核心网络情况时可以启用这种转发方式。首先NewYork路由器分配标签为73,并且和SanJose
达成一致,数据在核心传送前就带有了双标签,但两个POP的用户通过73标签的封装,并不了解骨干网的
一些情况,如下图所示
标签具体的分配流程采用TDP或者LDP协议。由MPLS的发展史可以看到,TDP是LDP的前身,为Cisco
专有协议,并且在IOS 11.1CT以及12.0中实现。而LDP为TDP在IETF标准化后的产物,IOS 12.2T以后的版本包
含此协议。功能上而言,两者是等价的俄,可以同时用于网络中,甚至可以在同一个LSR的不同接口启用
不同的标签分发协议。关于它们,我们将在稍后的章节介绍。
最后我们注意,在MPLS帧模式中,有一种特殊的机制为倒数第二跳弹出(Penultimate Hop Popping).
对于一个从MPLS邻居收到的目的地为MPLS域外的一个子网分组而言, MPLS网络中的出口边缘LSR可能必须
对它进行两次查找操作,该LSR必须检查标签栈头中的标签。并执行标签查找工作,就像认识到必须弹出
标签并检查并检查底层IP分组一样,必须对IP分组执行3层查找,然后再转发。
例如上图的NewYork POP路由器,在双重栈的查找下,使得性能下降剧烈。所以为了解决这个问题,
提出了PHP机制,如下图所示:
倒数第二跳弹出机制只用于直接连接的子网或者聚合路由。对于直接相连的接口,需要执行3层查找,
以便获得被发送到直接相连的目的地分组的小一条信息。如果前缀是一个聚合,也必须执行3层查找,以
获得具体的路由,然后使用它将分组路由给正确的出口。
使用倒数第二跳弹出机制后,edge-LSR可以请求上游邻居弹出标签,如上页图中的New York路由器。
邻居通告采用特殊的隐式无效(imp-null)LDP、TDP标签值告知。
NewYork#show tag tdp binding 192.168.2.0 24
tib entry: 192.168.2.0/24, rev 10
local binding: tag: imp-null(1)
remote binding: tsr: 172.16.3.1:0, tag: 28
Washington#show tag tdp binding 192.168.2.0 24
tib entry: 192.168.2.0/24, rev 10
local binding: tag: 28
remote binding: tsr: 172.16.3.2:0, tag: imp-null(1)
remote binding: tsr: 172.16.1.4:0, tag: 30
remote binding: tsr: 172.16.2.1:0, tag: 37
47.2.2 帧模式MPLS和BGP交互
我们知道在传统的以BGP链接的骨干网中,通常每个路由器都要运行BGP路由协议,特别是在核心网中,
IBGP是全互联的,如下图所示:
在如上配置的情况下,查看7200a的路由表和转发表如下:
7200a#show ip route
Codes: C - connected, S - static, I - IGRP, R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2, E - EGP
i - IS-IS, L1 - IS-IS level-1, L2 - IS-IS level-2, ia - IS-IS inter area
* - candidate default, U - per-user static route, o - ODR
Gateway of last resort is 7.1.5.1 to network 0.0.0.0
B 171.68.0.0/16 [200/0] via 12.12.12.12, 01:10:44
3.0.0.0/32 is subnetted, 1 subnets
7200a#show ip cef 171.68.0.0
171.68.0.0/16, version 69, cached adjacency to POS3/0
0 packets, 0 bytes, wccp tag 139
via 12.12.12.12, 0 dependencies, recursive
next hop 10.0.3.5, POS3/0 via 12.12.12.12/32
valid cached adjacency
这种结构由于核心路由器要运行BGP,配置比较复杂,出现故障恢复也比较麻烦,和核心层尽量简单
的设计模式有些冲突,在MPLS核心网络中,核心路由器不运行BGP,同时,iBGP链接仅在各POP之间运行,
如下图所示:
查看7200a的FIB信息如下:
7200a#show ip cef 171.68.0.0 detail
171.68.0.0/16, version 1934, cached adjacency to POS3/0
0 packets, 0 bytes
tag information from 12.12.12.12/32, shared
local tag: 36
fast tag rewrite with PO3/0, point2point, tags imposed {12323}
via 12.12.12.12, 0 dependencies, recursive
next hop 10.0.3.5, POS3/0 via 12.12.12.12/32
valid cached adjacency
tag rewrite with PO3/0, point2point, tags imposed {12323}
在12008a上查询LFIB表如下:
12008a#show mpls forwarding
Local Outgoing Prefix Bytes tag Outgoing Next Hop
tag tag or VC or Tunnel Id switched interface
12318 Pop tag 10.0.57.0/24 0 PO1/0 point2point
1/43 10.0.57.0/24 0 AT3/0.1 point2point
12319 12320 10.0.86.0/24 0 PO1/0 point2point
1/44 10.0.86.0/24 0 AT3/0.1 point2point
12320 12321 10.1.1.1/32 0 PO1/0 point2point
1/45 10.1.1.1/32 0 AT3/0.1 point2point
12321 12322 10.1.1.2/32 0 PO1/0 point2point
1/46 10.1.1.2/32 0 AT3/0.1 point2point
12322 12326 16.16.16.16/32 0 PO1/0 point2point
1/51 16.16.16.16/32 0 AT3/0.1 point2point
12323 12324 12.12.12.12/32 575 PO1/0 point2point
1/49 12.12.12.12/32 0 AT3/0.1 point2point
12324 12325 13.13.13.13/32 0 PO1/0 point2point
1/50 13.13.13.13/32 0 AT3/0.1 point2point
12325 12327 17.17.17.17/32 144 PO1/0 point2point
12008a#show ip cef 12.12.12.12 internal
12.12.12.12/32, version 385, per-destination sharing
0 packets, 0 bytes
tag information set, shared
local tag: 12323
via 10.0.5.11, POS1/0, 0 dependencies
traffic share 1
next hop 10.0.5.11, POS1/0
unresolved
valid adjacency
tag rewrite with PO1/0, point2point, tags imposed {12324}
via 10.0.4.11, ATM3/0.1, 1 dependency
traffic share 1
next hop 10.0.4.11, ATM3/0.1
unresolved
valid adjacency
tag rewrite with AT3/0.1, point2point, tags imposed {1/49(vcd=65)}
0 packets, 0 bytes switched through the prefix
tmstats: external 0 packets, 0 bytes
internal 0 packets, 0 bytes
Load distribution: 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 (refcount 2)
Hash OK Interface Address Packets Tags imposed
1 Y POS1/0 point2point 0 {12324}
2 Y ATM3/0.1 point2point 0 {1/49}
3 Y POS1/0 point2point 0 {12324}
4 Y ATM3/0.1 point2point 0 {1/49}
5 Y POS1/0 point2point 0 {12324}
6 Y ATM3/0.1 point2point 0 {1/49}
7 Y POS1/0 point2point 0 {12324}
8 Y ATM3/0.1 point2point 0 {1/49}
9 Y POS1/0 point2point 0 {12324}
10 Y ATM3/0.1 point2point 0 {1/49}
11 Y POS1/0 point2point 0 {12324}
12 Y ATM3/0.1 point2point 0 {1/49}
13 Y POS1/0 point2point 0 {12324}
14 Y ATM3/0.1 point2point 0 {1/49}
15 Y POS1/0 point2point 0 {12324}
16 Y ATM3/0.1 point2point 0 {1/49}
refcount 5
具体的转发规则如下图所示:
根据MPLS的转发原理,不同的地址和网络边界可以查询不同的转发表,图下所示:
47.2.3 信元模式MPLS
在信元模式MPLS中,存在一些局限:
ATM头没有字段承载TTL
不支持倒数第二跳弹出(PHP)
不支持ATM LSR的路由聚合
由于ATM头无法携带TTL,则在ATM中传输的环路问题难以避免,解决这个问题可以通过2方面解决:
1. LDP在LSP的LDP信令交互中使用路由跳计数TLV.因为ATM LSR不能每一跳都减少TTL,所以在心
愿出口,路由器要把TTL减掉信元网络中的跳数.
2. LDP的路径向量TLV保存了在信元网络中LSP经过的所有路由跳的列表信息.路径向量用来在
控制平面进行环路检测,当向量中发现某个LSP出现2次后,则认为是环路.
注意: 在帧模式网络中不使用LDP路径向量和跳计数TLV.
另一个问题需要解释的是ATM不支持PHP,我们知道,在传统的帧模式转发过程中,在倒数第二跳弹出标
签后,IP报文依旧可以传输到最后一跳路由器.而ATM的标签为VPI/VCI值,所以倒数第二跳弹出了以后,数据将
会面临无处可发的状态.同时虽然ATM LSR在控制平面运行路由协议,但路由不能进行汇总,因为这样将会导
致心愿的重组和再次分割,处理消耗过大,并且这样而言,ATM交换机成了一个路由器了.
在处理ATM的MPLS交换中,要求ATM eLSR控制层面具有纯粹的IP连接性.并且可以通过VC 0/32实现管
理信息的传递和互通 .在ATM LSR的控制层面,采用的是午夜行船(Ship-in-the-night)的模式, 即在VC交换层
面上方使用不同的控制层面,
信元模式MPLS转发流程如下, 采用逐渐的向下游发送转发标签请求,下游依次回复标签,完成LVC的建
立.
在ATM网络中,VC的使用相对紧张,所以对于每个FEC定义一个VC的做法会导致VC的耗尽从而影响转发
性能.当合并VC的时候,会遇到如下的问题.
在实现VC聚合的时候,采用了一个简单的方法,在ATM-LSR交换机上,对信元按照入端VC排序.
0 1/30
0 1/30
0 1/30
output
Interface&VC
0 1/30
0 1/30
0 1/30
output
Interface&VC
47.2.4 MPLS TTL
我们已经熟悉在IP网络中的TTL机制,每经过一个路由器TTL值减一,当TTL等于零的时候,丢弃报文并发
送不可达的ICMP消息.并用于防止在路由环路的时候,报文在环路中反复传输.
在MPLS网络中,MPLS标签同样含有该字段,它采用类似的机制来防止IP报文在MPLS云中反复传递.当一
个IP分组要进入MPLS云的时候,在IngressLSR方,拷贝IP报文中的TTL字段,然后逐跳减一(IP段中的TTL不变),而
在Egress站中,将其复制到IP-TTL中,如下图所示:
转载于:https://blog.51cto.com/yuxin/369722