MPLS(多协议标签交换)顾名思义,它不考虑协议(多协议),使用标签(标签交换)在网络中移动数据包。多年来,MPLS一直是网络运营商确保实时应用程序可靠连接的首选技术。MPLS通过将标签应用于数据包的报头来封装传入的数据包。MPLS域中的每个路由器都会查看MPLS标签以了解如何处理每个数据包,但其不查看或关心数据包中的内容,它只关心标签。当数据包离开MPLS域时,标签将被移除,由标准IP路由接管。可以看出,MPLS技术的核心就是标签交换。本文我们将从标签入手,逐步了解什么是MPLS。 MPLS为什么要使用标签?MPLS为什么要添加标签?什么是标签?参考MPLSLDP标签分发控制模式、通告模式及保留模式。我们先看看VLAN标签是什么样,大概就知道什么是MPLS标签了。标签本身基本上只是数字,如下图所示,第4行写着Label:299776。 在此数据包捕获中,标签被插入到第2层以太网报头和第3层IP报头之间。这就是为什么有人说MPLS工作在第2层半。这些数字,也就是这些标签,只对接收数据包的路由器有意义。本质上,标签就像一条指令,这条指令通常做两件事:它告诉接收路由器如何转发数据包或者,它告诉接收路由器该数据包是特定VPN的一部分当一个标签用于在特定方向转发数据包时,我们称之为传输标签。当一个标签用于告诉路由器该数据包属于一个特定的VPN时,它被称为服务标签,有时也称为VPN标签。MPLSVPN让许多客户都可以使用相同的私有IP范围,因为接收路由器不会查看目标IP地址。相反,VPN标签会告诉路由器数据包属于哪个客户。 路由器如何学习这些标签?IP是一种寻址方案,需要其他协议在各处实际通告IP。我们可以以类似的方式考虑MPLS:MPLS是一种标签方案,需要其他协议在各处实际通告这些标签。先说说如何通告MPLS传输标签。有四种常见的方法,这四种协议以完全不同的方式工作,并且有不同的用例。LDP(LabelDistributionProtocol)代表标签分发协议。这是一个非常基本的协议,并且易于配置。流量将始终遵循OSPFISIS指定的最佳路径。在MPLS网络中,两个标签交换路由器(LSR)必须用在它们之间或通过它们转发流量的标签上达成一致。RSVP是资源预留协议。RSVP相比LDP需要手动配置,但优势在于它提供了大量的流量工程功能,能够按照路由协议的要求以不同的方式移动流量,例如绕过带宽问题进行路由,或明确避免网络中的某些链路。分段路由是一种在OSPF或ISIS内部发布标签的方法,这意味着不需要运行额外的协议来通告标签。它可以实时告诉路由器使用哪个标签到达哪个目的地。通过将决策置于中央控制器中,可以获得真正的网络全局视图,甚至在OSPF区域或ISIS级别,以及不同的自治系统之间。BGPLabelledUnicast是一个特殊的BGP地址族,往往只用于一些非常特地的、更高级的场景。MPLSVPN标签几乎都是在BGP中通告的。毕竟,如果不能在两个路由器之间传输数据包,就不能在它们之间运行VPN。 路由器如何处理这些标签?两个路由器之间的对话可能是这样的,路由器B对路由器A说如果你想让我将数据包转发给路由器Z,包裹寄给我的时候贴上标签123456。然后路由器B会对自己编程,如果数据包带有标签123456,则该数据包会始终从特定接口发送出去。路由器B并不知道这个传出接口是不是通往路由器Z的最佳路径。当路由器B将此数据包发送到路由器C时,路由器C也将根据标签知道如何处理该数据包,路由器D和路由器E等也会如此,一直到终点目的地。只要从一端到另一端有一个标签交换路径,沿途的路由器就能够成功地将数据包从A传输到Z。路由器B甚至可能在发送标签时将标签更改为其他内容。在LDP和RSVP中,标签通常只对路由器本身有意义,沿途的每个路由器都可以自己决定它希望前一跳使用什么标签。当标签沿途发生变化时,我们称之为交换标签。例如,路由器A将标签为123456的数据包发送到路由器B,路由器B在将其发送到路由器C之前可以将其交换为标签345678。(相比之下,SegmentRouting中的某些标签是全局的,因此它不是MPLS的通用规则。参考MPLSSegmentRouting)上面的例子要理解的关键是,当路由器B收到数据包并将其转发到路由器C时,路由器B根本没有查看目标IP。相反,是传输标签告诉路由器B如何处理数据包。因为没有查看底层目标地址,所以协议可以是IP、IPv6或任何其他协议,所以说是多协议标签交换。 向数据包添加标签有何意义?到目前为止所说的一切听起来都非常像常规IP路由。如果没有MPLS,路由器也会查看目标IP地址,然后将数据包发送到下一跳。那么MPLS有什么意义呢?如果将网络设置为每个路由器都知道整个网络中的每个IP地址,那么路由器B肯定可以从路由器A接收数据包,查看目标地址,检查自己的路由表,找到最佳路线,然后发送数据包。但这里有一个问题:如果不想让一切都发送到所谓的最佳路径,会发生什么?例如,如果所有内容都沿着一条最佳路径发送,则该链接可能会开始被大量使用,甚至可能达到极限。很可能会有其他根本没有被使用的潜在路径,最好将一些选择性流量发送到次优路径,以充分利用网络。当存在另一条不太好且带宽可用的路径时,该如何解决链路饱和的问题?如果从路由协议的角度来看,有两条或多条到达目的地的路径同样好,那么可以利用ECMP或等价多路径,对流量进行负载平衡,并充分利用链接。SDWAN可以根据目的IP地址以外的质量,有选择地将流量路由到不同的链路,也许是基于应用程序本身,也可能是源IP地址。这对分支机构来说非常好,但对于每秒有很多千兆流量的服务提供商规模的网络,以及数以万计的用户前往数百万目的地的网络来说,很难真正的扩展。我们需要的是某种可扩展的、功能丰富的协议,它允许以选择的任何方式发送流量,而不总是遵循最佳路径。几十年前,这个问题正是服务提供商和大型企业面临的问题之一,而MPLS就是解决答案。标签交换路径基于标签转发数据包的系统的优点在于,中转路由器不需要知道,甚至不需要关心数据包上的IPv4或IPv6地址。它们只关心数据包进入了带有标签X的接口,因此应该从带有标签Y的不同接口发送出去,以便路径上的下一个路由器知道如何处理它。我们称这个端到端标记路径为LSP,或标签交换路径,参考SRMPLS:多协议标签交换的段路由。从路由器1开始检查LSP,一直到路由器10。为了方便起见,我们假设它是通过RSVP创建的。给RSVPLSP一个名字和一个目的地,结果如下所示: LSP是单向的,如果要使流量在真实网络中正常工作,需要在相反的方向上建立第二个LSP。但为了简单演示,我们只关注一个LSP。如上图所示:路由器1和路由器10是PE路由器,或ProviderEdge。路由器2、3、4和5都是中转路由器,简称为P(Provider)路由器。路由器1称为首端或入口路由器,将LSP想象成流量进入的隧道。同样,路由器10称为尾端或出口路由器。假设R1和R10正在进行BGP,R10对R1说:如果你想到达69。69。69。024,请将流量发送给我。之后,R10会将通告其环回为该前缀的下一跳。LSP进入R10的环回。路由器2、3、4和5不需要运行BGP,它们只查看数据包上的标签,不查看IP地址。然后计算出需要从哪个接口传出,相应地交换标签。 MPLSVPN假设客户需要为其各个办公室购买100个WAN链接,但要求将其放在自己的专用网络中,不要放在公共互联网上。服务提供商该如何实现这一点?可以通过在WAN链接的末端添加一些额外的配置。服务提供商会在一个路由器内部创建多个虚拟路由表,这些路由表相互独立,互不通信。客户有自己专门的路由表,称为VRF,代表VirtualRoutingandForward。除了客户和服务提供商之外,没有人可以看到流量。客户之间无法相互通信,因为他们在完全独立的路由表中。核心路由器不运行BGP,它们不知道涉及的IP,甚至不查看IP标头。它们只看标签,然后进行相应地转发。MPLSVPN的工作方式完全相同。VPN只需要被边缘路由器知道即可。可以沿着标签交换路径发送VPN流量,这意味着核心设备甚至不需要知道VPN的存在,它们只需要知道将流量发送到哪个远程PE。但这里有一个问题:在刚才看到的拓扑中,如果R1发送一个数据包到私有IP地址10。0。6。9,在数百个VPN客户中,R10如何知道这个前缀属于哪一个?这就是标签堆栈思想由来。我们可以在数据包内添加第二个标签,告诉R10该数据包属于哪个VPN。数据包捕获如下:以太网报头外层传输标签逐跳更改内部VPN标签仅对R10有意义IP报头TCPUDP等报头有效载荷沿途的每一跳只查看外部标签,然后当数据包到达R10时,该PE可以查看内部VPN标签并确定它的真正目的地。这个MPLS标签保留在服务提供商核心中,从PE到现场客户路由器的实际WAN链路将是纯IP。只有在穿过服务提供商网络时才需要标签:从服务提供商到客户的流量没有标签。本文由SDNLAB编译自ChrisParker的技术博客部分相关技术文档如下,可通过阅读原文加入我们的知识星球下载!MPLS向SRv6演进指南。pdfMPLS网络运行和维护(OAM)技术规范。pdfIPRAN解决方案之MPLSVPN技术原理介绍。pdf中国电信以太智能专线STN专线培训。pptxSTN技术及网络规划思路。pdfSTN设备功耗、尺寸、重要参数及图文概要介绍。doc当前知识星球已累积1000份文档,加入后均可下载。