::: hljs-center
:::
什么是 MPLS
MPLS 全称多协议标签交换系统(Multi-Protocol Label Switiching)是一种在开放通信网络中利用标签引导数据进行高效转发的一种协议。简单来讲就是通过对数据包打上一些源数据包以外的一些标签,而且通过运行了 MPLS 协议设备对这个数据包进行打标签,撕标签。 对于标签两个字大家肯定不陌生吧,网络协议最基本的 VLAN 中就讲过 Tag 标签,其主要作用就是标记数据包,更高效的处理数据包的转发,MPLS 网络中就是把二层数据标签和三层网络打通,从而数据在传输中只按照数据包头部的标签进行转发,无需在查看上层报文头部信息,当数据包离开 MPLS 网络后所有的标签将会剥离掉。所以对于路由器来讲,不再需要基于数据包的IP信息来进行路由表的查表转发这些操作,只需要根据报文的标签头部即可。
MPLS 产生背景
MPLS 的最初产生的意义就是为了提高数据包的高效转发, 在早起而言路由器大都是以软件的方式来进行报文的处理和转发。每一跳都需要根据报文的目的地址,按照最长路由匹配远程进行查表,然后进行转发,效率较为低下,为了解决这一问题。 当时很多用户会选择 ATM 网络来提高自身网络数据传输效率,那什么是 ATM 网络呢? 当然这个 ATM 不是自助提款机哈。他的专业术语叫做异步传输模式(Asynchronous Transfer Mode)是一种基于虚电路的二层交换技术,使用固定长度的信元方式来进行数据的转发,这种方式技术实现较为复杂,且部署成本和难度都很高。 MPLS 技术就在这种背景下诞生了,MPLS 技术避免了传统 IP 转发的繁杂过程,并借鉴了 ATM 使用标签转发和面向连接的特点, 但是随着技术的不断发展,之前的设备性能瓶颈问题得以解决了,所以目前依旧是 IP 为主流的网络环境,但是 MPLS 协议可以在二层三层网络中传递的优点,在今天依旧是一个优点,虽然在数据传输方面没有得以延续,但是在其他方面为网络继续提供一些增值业务,例如 MPLS VPN ,MPLS TE 等技术。
MPLS 专业术语解释:
- LSR:标签交换路由器,运行了 MPLS 协议具备标签分配和标签转发的路由器。
- LER:标签边界路由器,具有标签分配能力,并且同时连接 IP 网络和 MPLS 网络的路由器。并且 LER 分入站和出站两种角色,入站的 LER 主要是负责对数据包进行压入标签的动作,出站的 LER 主要是对数据包进行剥离标签动作,根据数据流向来定义 LER 是为入站还是出站。
- FEC:转发等价类,用来表示具有相同特征的报文在转发过程中被 LSR 以相同的方式处理。在 MPLS 中,一个 FEC 使用同一个标签来标记,也就是意味着一个 FEC 标签所经历的 LSP 是相同的。
- LSP:标签转发路径,MPLS 报文经过的路径。一条 LSP 的起始就是入站的 LER 的对报文进行标签的压入,结束就是由出站 LER 对报文进行标签剥离的动作。这一整个在 MPLS 网络中的路径就是 LSP ,也可以很形象的比喻这个方式就好比报文进入一个隧道,报文在隧道里面可以按照自己目的地进行选择自己传输的路径,最后从隧道另一端出去的完整路径。(这里留一个问题,如果出站入站的 LER 相同,但是去往最终的目的地址却不一样,这种是否能在 MPLS 协议中实现,如果能实现那么是如何实现的)。
- 静态 LSP:在 MPLS 网络中对于 LSP 的路径转有两种模式可以选择,一种就是静态 LSP ,一种是动态 LSP 。静态 LSP 全程是需要手动进行配置,也就是报文在 MPLS 网络中会严格按照预设的路径进行转发,所以这种路径中的报文不需要标签,也不需要查询报文头部 IP ,会直接转发到目的地址,资源消耗较低,适用于网络架构简单的环境。
- 动态 LSP:是根据 LDP 动态标签分发协议,来对报文进行标签分发,路由器通过运行了 LDP 协议后,会为 MPLS 网络中的每条路由进行一个标签映射,然后将信息通告给邻居路由器,最后建立成一个完整的标签转发表,最终形成 LSP 。
MPLS 工作原理
当一个网段发起数据请求,会从离目的网段最近的路由器来反向进行建立标签转发表。标签表的组成为in标签、out标签、出接口三要素。离目的网段最近的路由器先发起一个标签表,把out标签空置,in标签设置为自己的标签号。然后往回传,路由器收到后会把上一个in标签设置为自己的out标签。自己随机生成一个in标签,然后填上自己的出接口。后面路由器按照此顺序继续传递,一直传递到离发起数据最近的路由器位置,此标签表的内容是in标签为空,out标签为上一个路由器传递过来。这个可能有点绕,大家画图想一下
其实整个 MPLS 的工作核心就是标签分发,如何对报文进行打标签,打什么标签,打标签的依据是什么,从而形成一个完整的 LSP 路径。这里我们先来讨论静态 LSP 路径是如何对报文进行处理的。 一条静态的 LSP 经过的 LSR 共有三种角色。 Ingress 节点负责为接收到的 IP 报文添加标签并送往 LSP 隧道。 Transit 节点负责以标签交换的方式转发报文。 Egress 节点负责把报文标签剥离,把报文发送到 IP 网络中。 建立静态 LSP 需要遵循的原则,报文的前一个节点的出标签必须要等于下一个节点的入标签。
如上图所示,PC1 想要和 PC2 进行通讯时,必须要经过中间的 MPLS 网络,由于 LSP 是单向的线路,想要实现来回的数据通信,需要建立两条 LSP 。 lSP1 是用于 PC1 像 PC2 发送数据,LSP2 是用于 PC2 像 PC1 发送数据的。 那么在 LSP1 线路上对于报文来说,Ingress 节点就是 LER1 设备,出标签为 100 ,LSR1 设备需要把报文标签替换成入标签 100 ,出标签 200 ,Egress 节点就是 LER2 入标签 200,然后就直接转发了,当 LER2 收到这个报文查看标签后,会直接向 IP 网络转发。 那么对于 LSP2 线路上的报文来说,Ingress 节点就是 LER2 设备,出标签为 200,LSR1 收到这个报文会把报文标签替换成入标签 300 ,出标签 400 ,Egress 节点就是 LER1 入标签为 400 ,直接转发数据出去了。这就是一个基本的 MPLS 数据包的转发过程了。