在软考网络工程师的考纲里,MPLS(多协议标签交换)是一个长期被低估、却又在历年真题中反复露面的考点。许多考生对它的印象停留在"那是一种标签技术"这一句模糊的描述上,一旦真题追问标签到底插在哪一层、标签栈结构长什么样、转发等价类FEC如何划分、标签交换路径LSP如何建立,便立刻暴露出知识链条的断裂。本文将以网络工程师考试为基准,把MPLS从概念定义到标签结构、从标签分发到应用场景、从常见误区到真题命题规律完整拆解一遍,让你读完这篇文章之后,面对任何一道MPLS相关选择题都能做到心中有数、下笔不慌。
要真正理解MPLS,必须先回到它的全称。MPLS是Multi-Protocol Label Switching的缩写,中文通常译为"多协议标签交换"。这个名称中的三个词各有其指向,理解这三个词的准确含义,是掌握整个知识体系的起点。
标签(Label)是MPLS体系中最基础、最核心的概念。从本质上讲,标签就是一个长度固定、结构简单、携带转发信息的短小标识。与IP地址那种长达32位甚至128位的网络层地址不同,MPLS标签的主要字段只有20个比特,这20个比特用来唯一地标识一个标签值,范围从0到2的20次方减1。需要注意的是,0到15这16个标签值被保留用于特殊用途,因此实际可供分配的标签值从16开始。
标签之所以能显著提升转发效率,关键在于它改变了路由器转发决策所依据的对象。传统IP转发依赖的是最长前缀匹配,路由器需要把分组的目的IP地址与路由表中的每一条前缀逐位比对,找出匹配长度最长的那一条。这种查找虽然可以通过硬件优化的方式加速,但在逻辑上仍然是一种相对复杂的操作。而MPLS标签转发采用的是精确匹配,路由器只需要拿标签值在标签转发表中做一次精确的等值查找,找到对应的表项后直接交换标签并转发,逻辑上比最长前缀匹配简单得多。
理解标签的另一个关键点,在于它只是本地有效的。这句话是MPLS命题中最高频的挖坑点之一。所谓本地有效,是指同一个标签值,在相邻的两台路由器上完全可能代表不同的含义。一台路由器给自己下游邻居分配的标签是16,并不意味着上游路由器收到的标签也必须叫16,标签在每一跳都被重新映射、重新赋值。这个特性直接决定了MPLS标签交换与ATM的VPI/VCI或帧中继的DLCI在语义上的根本区别,前者是逐跳重新协商的,后者在一定范围内具有更强的端到端连续性。
如果说标签是MPLS的"表",那么转发等价类(Forwarding Equivalence Class,简称FEC)就是MPLS的"里"。FEC是理解MPLS转发本质的钥匙,也是很多考生知其然而不知其所以然的地方。
FEC的定义是:在MPLS网络中,以相同方式、沿相同路径、获得相同转发处理的一组IP分组,就属于同一个转发等价类。换句话说,凡是走同一条出口路径、接受同一种处理方式的分组,都会被归入同一个FEC,并被赋予同一个标签。这种归类不是在每台路由器上随意进行的,而是在标签交换路径的入口处一次性完成的。
FEC的重要意义在于,它把原来需要每一跳路由器独立决策的IP路由工作,压缩成了入口处的一次性分类。一台边缘路由器在入口处完成FEC归类并打上标签之后,路径上后续的每一台核心路由器就不需要再去查看IP头部、不需要再做路由查找,只需要根据标签完成交换即可。这一机制带来了两个直接的好处:第一是转发效率的提升,核心路由器只做标签交换;第二是转发行为的一致性,同一FEC内的所有分组被保证走完全相同的路径,这为后续的流量工程和服务质量保障奠定了基础。
FEC的划分粒度是灵活的,既可以粗到"所有去往某个目的网段的分组",也可以细到"某个特定源地址到某个特定目的地址、且需要特定服务质量等级的分组"。正是这种粒度上的灵活性,让MPLS能够同时承载普通路由转发、VPN隔离、流量工程等多种需求,成为多协议、多场景的通用转发平面。
理解了标签和FEC这两个概念之后,接下来要深入到MPLS的底层运行机制。这一部分是全篇的核心,也是真题密集出题的区域,标签的结构、标签的插入位置、标签交换的完整流程,都需要在这一节中彻底吃透。
MPLS的标签在数据平面上表现为一个长度为32比特(4字节)的标签头,通常被称为垫层头(Shim Header)。这个32比特的标签头被严格划分为四个字段,每个字段的长度和作用都是固定的,考试中经常就这四个字段的划分细节进行设问。
第一个字段是标签值字段,占20个比特,用于存放标签本身,这是标签头的主体。第二个字段是流量类别字段,占3个比特,在早期的规范中被称为EXP(Experimental,实验位),后来更名为TC(Traffic Class,流量类别),用于携带服务质量信息,实现对不同优先级分组的区分处理。第三个字段是栈底标志字段,占1个比特,用S表示,用来标记当前标签是否是标签栈的最底层。当S位为1时,表示这个标签是栈底的最后一个标签,其下方紧跟着的就是IP头部;当S位为0时,表示标签栈中还有更下层的标签。第四个字段是生存时间字段,占8个比特,即TTL,其作用与IP头部的TTL类似,用于防止分组在标签交换网络中因环路而无限循环。
这里需要特别强调标签栈(Label Stack)的概念。MPLS允许在一个分组上同时压入多个标签,这些标签按照后进先出的栈结构组织,形成一个标签栈。标签栈的存在是MPLS能够支持复杂嵌套场景的关键,比如在多层VPN结构中,外层标签负责把分组送到底层骨干网的边界,内层标签负责在VPN内部进行转发。栈底标志位S正是用来区分栈中各层标签的边界。
标签头在帧结构中的位置,是网络工程师考试中反复出现的高频考点。MPLS标签头被插入在二层帧头与三层IP头之间。以太网为例,一个带有MPLS标签的分组,其结构依次是:以太网帧头、MPLS标签头、IP头、TCP/UDP头、应用数据。这个位置的设定是有深层原因的:因为MPLS位于二层之上、三层之下,所以它既不属于传统意义上的二层协议,也不属于三层协议,业界通常形象地称之为"2.5层"协议。理解了这个位置关系,很多关于MPLS层级的判断题就有了明确答案。
标签交换的完整工作流程,可以概括为"入口压栈、逐跳交换、出口弹出"三个阶段,其中每一阶段都有专门的术语和路由器角色与之对应。
在入口处,负责压入标签的路由器被称为标签边缘路由器(Label Edge Router,简称LER),有时也称为入站LER或Ingress Router。这台路由器位于MPLS网络的边缘,承担着连接普通IP网络与MPLS网络的任务。它收到一个普通的IP分组后,首先进行正常的路由查找,确定分组的目的地,然后根据查找结果把分组归入相应的FEC,为该FEC分配或查询已经协商好的标签,将标签头压入分组,最后把带标签的分组转发给下一跳。
在中间路径上,负责标签交换的路由器被称为标签交换路由器(Label Switching Router,简称LSR)。这些路由器位于MPLS网络的内部,它们的任务非常简单而明确:收到一个带标签的分组后,取出标签头中的标签值,在标签转发表中进行精确匹配,找到对应的表项,然后把旧标签替换成表项中指定的新标签,同时根据表项指定的出接口把分组转发出去。这个"替换标签并转发"的动作,就是"标签交换"这一名称的直接来源。
在出口处,负责弹出标签的路由器同样被称为LER,即出站LER或Egress Router。当带标签的分组到达出口路由器时,标签的使命已经完成,出口路由器弹出标签头,恢复出原始的IP分组,再进行常规的IP路由查找,把分组转发到MPLS网络之外的目的网络。
从压栈到弹出,一条完整的分组转发路径被称为标签交换路径(Label Switching Path,简称LSP)。LSP是单向的,它描述的是分组从入口LER到出口LER所经过的标签交换序列。需要强调的是,LSP的建立是转发的前提,在分组真正沿着LSP转发之前,路径上的所有LSR必须已经通过标签分发机制协商好了各自的标签绑定关系。
标签交换能够工作的前提,是路径上的每台路由器都知道"收到某个标签值后,应该替换成什么新标签、从哪个接口转发出去"。这套标签绑定关系的建立过程,就是标签分发,而负责标签分发的协议,则是这一节的讨论重点。
标签分发协议(Label Distribution Protocol,简称LDP)是MPLS中最基础、最常用的标签分发协议。它运行在LSR之间,通过交换特定的消息,把"FEC与标签的对应关系"逐跳传递下去,最终在相邻路由器之间建立起一致的标签转发表项。
LDP的基本工作原理可以这样理解:一台LSR为某个FEC分配一个标签,然后把这个标签绑定信息通告给它的上游邻居。上游邻居收到这个通告后,把它记录到自己的标签转发表中,于是上游邻居就知道,凡是去往这个FEC的分组,应该打上这个标签并转发给下游邻居。如此逐跳传递,从出口LER一路向上游回溯,最终在入口LER处形成一条完整的LSP。
LDP在传输层使用TCP协议,端口号为646,这一细节在部分真题中有所涉及。使用TCP而非UDP,保证了标签绑定信息的可靠传递,因为标签分发信息的丢失或错乱会直接导致转发平面出现黑洞或环路,后果比普通的控制面信息丢失严重得多。LDP的邻居发现则借助UDP协议实现,通过对组播地址周期性发送Hello报文来发现相邻的LDP对等体。
LDP的标签分配策略可以从两个维度进行划分,这两个维度及其组合在真题中以概念辨析题的形式频繁出现,需要仔细区分。
本篇完!