本节书摘来自异步社区《MPLS在Cisco IOS上的配置》一书中的第1章,第1.5节,作者 【美】Lancy Lobo, CCIE #4690 , Umesh Lakshman,更多章节内容可以访问云栖社区“异步社区”公众号查看
1.5 MPLS操作
MPLS在Cisco IOS上的配置
LSR利用MPLS实现数据转发需要完成以下4个步骤。
1.每个LSR执行标签分配。
2.LSR之间建立LDP或TDP会话。
3.使用某种标签分发协议实现分发标签。
4.标签保留。
在典型的MPLS操作过程中,LSR首先为网络前缀分配本地标签;然后,相邻LSR之间建立LDP会话;最后,LSR使用LDP会话交换标签和网络前缀的映射关系。此时,LSR分别为IP转发表、标签表和标签转发表生成了信息,已经可以基于这些信息转发数据。
1.5.1 MPLS标签分配
标签分配指LSR为网络前缀分配标签,分为静态标签和动态标签。静态标签是通过手工配置LSR的方式,为网络前缀指定固定的标签值;而动态标签是通过协议为目标网络分配动态的标签值。显而易见,动态标签可以大大减少配置路由器的命令行数量。多种协议都可以分配动态标签,例如LDP、MP-BGP(详见第3章)和RSVP-TE(详见第9章)。LDP可以为所有直连路由、静态路由和IGP路由分配标签;MP-BGP可以为BGP路由分配标签;而RSVP-TE为MPLS TE隧道的端点分配标签。标签通常在路由器内部全局有效,但有时只在接口下有效。
1.5.2 建立LDP会话
如果相邻LSR的互联接口都支持MPLS转发,那么相邻LSR需要将本地标签和网络前缀的映射通告给对方。可以通告标签映射信息的协议可以是LDP(Label Distribution Protocol)或TDP(Tag Distribution Protocol)。TDP的应用已经越来越少,路由器默认使用LDP。如果需要切换成TDP,或者默认协议不是LDP,那么命令mpls label protocol {ldp | tdp}可以指定协议。该命令可以配置在全局模式下,也可以配置在接口下,并且接口下的配置可以覆盖全局配置。
TDP和LDP的功能相同,但是无法兼容。请读者注意,不同IOS版本的Cisco路由器可能选择LDP或TDP作为默认协议;当使用不同厂商的设备部署MPLS网络时,更应注意LDP或TDP的选择问题。TDP工作在TCP 711端口,而LDP工作在TCP 646端口。LSR可以在接口下同时运行LDP和TDP,这样不论对端LSR使用哪种协议,都可以完成标签分发的功能。RFC 3036定义了LDP,相邻LDP对端之间可以建立LDP会话,类似于相邻OSPF对端可以建立OSPF会话,称为直连的LDP会话;在某些情况下,远端LDP对端也可以建立LDP会话,称为非直连的LDP会话(详见第11章和第12章)。
LDP主要有4种消息类型。
Discovery消息:LSR使用Discovery消息向其他LSR宣布自己的存在。
Session消息:LSR使用Session消息建立、维持和拆除LDP会话。
Advertisement消息:LSR使用Advertisement消息通告标签和FEC的映射关系1。
Notification消息:标识错误信息。

