全球数字化进程加速了互联网的蓬勃发展,新需求、新业务的不断涌现也为互联网带来了新的机遇与挑战,服务提供商如何根据多变的业务类型调整网络架构?在网络规模不断扩张、网络结构日渐复杂的背景下如何提供更高的带宽和更好的服务质量?SR设计之初就承载了简化网络的历史使命,运用协议简化的思路,帮助服务提供商完成业务驱动网络的转型。
MPLS(Multi-Protocol Label Switching,多协议标签交换)是一种工作在二层与三层之间的数据转发技术,虽然MPLS因其标签交换的思想使其转发平面广受好评,但是MPLS控制平面却因为协议复杂、扩展性差、部署维护困难等问题受到诟病。那么MPLS控制平面的两大协议,LDP(Label Distribution Protocol,标签分发协议)和RSVP-TE(Resource Reservation Protocol-Traffic Engineering,基于流量工程的资源预留协议)都存在哪些问题呢?
LDP是基于IGP算路结果完成标签分发,LDP存在的主要问题是:
依赖IGP,但是LDP与IGP实际是两个独立的协议,会存在不同步问题,导致流量黑洞。
只能通过最短路径转发,不支持流量工程,缺乏路径规划能力。
RSVP-TE虽然实现了流量工程,可以根据业务需要灵活地选择转发路径,但是也存在明显问题:
配置、维护复杂,RSVP-TE协议状态复杂,设备需要交互大量报文来维持隧道状态,使得该协议难以规模部署。
不支持负载分担,难以充分利用网络资源。
SR-MPLS的使命就是既需要保留传统MPLS网络的优点,还需要解决传统网络的困局。
SDN是一种新的网络体系架构,由美国斯坦福大学 尼克 · 麦基翁(Nick McKeown)教授的团队提出,通过借鉴计算机领域通用硬件、软件定义和开源理念来解决传统网络架构中网络设备硬件、操作系统和网络应用紧密耦合,相互依赖的问题。
SDN主要有3大特征:网络开放可编程、逻辑上的集中控制、控制平面与转发平面分离。符合这3大特征的网络都可以称为SDN。SDN早期的实践代表是OpenFlow,OpenFlow是一种SDN控制平面和转发平面之间交互的通信协议,OpenFlow需要对网络硬件设施全部进行升级或者替换对传统网络进行了革命性创新,从传统网络的分布式架构转变为集中式架构,但是革命网络太过于理想,在实施过程中难以达到理想状态。而SR技术能同时支持传统网络和SDN网络,兼容现有设备,保障现有网络平滑演进到SDN网络。
网络架构演进
SR-MPLS伴随着SDN思潮应运而生,SR-MPLS技术能够使网络更加简化,并具有良好的可扩展能力,主要体现在以下方面:
更简单的控制平面:无需部署LDP/RSVP-TE协议,只需要设备通过IGP/BGP协议扩展来实现标签分发或同步,或者由控制器统一负责SR标签的分配,并下发和同步给设备。
易扩展的转发平面:SR-MPLS复用了已有的MPLS转发平面,网络设备不做改动或者进行简单升级就可以支持SR的转发,在SR-MPLS中,Segment可以映射为MPLS标签,路径就是标签栈。
SR-MPLS控制平面和转发平面
SR-MPLS以其简单、高效、易扩展的特点,使其具有很多优势:
具备网络路径可编程能力:SR-MPLS具备源路由优势,仅在源节点对报文进行标签操作即可任意控制业务路径,且中间节点不需要维护路径信息,设备控制平面压力小。
简化设备控制平面,减少路由协议数量,简化运维成本;标签转发表简单,标签占用少,设备资源占用率低。
更好的向SDN网络平滑演进:面向SDN架构设计的协议,融合了设备自主转发和集中编程控制的优势,能够更好地实现应用驱动网络。同时,支持传统网络和SDN网络,兼容现有设备,保障现有网络平滑演进到SDN网络。
SR-MPLS相比于MPLS,一方面保留了MPLS转发平面的优势,使得SR-MPLS可以直接应用在现有MPLS架构上,另一方面也对传统MPLS技术做了革命性的颠覆和创新。SR-MPLS的主要优势体现在以下几个方面。
SR-MPLS和MPLS对比
SR-MPLS的工作就是将报文转发路径切割成不同的分段并为其分配SID,然后通过在路径的起始点往报文中插入分段信息的方式来指导报文正确的转发到目的地。下面我们将围绕着SID分配和传递展开介绍控制平面如何建立LSP,以及转发平面如何转发数据报文。
在介绍SR-MPLS的工作原理之前,先了解一些基本概念。
什么是Segment?
Segment表示网络指令,用来指引报文去哪,怎么去。根据生成方式不同,Segment分为3类,分别是Prefix Segment、Node Segment、Adjacency Segment。
Segment分类
什么是SID?
SID表示Segment ID,用来标识SR域内唯一的段。在转发层面,可以映射为MPLS标签。如上图所示,SID也分为3类,分别是Prefix SID、Node SID、Adjacency SID。
Prefix SID,也可称之为前缀标签,是针对目的IP地址映射的标签。
Node SID,也可称之为节点标签,是针对设备Loopback口IP地址映射的标签,可以看作是特殊的Prefix SID。
Adjacency SID,也可称之为邻接标签,是每台设备针对自己的接口邻居发布的,用来显示指定数据包的外发链路,且具有方向性,例如P2分配的16024邻接标签,代表需要从本地Interface1接口外发给P4。
Prefix SID/Node SID和Adjacency SID可以分别类比于传统IP转发中的目的地址和出接口。
Prefix SID、Node SID、Adjacency SID
什么是Segment List?
Segment List表示报文转发路径的一个有序的Segment列表。在转发层面,可以理解为MPLS标签栈。
什么是SRGB?
SRGB表示用户指定的为SR-MPLS预留的全局标签集合,需要手工配置,并且该集合内的标签值只能分配给Prefix SID和Node SID,而Adjacency SID是SRGB范围外的本地SID。
SR-MPLS LSP本质上是一种使用依靠Segment Routing技术建立的标签转发路径,因此,SR-MPLS LSP的建立过程实际上是Prefix SID、Node SID分配和传递的过程,SR-MPLS TE隧道的建立过程实际上是Adjacency SID分配和传递的过程。
Node SID分配和传递
如下图所示,以P4为目的节点,在P4节点上手工配置Node SID,通过IGP协议扩展到其他网元之后,整个IGP域的其他节点学习到P4节点的Node SID,然后使用SPF算法得出一条到P4的标签转发路径,然后生成转发表项。
使用Node SID表示的路径就是SR-MPLS BE LSP,SR-MPLS BE是指IGP使用最短路径算法计算得到的最优SR LSP。
Node SID分配和传递
Prefix SID分配和传递
如下图所示,以P4为目的节点,在P4节点上手工配置Prefix SID,通过IGP协议扩展到其他网元之后,其他网元会解析Prefix SID,并根据自己的SRGB计算标签值。此后各节点使用IGP协议收集的拓扑信息,根据最短路径算法计算标签转发路径,并将计算的下一跳及出标签(OutLabel)信息下发转发表,指导数据报文转发。
使用Prefix SID表示的路径也是SR-MPLS BE LSP。
Prefix SID分配和传递
基于Prefix SID的LSP创建过程如下:
在P4上配置SRGB,在P4的Loopback口配置Prefix SID,生成转发表项并下发。之后P4将SRGB和Prefix SID封装到LSP报文,并将LSP报文通过IGP向全网扩散。
网络中其他节点接收到LSP报文后,解析P4发布的Prefix SID,根据自己的SRGB计算标签值,同时根据下一跳节点发布的SRGB计算出标签值(OutLabel)。使用IGP拓扑计算标签转发路径,然后生成转发表项。
P3解析P4发布的Prefix SID,根据自己的SRGB=[36000–65535]计算标签值,计算公式是:Label=SRGB的起始值+Prefix SID值,所以Label=36000+100=36100。
使用IS-IS拓扑计算出标签(OutLabel),计算公式是:OutLabel=下一跳设备发布的SRGB的起始值+Prefix SID值,在本例中,下一跳设备为P4,P4发布的SRGB范围是[16000–65535],所以OutLabel=16000+100=16100。
P2计算过程与P3类似,Label=26000+100=26100,OutLabel=36000+100=36100。
P1计算过程与P3类似,Label=20000+100=20100,OutLabel=26000+100=26100。
Adjacency SID分配和传递
如下图所示,P2节点为其每个邻居分配一个Adjacency SID,IGP默认为邻居自动生成Adjacency SID,也可以支持手工配置。Adjacency SID也是通过IGP协议扩展到其他网元,但是仅在分配的节点生成转发表项,其余节点不针对Adjacency SID生成转发表项,例如此例中仅在P2生成了转发表项。
通过在头节点定义一个包含多个Adjacency SID的Segment List,还可以实现路径的精细规划,因此使用Adjacency SID表示的路径可以称之为SR-MPLS TE隧道,能更好地实现流量工程。
Adjacency SID分配和传递
从上面的介绍中也能看出Prefix SID、Node SID和Adjacency SID的作用:
Prefix SID和Node SID用来标识一个节点,从转发平面可以将其理解为沿着支持ECMP的最短路径到此节点,由此可见,基于Prefix SID或Node SID的转发路径并不是一条固定路径,头节点无法控制报文的整条转发路径,因此基于Prefix SID或Node SID建立的转发路径称之为SR-MPLS BE LSP。
Adjacency SID是本地针对自己的接口邻居分配的,从转发平面可以将其理解为沿着指定出接口或下一跳转发报文,当在头节点定义一个或多个Adjacency SID的Segment List,则可以严格指定任意一条显式路径,因此基于Adjacency SID建立的转发路径称之为SR-MPLS TE隧道,这种方式能更好的配合实现SDN。另外对于严格指定的显式路径又称之为严格路径,这是SR-MPLS TE隧道的其中一种形式。
在实际应用中Prefix SID、Node SID、Adjacency SID可以单独使用,也可以结合使用,如下图所示,还可以基于Adjacency SID + Node SID建立转发路径。通过Adjacency SID,可以强制整条路径包含某一个邻接。而对于Node SID,节点可以使用SPF算法计算最短路径,也可以负载分担。这种方式的路径并不是严格固定,所以也称作松散路径,这是SR-MPLS TE隧道的另一种形式。
Adjacency SID + Node SID的转发路径
前面我们分别介绍了基于不同类型SID建立的不同类型LSP:SR-MPLS BE LSP和SR-MPLS TE隧道(又包含严格路径和松散路径两种形式),下面采用示例说明不同类型LSP的数据报文转发流程。
基于Prefix SID的数据报文转发
以基于Prefix SID的SR-MPLS BE LSP为例,报文在该LSP的报文转发流程如下:
P1节点收到数据报文,添加标签值26100并转发。
P2节点收到该标签报文,进行标签交换,将标签26100弹出,换成标签36100。
P3节点收到该标签报文,进行标签交换,将标签36100弹出,换成标签16100。
P4节点收到该标签报文后,将标签16100弹出,继续查路由转发。
基于Prefix SID的数据转发
基于Adjacency SID的数据报文转发
在头节点定义了一个包含多个Adjacency SID的Segment List后,报文则会沿着这条严格指定的显式路径(SR-MPLS TE隧道的LSP)进行转发,转发流程如下:
P1节点收到数据报文,添加标签栈<1002,2004, 7009="">,然后根据栈顶的标签1002匹配邻接,找到对应的转发出接口P1->P2邻接,之后将标签1002弹出。报文携带标签栈<2004, 7009="">,通过P1->P2邻接向下游节点P2转发。
P2节点收到报文后,根据栈顶的标签2004匹配邻接,找到对应的转发出接口为P2->P4邻接,之后将标签2004弹出。报文携带标签栈<4005,5007,7009>,通过P2->P4邻接向下游P4转发。
P4、P5、P7节点收到报文后的处理方式与P2相同,直到P7弹出最后一个标签7009,数据报文转发至节点P9。
出节点P9收到的报文不带标签,通过查找路由表继续转发。
基于Adjacency SID的数据转发
基于Adjacency SID + Node SID的数据报文转发
严格路径方式的SR-MPLS TE在存在等价路径的情况下,也无法进行负载分担,在SR-MPLS TE路径里引入Node SID后,可以弥补上述不足。
在头节点手工指定Node SID、Adjacency SID混合标签栈,转发器基于该标签栈,逐跳查找出接口弹出标签,指导数据报文进行转发到隧道目的地址。
如图所示,报文转发流程如下:
在P1节点根据栈顶邻接标签1003,找到对应的转发出接口为P1->P3邻接,将1003标签弹出,然后将剩余报文发送到下一跳P3节点;
在P3节点类似P1节点动作,根据栈顶标签1006,找到对应出接口,将1006标签弹出转发出去,发送到下一跳P2节点;
在P2节点类似P1节点动作,根据栈顶标签1005,找到对应出接口,将1005标签弹出转发出去,发送到下一跳P4节点;
在P4节点上,处理栈顶节点标签101,在P4节点标签101为到P7节点的链路负载分担标签,流量报文根据其IP五元组,哈希到相应链路上;
在P5、P6节点上,收到节点标签101后,根据对应的标签做对应动作,交换为下一跳的节点标签,由于这两个节点为倒数第二跳,直接将标签弹出后报文发送给P7节点,完成端到端路径的流量转发。
从以上描述可以看出,通过手工指定节点标签+邻接标签,设备在处理节点标签时,可以按照最短路径进行转发,也可以进行负载分担,其路径并不是严格固定,所以这种也称作松散路径方式的SR-MPLS TE。
基于Adjacency SID + Node SID的数据转发
SR-MPLS因其简单、高效、易扩展的特点,一经推出便很快得到了业界的认可。虽然基于MPLS转发平面的SR-MPLS可以提供很好的可编程能力,但是其受限于MPLS封装可扩展性不足等问题,无法很好地满足一些需要扩展报文头携带数据的新业务需求。而基于IPv6转发平面的SRv6不仅继承了SR-MPLS 网络的所有优点,还拥有比SR-MPLS更好的可扩展性。
SR-MPLS基于MPLS转发平面,通过MPLS标签标识SID。那么基于IPv6转发平面的SRv6(Segment Routing IPv6,基于IPv6转发平面的段路由),在没有了MPLS标签,又能用什么来标识SID呢?下面我们就来介绍SRv6与SR-MPLS在帧结构上做了哪些改变。
SR-MPLS
SRv6
从上图可以看出,SRv6在IPv6报文中插入了SRH扩展头来替代传统的MPLS标签转发功能,SRH扩展头存储的是IPv6的Segment List信息,其作用与SR-MPLS里的Segment List一样。
来源:华为