SR-MPLS
为什么需要MPLS?
在20世纪90年代中期,随着IP网络的快速发展,Internet数据量急剧增长。由于当时的硬件技术存在限制,基于最长匹配算法的IP技术必须使用软件方法查找路由,转发性能低下,所以IP的转发性能成为当时限制网络发展的瓶颈。在这种背景下,IETF提出了MPLS协议。MPLS最初的目的就是为了提升IP网络中路由设备的转发速率。
与传统的IP路由方式相比,MPLS通过以下两种方式提升转发速率:
- 将查找庞大的IP路由表转化为简洁的标签交换,显著减少指导报文转发的时间。
- 当报文进入MPLS区域之后,只需在位于边缘的入、出节点解析IP报文头,封装或解封装标签,而在中间的所有节点上都无需解析IP报文头,只进行标签交换,进一步节约了转发报文的处理时间。
后来,随着ASIC(Application Specific Integrated Circuit,专用集成电路)技术的迅速发展,IP路由表查找逐步改用硬件方法,处理速度大大提高,这使得MPLS在提高IP网络转发速率方面不再具备明显的优势。
但是,MPLS的标签转发本质上是一种隧道技术,它还支持封装多层标签,并且MPLS天然兼容多种网络层和链路层协议,因此,MPLS非常适合在各种VPN业务中充当公网隧道。此外,由于MPLS的报文转发依靠一条固定的标签交换路径,所以MPLS是一种面向连接的转发技术,这使得MPLS在流量工程(Traffic Engineering,TE)、QoS等领域也有着广泛的应用。
MPLS有哪些特征?
MPLS的基本概念有哪些?
想了解MPLS是什么,首先要知道MPLS的基本概念,下面介绍几个核心概念。
FEC
MPLS是一种分类转发技术,它将具有相同转发处理方式的数据分组归为一类,称为FEC(Forwarding Equivalence Class,转发等价类)。MPLS对相同FEC的数据分组采取完全相同的处理方式。
FEC的划分方式非常灵活,可以是源地址、目的地址、源端口、目的端口、协议种类、业务类型等要素的任意组合。例如,在采用最长匹配算法的IP路由转发中,去往同一个目的地址的所有报文就是一个FEC。
MPLS标签
MPLS标签是一个简短且长度固定的标识符,它只具有本地意义,用于唯一标识一个分组所属的FEC。在某些情况下(例如,进行负载分担)对应一个FEC可能会有多个MPLS标签,但是在一台设备上,一个MPLS标签只能代表一个FEC。
MPLS标签长度为4个字节,封装结构如下图所示。
MPLS标签封装结构
MPLS标签共有4个域:
-
Label:20bit,标签值域。
-
Exp:3bit,用于扩展。现在通常用做CoS(Class of Service,服务分类)。
-
BoS:1bit,栈底标识。MPLS支持多层标签,即标签嵌套。BoS值为1时表明为最底层标签。
-
TTL:8bit,和IP分组中的TTL(Time To Live)意义相同。
MPLS标签封装在链路层和网络层之间,它在报文分组中的封装位置如下图所示。MPLS标签能够被任意的链路层协议所支持。
MPLS标签的封装位置
MPLS标签栈(Label stack)也称为MPLS多层标签,是指MPLS标签的排序集合,如下图所示。靠近二层首部的标签称为栈顶标签或外层标签;靠近IP首部的标签称为栈底标签,或内层标签。MPLS标签栈按后进先出(Last In First Out)方式组织标签,从栈顶开始处理标签。
MPLS标签栈
标签操作
MPLS标签的基本操作包括标签压入(Push)、标签交换(Swap)和标签弹出(Pop),它们是标签转发的基本动作,是标签转发信息表的组成部分。
标签基本操作
MPLS标签的基本操作详解如下:
-
Push:指当IP报文进入MPLS域时,MPLS边界设备在报文二层首部和IP首部之间插入一个新标签;或者MPLS中间设备根据需要,在标签栈顶增加一个新的标签(即标签嵌套封装)。
-
Swap:当报文在MPLS域内转发时,根据标签转发表,用下一跳分配的标签,替换MPLS报文的栈顶标签。
-
Pop:当报文离开MPLS域时,将MPLS报文的标签去掉;或者MPLS倒数第二跳的节点处去掉栈顶标签,减少标签栈中的标签数目。
在最后一跳的节点上,MPLS标签实际已没有使用价值。这种情况下,可以利用PHP(Penultimate Hop Popping,倒数第二跳弹出)特性,在倒数第二跳的节点上就将标签弹出,这样最后一跳的节点可直接进行IP转发或者下一层标签转发,从而减少最后一跳的处理负担。
PHP特性是通过分配特殊的标签值3来实现的。标签值3表示隐式空标签(implicit-null),这个值不会出现在标签栈中。当倒数第二跳节点发现自己被分配了标签值3时,它并不用这个值替代栈顶原来的标签,而是直接执行Pop操作,使最后一跳节点直接进行IP转发或下一层标签转发。
LSP
LSP(Label Switched Path,标签交换路径)是指属于同一FEC的报文(即封装了MPLS标签的报文)在MPLS域内转发所经过的路径,如下图所示。
LSP示意图
LSP是一条从入口到出口的单向通道,包含以下角色:
-
LSP的起始节点称为入节点(Ingress),一条LSP只能有一个Ingress。Ingress的主要功能是给IP报文压入一个新的MPLS标签,将其封装成MPLS报文。
-
位于LSP中间的节点称为中间节点(Transit),一条LSP可能有0个或多个Transit。Transit的主要功能是查找标签转发信息表,通过标签交换完成MPLS报文的转发。
-
LSP的末尾节点称为出节点(Egress),一条LSP只能有一个Egress。Egress的主要功能是弹出标签,恢复成原来的报文进行相应的转发。
MPLS网络是什么样的?
MPLS网络的典型结构如下图所示。
MPLS网络结构示意图
MPLS网络主要包含以下要素:
- 支持MPLS功能的网络设备称为LSR(Label Switching Router,标签交换路由器),它是MPLS网络的基本组成单元。由一系列连续的LSR构成的网络区域称为MPLS域。
- MPLS域内部的LSR称为Core LSR,如果一个LSR的相邻节点都运行MPLS,则该LSR就是Core LSR。
- 位于MPLS域边缘、连接其它网络的LSR称为LER(Label Edge Router,标签边缘路由器),如果一个LSR有一个或多个不运行MPLS的相邻节点,那么该LSR就是LER。
在MPLS网络中,任何两个LER之间都可以建立LSP,用来转发进入MPLS域的报文,中间可途径若干个Core LSR。因此,一条LSP的Ingress和Egress都是LER,而Transit是Core LSR。
MPLS有什么价值?
MPLS在当前的IP网络中得到了广泛的应用,其主要价值体现在以下几方面:
- MPLS完全兼容IP网络,相当于在IP网络的基础上进行改进,建设成本低,易于推广。
- MPLS的控制平面和转发平面是分开的,在控制平面依靠IP路由来建立LSP,MPLS可以借用IP路由的各种灵活性、可靠性机制;在转发平面通过LSP来传输报文,是面向连接的,MPLS可以有效的实施流量工程和QoS。
- MPLS是一种与链路层协议无关的技术,它同时支持帧中继、ATM、PPP和SDH等协议,保证了多种网络的互通,兼容性非常好。
- MPLS网络支持层次化的拓扑结构,适合在IP骨干网中部署。
- MPLS标签栈在理论上可支持标签的无限嵌套,正好契合了VPN业务对公、私网标签多层封装的要求,因此MPLS为VPN业务的蓬勃发展提供了强有力的支持。
控制平面和转发平面
MPLS是如何工作的?
简单来说,MPLS的工作就是将进入MPLS域的报文正确地转发到目的地。MPLS的工作可以概括为两个过程:建立LSP、报文通过LSP转发。
MPLS是如何建立LSP的?
MPLS是一种依靠标签交换来指导转发的技术,因此,LSP的建立过程实际上就是沿途LSR为特定FEC确定标签的过程。
MPLS标签由下游分配,按照从下游到上游的方向进行分发。如下图所示,下游LSR根据IP路由的目的地址进行FEC划分,并将标签分配给对应指定目的地址的FEC,再将标签发送给上游LSR,触发上游LSR建立标签转发信息表,最终使一系列LSR形成一条LSP。
LSP的建立过程示意图
LSP按建立方式可以分为静态LSP和动态LSP两种:
- 静态LSP是管理员通过手工为各个FEC分配标签而建立的LSP。手工分配标签需要遵循的原则是:上游LSR出方向的标签的值等于下游LSR入方向的标签值。
- 动态LSP是各LSR通过标签发布协议动态的生成和发布标签而建立的LSP,下游LSR向上游LSR发送标签时需要依赖IP路由。MPLS支持多种标签发布协议,例如:LDP(Label Distribution Protocol)、RSVP-TE(Resource Reservation Protocol Traffic Engineering)和MP-BGP(Multiprotocol Border Gateway Protocol)。
报文是如何通过LSP转发的?
以支持PHP特性的LSP为例,MPLS报文在该LSP中的基本转发过程描述如下:
-
Ingress收到目的地址为192.168.1.1/24的IP报文,压入标签Y(Push),封装为MPLS报文并继续转发。
-
Transit收到该MPLS报文,进行标签交换(Swap),将标签Y换成标签X。
-
倒数第二跳的Transit收到该MPLS报文,因为Egress分给它的标签值为3,所以进行PHP操作,弹出标签X并继续将IP报文转发给Egress。
-
Egress节点收到该IP报文,将其转发给目的地192.168.1.1/24。
报文通过LSP转发的示意图
什么是MPLS VPN?
MPLS VPN是指利用MPLS在IP骨干网络上构建VPN的技术。VPN的实质就是在公网上像私有专用网一样传输业务数据,这就需要在公网上建立一条隧道,让数据报文通过隧道直达目的地,从而达到私有专用网络的效果。概括地讲,MPLS VPN就是采用MPLS建立的LSP作为公网隧道来传输私网业务数据的。
MPLS VPN的基本模型主要由以下三种角色构成:
-
CE(Customer Edge):用户网络边缘设备,有接口直接与服务提供商SP(Service Provider)网络相连,用户的VPN站点(Site)通过CE连接到SP网络。CE可以是网络设备,也可以是一台主机。通常情况下,CE“感知”不到VPN的存在,也不需要支持MPLS。
-
PE(Provider Edge):是服务提供商网络的边缘设备,与CE直接相连。在MPLS网络中,PE设备作为LSR,对MPLS和VPN的所有处理都发生在PE上,对PE性能要求较高。
-
P(Provider):服务提供商网络中的骨干设备,不与CE直接相连。在MPLS网络中,P设备作为LSR,只需要处理MPLS,不维护VPN信息。
MPLS VPN的基本模型
MPLS VPN充分利用了MPLS的技术优势,是目前应用最广泛的VPN技术。从用户角度来看,MPLS VPN具有如下价值:
- 一个MPLS标签对应一个指定业务的数据流(特定FEC),非常有利于不同用户业务的隔离。
- MPLS可以提供流量工程和QoS能力,用户可以借助MPLS最大限度地优化VPN网络的资源配置。
- MPLS VPN还能提供灵活的策略控制,满足不同用户的特殊要求,快速实现增值服务。
LDP基础以及工作原理
原文链接hcnp-mpls ldp配置与管理 - 峡谷万岁 - 博客园 (cnblogs.com);
LDP(Label Distribution Protocol,标签分发协议)是MPLS的一种最主要的控制协议,负责FEC的分类,MPLS标签的分配以及LSP的动态建立和维护。LDP规定了标签分发过程中的各种消息以及相关处理过程。通过LDP协议,LSR可以把网络层信息的路由信息直接映射到数据链路层的LSP交换路径上,实现网络层动态建立LSP。目前LDP广泛应用于VPN服务上,具有组网配置简单,支持基于路由动态建立LSP,支持大容量LSP。
LDP基本概念
LDP邻接体
当一台LSR接收到对端发送的Hello消息后,两端之间就建立了LDP邻接体关系也就是邻居关系,LDP邻接体存在两种类型:
本地邻接体:通过组播形式(目的IP地址为224.0.0.3,代表本地子网中所有路由器)发送Hello消息(称之为链路hello消息)发现的邻接体叫做本地邻接体。
远端邻接体:以单播形式发送helloi消息(称之为目标hello消息)发现的邻接体叫做远端邻接体。
LDP对等体
LDP对等体是指互相之间存在直接的LSP会话,可直接使用LDP会话,可直接使用LDP来交换标签映射消息(包括标签请求消息和标签映射消息)的两个LSR。在LDP对等体中,通过他们之间的LDP会话可获得下游对等体为某FEC分配的MPLS入标签,以此作为本端对应的FEC的出标签。LDP对等体之间可以是直连的也可以是非直连的。
LDP通过邻接体来维护对等体的存在,对等体的类型取决于维护他的邻接体的类型。一个对等体可以由多个邻接体来维护,如果同时包括本地邻接体和远端邻接体,则该对等体为本远共存对等体
LDP会话
LDP会话用于在LSR之间交换标签映射,释放会话等消息。只有存在邻接体的两端对等体之间才能建立LDP会话。区分于本地邻接体和远端邻接体,在这两类邻接体之间建立的LDP会话也对应分为两种类型:
本地LDP会话:建立会话的两个LSR之间是直连的本地邻接体关系
远端LDP会话:建立会话的两个LSR之间可以是直连的本地邻接体关系,也可以是非直连的远端邻接体关系
本地LDP会话和远端LDP会话可以共存,也就是一个对等体上可以同时创建与直连对等体的会话以及非直连的对等体会话。
LPD会话消息和两个阶段
LDP会话消息
在LDP会话过程中,主要使用以下4类消息:
发现(discovery)消息:用于通告和维护网络中LSR的存在。比如hello消息。
会话(session)消息:用于建立,维护,终止LDP对等体之间的会话,如:Initialization(初始化)消息,Keepalive(保持活跃)消息。
通告(Advertisement)消息:用于创建,改变和删除FEC的标签映射,如标签映射消息
通知(Notification)消息:用于提供建议性的消息和差错通知
为保证LDP消息的可靠发送,除了Discovery消息使用UDP传输外,LDP的session消息,Advertisement消息,Notification消息都使用TCP传输。
Hello消息都是用UDP协议传输,源/目的端口都为646
在LDP会话,通告,通知消息中,主动方(对等体之间IP地址大的一方)发送的消息中的源端口为任意TCP端口,目的端口为TCP 646;被动方发送的消息中的源端口为TCP 646,目的端口为任意TCP端口。
LDP的两个工作阶段
LDP工作过程主要分为两个阶段:现在对等体之间建立LDP会话,然后才能在对等体之间建立LSP
LDP会话建立
在这个过程中LSR设备通过发送Hello消息来发现邻接体,然后在LSR之间建立LDP会话。会话建立后,LDP对等体之间通过周期性的发送Hello消息和Keepalive消息来保持这个会话
LDP对等体之间,通过周期性的发送Hello消息表明自己希望继续维持这种邻接关系。如果Hello保持定时器超时仍未收到对端发送来的新的Hello消息,则会删除他们之间的邻接关系,然后本端LSR想对端发送Notification消息,结束它们之间的LDP会话。
LDP对等体之间,通过LDP会话连接传送的Keepalive消息来维持LDP会话。如果会话保持定时器(Keepalive保持定时器)超时仍没有收到对端发送来的新的Keepalive消息,则本端LSR将向对端发送Notification消息,关闭它们之间的TCP连接,结束LDP会话。
LDP LSP建立
LDP会话建立成功后,LDP通过发送标签请求和标签映射消息,在LDP对等体之间通告FEC和标签的绑定关系,从而建立LSP。
LDP会话建立流程
通过LDP发现机制发现LDP对等体之后,就可以在对等体之间建立LDP会话,只有建立LDP会话后,才能建立LDP LSP来承载业务
LDP发现机制
LDP有两种用于LSR发现潜在的LDP对等体的机制
基本发现机制:用于发现直连链路上的LSR。LDP基本发现机制是LSR通过周期性的以组播方式发送LDP链路Hello消息(LDP Link Hello)进行的,发现的是直连链路上的LDP对等体,并与之建立本地LDP会话。LDP链路Hello消息使用UDP协议传输,目的IP地址是组播地址224.0.0.2,源/目的端口均为UDP 646。如果LSR在特定接口接收到邻居LSR发送来的LDP链路Hello消息,表明该接口存在LDP对等体。
扩展发现机制:用于发现非直连链路上的LSR。扩展发现机制是LSR周期性的以单播方式发送LDP目标Hello消息(LDP Targeted Hello)到指定IP地址进行的,发现的是非直连链路上的LDP对等体,并建立远端LDP会话。LDP目标Hello消息也使用UDP协议传输,目的IP地址是指定的对端单播IP地址,源/目的端口均为UDP 646.
LDP会话建立过程
在LSR之间建立LDP会话的过程总体可以划分三个阶段:第一阶段是通过交互Hello消息,相互建立TCP链接;第二阶段是通过交互LDP会话初始化消息(Initiazation Message),协商会话参数;第三阶段是相互交互Keepalive消息,建立LDP会话。
(1)两个LSR之间互相发送Hello消息,基于不同发现机制采用不同的发送方式。双方使用Hello消息‘源IP地址’字段中填充的IP地址(称之为传输地址)进行LDP会话建立
(2)传输地址较大的一方作为主动端,发起建立TCP链接。
(3)TCP链接建立成功后,首先由主动方LSR_1向被动方LSR_2发送初始化消息(源端口任意,目的端口为TCP 646),协商建立LDP会话的相关参数。初始化消息中包括LDP会话的相关参数,比如LDP协议版本,会话标签分发方式,Keepalive保持定时器,会话环路检测,最大PDU,会话接收方LSR ID,会话接收方标签空间。
(4)被动方收到主动方发送来的初始化消息后,如果接受相关初始化参数,则自己也向主动方发送初始化消息(包含的内容与前文相同)和Keepalive消息。Keepalive消息中主要包括消息类型(Message Type),消息长度(Message Length),消息ID。如果被动方不接受相关初始化参数,则发送Notification消息终止LDP会话的建立
(5)主动方收到被动方初始化消息和Keepalive消息后,如果接受则向被动方发送Keepalive消息和地址消息(Address Message)。地址消息是仅当双方通过初始化消息最终协商采用DU(下游自主方式)标签发布方式时双方才进行交互,以便向对方通告本地直连的32位掩码IP地址和启用了LDP协议的接口IP地址。如果主动方不接受相关参数,则发送Notification终止LDP会话建立。
当双方都收到对端的Keepalive消息后,LDP会话建立成功。但是如果双方协商采用的是DU标签发布方式,则在主动端发了地址消息后,被动端也会专门发送一个地址消息给主动端。
LDP的标签发布和管理
LDP通过发送标签请求和标签映射消息,在LDP对等体之间通告FEC和标签的绑定关系来建立LSP。而标签的发布和管理由标签发布方式,标签分配控制方式和标签保持方式来决定。
标签发布方式
标签发布方式是指是否要等到上游向自己发送某FEC的标签请求消息才向上游发送该FEC的标签映射消息,并为之分配出标签。具有邻接关系的上下游LSR必须对所使用的标签发布方式达成一致。有如下两种方式。
下游自主方式(DU):对于一个特定的FEC,LSR无需从上游LSR获得标签请求消息即可自主进行标签分配和发布。即不管上游设备是否向本设备发出了标签请求,本设备在学习了新的FEC后可立即向上,下游对等体(注意:会向所有对等体发送,不仅限向上游对等体发送)发送该FEC的标签映射消息。
如下图示,各LSR上均配置DU方式,对于目的地址192.168.1.1/32的FEC,Egress会通过标签映射消息主动向其上游Transit通告该FEC的入标签。Transit再利用标签映射消息主动向上,下游通告192.168.1.1/32的FEC的入标签。但是向下游通告的标签映射消息不会生效。
华为路由器默认为DU模式,DU方式最大优势是简单,无需上游设备请求。但是这样会带来一个问题:一台设备上可能收到多个基于同一个FEC的相同或不同的出标签,因为可能有多个对等体(也有到达同一目的主机的路由表项)向其分配基于同一FEC的出标签。但同一时刻只有一个标签映射是有效的。
下游按需方式(DoD):对于一个特定的FEC,LSR只有在获得上游LSR发送的标签请求消息后才会向上游设备(不会向下游设备)发送标签映射消息,进行标签分配。
如下图示,各LSR均配置DoD方式,对于目的地址192.168.1.1/32的FEC,如果最上游的(Ingress)向其下游(Transit)发送标签请求消息,如果此时Transit还没有获取该FEC的出标签,则不会向Ingress发送分配标签的标签映射消息。以此类推,直到Egress向其上游设备发送标签映射消息。
DoD方式在节点向下游节点请求标签时会带来一些延时,但可以真正的按需获取每个FEC的标签,使得各LSR上不会出现太多无用的标签映射。
标签分配控制方式
标签分配控制方式是指是否要等到下游向自己发送了某FEC的标签映射消息才为该FEC分配入标签,并向上游发送该FEC的标签映射消息。有如下两种方式。
独立标签分配控制方式(Independent):本地LSR可以自主的分配一个入标签绑定到某个FEC,然后向上游LSR进行标签通告,为上游LSR分配对应FEC的出标签,而无需等待下游LSR给本地LSR分配该FEC的出标签。
这种分配控制方式下,LSR在路由表中发现一个路由(对应一个FEC)后,就会马上为该FEC分配一个标签,然后向上游LSR进行通告,根本无需考虑下游LSR是否已为该FEC分配了标签。这样就可能会因为下游LSR还没有为该FEC分配标签,没有成功建立该FEC的LSP,使其上游LSR即使已为该FEC分配了标签,建立了LSP,也无法与目的主机通信,造成数据丢失。
有序标签分配控制方式(Ordered):对于LSR上某个FEC的标签映射,只有当该LSR已经从其下一跳收到了基于此FEC的标签映射消息后,或者该LSR就是此FEC的出节点时,该LSR才可以为此FEC分配入标签,然后向上游LSR发送此FEC的标签映射。
标签分配控制方式与标签发布方式的组合
标签保持方式
标签保持方式是指LSR对收到的标签映射消息的处理方式,LSR收到的标签映射可能来自下一跳(本地对等体),也可能来自非下一跳(远端对等体)
目前华为设备支持如下组合方式:
下游自主(DU)+有序标签分配控制方式(Ordered)+自由标签保持方式(Liberal),该方式为缺省方式。即LSR在收到下游标签映射后,可自主向其上游分配标签,且收到的标签全部保留。
下游按需方式(DoD)+有序标签分配控制方式(Ordered)+保守标签保持方式(Conservative)。即LSR在同时收到上游标签请求和下游标签映射后,才向上游分配标签,且只保留自己下一跳分配的标签。
LDP LSP的建立过程
LSP的建立过程实际就是将FEC和标签进行绑定。并将这种绑定通告给LSP上游相邻LSR的过程。
LDP LSP建立的基本规则
(1)入标签的分配是按照由小到大(最小值为1024)的顺序分配的,分配当前未分配的最小标签
(2)同一链路上游设备为FEC分配的入标签一定要与下游设备为该FEC分配的出标签一致
(3)同一台设备上针对同一FEC所分配的出标签可能有多个(它们之间可以相同,也可不同),分别来自不同下游对等体,也就是一个FEC可以映射多个出标签和出接口。
(4)在一台设备上针对同一FEC只会分配一个入标签
每个路由表象都对应一个FEC,缺省时,通过标签映射消息的通告,每个FEC都可能会在整个MPLS域网络的所有节点上(包括本地设备)建立LSP。就像动态路由进行全网路由收敛一样。
LSP建立规则(缺省仅为32位掩码的主机路由分配标签)
(1)在直接连接某FEC对应的网段(缺省仅为32位掩码的主机路由)的节点上会为该FEC仅创建一个包含入标签的LSP(无出标签,也无入/出接口)
(2)在其他节点上都会对非直连网段FEC同时创建两个LSP:其中一个是用于指导从本地节点访问FEC所代表的目的主机的LSP,仅包含出标签和出接口;另一个则是以本地节点为中间节点(Transit)的LSP,用于指导上游设备访问FEC所代表的目的主机,同时包括入标签,出标签和出接口。
注意:cisco设备默认基于FIB表中所有学习到的路由条目生成标签号,华为设备默认仅基于FIB表中32位掩码的主机路由生成标签号;原因在于正常32位主机路由为ospf学习的环回接口,正常工程中只有BGP和MPLS VPN才会基于环回通讯,使用标签转发;其他普通流量还是基于特快包交换来进行;反观cisco在启动mpls以后,所有流量将基于标签转发,降低了转发效率(前提为默认)
SDN主要有3大特征:网络开放可编程、逻辑上的集中控制、控制平面与转发平面分离。符合这3大特征的网络都可以称为SDN。网络业务种类越来越多,不同类型业务对网络的要求不尽相同,例如,视频直播等应用程序通常更喜欢低时延的路径,而物联网应用则更需要高带宽通道。由业务来定义网络的架构。具体说来,就是由应用提出需求(时延、带宽、丢包率等),控制器收集网络拓扑、带宽利用率、时延等信息,根据业务需求计算显式路径,网络实时动态调整,快速满足业务变化需求。SR技术在此背景下产生,能同时支持传统网络和SDN网络,兼容现有设备,保障现有网络平滑演进到SDN网络。
SR-MPLS(Segment Routing MPLS,基于MPLS转发平面的段路由)是基于源路由理念而设计的在网络上转发数据包的一种协议。SR-MPLS的核心思想是将报文转发路径切割成不同的段,再为其分配SID(Segment Identifier,段标识符),然后通过在路径的起始点往报文中封装分段信息的方式来指导报文转发。MPLS(Multi-Protocol Label Switching,多协议标签交换)是一种工作在二层与三层之间的数据转发技术,虽然MPLS因其标签交换的思想使其转发平面广受好评,但是MPLS控制平面协议复杂、扩展性差、部署维护困难。SR-MPLS既保留了传统MPLS网络的优点,又解决传统网络的困局。SR-MPLS控制层面采用ISIS/OSPF/BGP等路由协议,转发层面采用MPLS,都是很常用的协议。可以在头端节点控制流量要转发的路径,这样就实现了基于源的路由,传统IP转发是逐跳基于目的IP进行路由。相比较,SR-MPLS控制流量转发的方法更加简单高效,管理成本大大降低。
Segment就是标签,Segment列表就是标签栈,MPLS设计之初就支持多层标签。SID表示Segment ID,用来标识SR域内唯一的段。在转发层面,可以映射为MPLS标签。SID分为3类,分别是Prefix SID、Node SID、Adjacency SID。路由协议把这些标签通告到整个网络,网络中每个节点都知道区域中所有的Segment。因此SR能够方便的控制数据的中间转发路径,控制从网络中的哪个节点的哪个接口转发。
- Prefix SID,也可称之为前缀标签,是针对目的地址前缀映射的标签。
- Node SID,也可称之为节点标签,是为网络设配分配的标签。
- Adjacency SID,也可称之为邻接标签,表示设备上某条链路的单跳路径,仅在设备本地有效。每个设备向与自己相邻一跳的设备通过IGP扩展通告邻接标签。当然,也可以通过SDN控制器直接为SR域内的每条链路进行标签分配。
LSP(Segment Routing Label Switched Path):以标签作为SID对报文进行段路由转发,报文所经过的路径称为LSP。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 LSP,这种方式能更好的配合实现SDN。另外对于严格指定的显式路径又称之为严格路径,这是SR-MPLS TE隧道的其中一种形式。在实际应用中Prefix SID、Node SID、Adjacency SID可以单独使用,也可以结合使用,还可以基于Adjacency SID + Node SID建立转发路径。通过Adjacency SID,可以强制整条路径包含某一个邻接。而对于Node SID,节点可以使用SPF算法计算最短路径,也可以负载分担。这种方式的路径并不是严格固定,所以也称作松散路径,这是SR-MPLS TE隧道的另一种形式。