所有LDP消息都遵循类型(Type)、长度(Length)和值(Value)的TLV格式。LDP使用TCP 646端口,负责建立LDP会话的LSR使用高端口向LDP对端的TCP 646端口发起连接请求(见图1.10),步骤如下。
1.LSR的端口开启了MPLS功能以后,可以周期性地发送Hello消息(使用UDP多播,地址是224.0.0.2),作为LDP会话的初始消息。如果LDP对端的接口也开启了MPLS功能,那么两台LSR就尝试使用Hello中通告的LDP Router-ID建立LDP会话。LDP Router-ID大的LSR是主动(active)LSR,另一端LSR是被动(passive)LSR。主动LSR使用高端口向被动LSR的646端口发起TCP连接请求。
2.主动LSR向被动LSR发送初始化消息,初始化消息中包含了LDP会话的参数,例如会话保活时间、标签分发策略、PDU最大长度、接收方的LDP ID和是否需要环路检测。
3.如果被动LSR可以接受LDP参数,那么向主动LSR回复初始消息;否则,被动LSR回复Notification消息指示错误信息。
4.假设被动LSR接受了LDP参数,那么发送了初始消息以后,再次向主动LSR发送保活消息。
5.主动LSR向被动LSR发送保活消息,此时,LSR1和LSR2之间已经建立了LDP会话,然后,LSR1和LSR2开始交换标签和网络前缀的映射。
1.5.3 LDP的标签分发
在MPLS网络中,相邻LSR之间需要建立LDP会话。对于一个网络前缀,每台路由器都运行IGP扩散其路由信息并安装在IP转发表中,然后为此网络前缀分配本地标签。LSR通过LDP将本地标签和网络前缀的映射分发给上游LDP邻居路由器。上游路由器将收集到的标签与网络前缀的映射保存在标签表中,结合IP转发表的信息,最终计算得到标签转发表的信息。因此,标签转发表保存了目前网络的本地标签和出向标签(来自下游路由器)。LSR可以使用以下两种方式分发标签。
下游按需方式:在下游按需(Downstream on demand)方式中,下游路由器只有接收到上游路由器针对特定网络前缀的映射请求时,才会将相应的标签和网络前缀的映射分发给上游路由器。因此,下游路由器是“按需”地执行分发标签操作。
下游主动方式:在下游主动(Unsolicited demand)方式中,下游路由器无需接收到上游路由器的请求,可以主动地相应的标签和网络前缀的映射分发给上游路由器。
图1-11使用E-LSR R1和LSR R2描述了两种标签分发方式。在下游按需方式中,R2向R1请求网络前缀172.16.10.0的标签;R1接受请求以后,将本地标签17与网络前缀172.16.10.0的映射分发给R2。在下游主动方式中,R1主动将本地标签17与网络前缀172.16.10.0的映射分发给R2。

1.5.4 MPLS标签保持
MPLS网络的所有LSR都可以使用路由协议获得网络前缀的路由信息,并为网络前缀分配标签。假设MPLS网络的所有LSR都使用下游主动方式分发标签,LSR1的相邻LSR是LSR2、LSR3和LSR4。那么,对于某个网络前缀,LSR1可以从所有相邻LSR,即LSR2、LSR3和LSR4,接收标签映射。在不考虑多链路负载分担的情况下,假设LSR2是LSR1向此目的网络转发数据的下一跳路由器,那么LSR1只需将LSR2分发的标签作为出向标签,而暂时不使用来自LSR3和LSR4的标签。
如果LSR1支持自由模式(Liberal Mode)标签保留,那么LSR1可以保留其所有相邻LSR(LSR2、LSR3和LSR4)分发的标签;如果LSR1支持保守模式(Conservative Mode)标签保留,那么LSR1只保留下一跳路由器LSR2分发的标签,丢弃LSR3和LSR4分发的标签。因此,LSR配置了自由式标签保留以后,可以在网络拓扑发生变化时更快地恢复数据包转发功能;但是,LSR需要耗费较多的存储资源保存标签映射信息。对于保守式标签保留,LSR无法实现转发功能的快速恢复,但是可以节省存储资源。
1根据RFC 3031的定义,LSR为FEC分配标签,而不是为网络前缀分配标签。通常,每条直连路由、静态路由或IGP路由都属于独立的FEC,而具有相同下一跳的BGP路由属于相同的FEC,因此为这些路由所属的FEC分配标签,等同于为这些路由分配标签。在实际应用中,人们常常略过FEC,直接认为LSR为网络前缀或路由分配标签。—译者注