1.SRv6概述
SRv6是基于源路由理念而设计的在网络上转发IPv6数据包的一种协议。SRv6通过在IPv6报文中插入一个路由扩展头SRH(Segment Routing Header),在SRH中压入一个显式的IPv6地址栈,并由中间节点不断的进行更新目的地址和偏移地址栈的操作来完成逐跳转发。
2.SRH扩展头
关键信息有几部分:
1.扩展头中的Routing Type=4表示是Segment Routing Header (SRH)
2.Segment List(Segment List[0], Segment List[1], Segment List[2]....Segment List[n])是网络路径信息
3.Segment Left是一个指针,指向当前活跃的Segment
3.SRv6 SRH 的处理过程
在 SRv6 的 SRH 里,Segment Left(SL)和 Segments List 信息共同决定报文头部的 IPv6 目的地址。
4.SRv6 SID 结构
SRv6 SID 是 IPv6 地址形式,但也不是普通意义上的 IPv6 地址。
SRv6 SID格式由locator,function,arguments三部分组成 格式为locator:function:arguments,argument是可选字段,如果没有argument字段,则格式为locator:function
Locator 用于定位,所以一般要在 SRv6 域内唯一,节点配置 Locator 之后,系统会生成一条 Locator 网段路由,并且通过 IGP 在 SRv6 域内扩散。网络里其他节点通过 Locator 网段路由就可以定位到本节点,同时本节点发布的所 有 SRv6 SID 也都可以通过该条 Locator 网段路由到达。
function用来标识执行转发动作标识某个目的节点,转发动作是更新ipv6的DA,查找ipv6进行报文转发
Arguments 占据 IPv6 地址的低比特位,通过Arguments 字段可以定义一些报文的流和服务等信息。
End SID 表示 Endpoint SID,用于标识网络中的某个目的节点(Node)。如图所示,在各个节点上配置 Locator,然后为节点配置 Function 的 Opcode,Locator 和 Function 的 Opcode 组合就能得到一个 SID,这个 SID 可以代表本节点,我们称 为 End SID。End SID 可以通过 IGP 协议扩散到其他网元,全局可见。
End.X SID 表示三层交叉连接的 Endpoint SID,用于标识网络中的某条链路。如图所示,在节点上配置 Locator,然后为各个方向的邻接配置 Function 的 Opcode,Locator 和 Function 的 Opcode 组合就能得到一个 SID,这个 SID 可以代 表一个邻接,我们称为 End.X SID。End.X SID 可以通过 IGP 协议扩散到其他网元, 全局可见。
5.SRv6 常用 SID
End:表示 Endpoint SID,用于标识网络中的某个目的节点。对应的转发动作是更新 IPv6 DA,查找 IPv6 路由表进行报文转发
End.X:标识某条链路,转发动作是更新ipv6的DA,从End.X SID绑定的出接口进行报文转发
End.DT4:标识网络中某个ipv4 VPN实例。转发动作是解封装报文,查找ipv4 VPN实例路由表转发
End.DT6:标识网络中某个ipv6 VPN实例。转发动作是解封装报文,查找ipv6 VPN实例路由表转发
End.DX4:表示 PE 类型的三层交叉连接的 Endpoint SID,用于标识网络中的某 个 IPv4 CE。对应的转发动作是:解封装报文,并且将解封后的 IPv4 报文在该 SID 绑定的三层接口上转发。End.DX4 在 L3VPNv4 场景使用,等价于连接到 CE 的邻接标签。
End.DX6:表示 PE 类型的三层交叉连接的 Endpoint SID,用于标识网络中的某 个 IPv6 CE。对应的转发动作是:解封装报文,并且将解封后的 IPv6 报文在该 SID 绑定的三层接口上转发。End.DX6 SID 在 L3VPNv6 场 景使用,等价于连接到 CE 的邻接标签。
6.本地 SID 表
使能 SRv6 的节点维护一个本地 SID(Local SID)表,该表包含所有在本节点生 成的 SRv6 SID 信息,根据该表可以生成一个 SRv6 转发表(Forwarding Information Base,FIB)。
本地 SID 表有以下用途:
定义本地生成的 SID,例如 End.X SID 等。
指定绑定到这些 SID 的指令。
存储和这些指令相关的转发信息,例如出接口和下一跳等。
7.SRv6 的三重编程空间
1. SRv6 SID 可以自由组合进行路径编程,由业务提出需求,控制器响应业务需求,定义转发路径。
2.Function 和 Arguments 字段可以自定义功能。Function 可以由设备商定义,比如数据包到达 SRv6 尾节点后,利用 Function 指示节点将数据包转发给某个 VPN 实例;Function 在未来也可以由用户来定义,比如数据包到达 SRv6 节点 后,指示节点将数据包转发给某个 APP。由于 Linux 系统支持 SRv6,所以未来 基于 Linux 系统进行创新,定义不同的 Function。
3.SRH 里还有可选 TLV,可以用于进一步自定义功能。
9.SRv6 如何通过协议扩展实现
为了支持 SRv6,网络节点需要发布两类 SRv6 信息:
1. Locator 信息:Locator 信息用于帮助网络中的其他节点定位到发布 SID 的节 点,然后由该节点执行 SID 的指令。域内 Locator 信息一般需要通过 IGP 扩展来 泛洪。
2. SID 信息:SID 信息用于完整描述 SID 的功能,比如 SID 绑定的 Function 信息。 SID 信息包括路径类 SID 和业务类 SID,都是全局可见,本地有效的。路径类 SID 主要描述节点或者链路,需要通过 IGP 扩展来进行泛洪;而业务类 SID 和路由信息强相关,一般通过 BGP 扩展来发布,携带在 BGP 的 Update 报文里。 综合以上,实现 SRv6 的基础功能至少需要 IGP 扩展和 BGP 扩展。
IGP 扩展
IS-IS 通过两个 TLV 来发布 Locator 的路由信息,这两个 TLV 具有不同的作用:
1. SRv6 Locator TLV:该 TLV 包含 Locator 的前缀和掩码,用于发布 Locator 前 缀。通过该 TLV,网络中其他 SRv6 节点能学习到 Locator 路由;Locator TLV 除了携带用于指导路由的信息外,还会携带不需要关联 IS-IS 邻居节点的 SRv6 SID,例如 End SID。
2. Multi Topology Reachable IPv6 Prefixes TLV:该 TLV 携带的 IPv6 Prefix 与 SRv6 Locator TLV 里携带的 Locator 信息拥有相同的前缀和掩码。Multi Topology Reachable IPv6 Prefixes TLV 是 IS-IS 协议已有的 TLV,普通 IPv6 节 点(不支持 SRv6 的节点)也能处理该 TLV。因此普通 IPv6 节点也能够通过此 TLV 生成 Locator 路由,指导报文转发到发布该 Locator 的节点,进而支持与 SRv6 节点共同组网。 如果设备同时收到 Multi Topology Reachable IPv6 Prefixes TLV 和 SRv6 Locator TLV,则 Multi Topology Reachable IPv6 Prefixes TLV 优先使用。
一个常见的携带 SRv6 信息的 IS-IS LSP 结构如图所示。
BGP 扩展
BGP 扩展包括 MP-BGP 和 BGP EVPN。L2VPN 和 L3VPN 的业务 SID 都需要通 过 BGP Update 来发布。
一个常见的携带 SRv6 信息的 BGP EVPN Update 结构如图所示。
10.SRv6 高可靠性
SRv6 独有的本地保护技术主要有 TI-LFA (Topology-Independent Loop-free Alternate,拓扑无关的无环路备份路径)和中间 节点保护等,利用这些技术可以极大地提高保护成功率,增强 IP 承载网的可靠性。
8.SRv6两种工作模式
8.1 SRv6 TE Policy
SRv6 TE Policy原理及流程
SRv6 TE Policy通过在Segment List里封装一条有序的路径来指导报文穿越网络。SRv6 TE Policy 的思想就是一个导航地图的工作过程。
SRv6 TE Policy 的工作流程主要也可以概括为 5 个步骤
1. 转发器将网络拓扑信息通过 BGP LS 上报给网络控制器。拓扑信息包括节点(类 比交叉路口)、链路信息(类比道路),以及链路的开销(类比流速)、带宽 (类比车道)和时延(类比信号灯)等 TE 属性。
2. 控制器基于收集到的拓扑信息,按照业务需求计算路径,符合业务的 SLA。
3. 控制器通过 BGP SR-Policy 扩展将路径信息下发给网络的头节点,头节点生成 SRv6 TE Policy。生成的 SRv6 TE Policy 包括头端地址、目的地址和 Color 等关 键信息。
4. 网络的头节点为业务选择合适的 SRv6 TE Policy 指导转发。
5. 数据转发时,转发器需要执行自己发布的 SID 的指令。
可以看出,通过在 SRH 中封装一系列的 SRv6 SID,可以显式指导报文 按照规划的路径转发,实现对转发路径端到端的细粒度控制,满足业务的低时延、大 带宽、高可靠等 SLA 需求。
SRv6 TE Policy 的结构和优势
SRv6 TE Policy 结构包括以下三个要素:
1. 头端(Headend):SRv6 TE Policy 生成的节点。
2. 颜色(Color):SRv6 TE Policy 携带的扩展团体属性,携带相同 Color 属性的 BGP 路由可以使用该 SRv6 TE Policy。
3. 尾端(Endpoint):SRv6 TE Policy 的目的地址。
SRv6 TE Policy 的结构具有如下优势:
1. 灵活引流:Color 和 Endpoint 信息通过配置添加到 SRv6 TE Policy,业务网络头端通过路由携带的 Color 属性和下一跳信息来匹配对应的 SRv6 TE Policy 实现业务流量转发。Color 属性定义了应用级的网络 SLA 策略,可基于特定业务 SLA 规划网络路径,实现业务价值细分,构建新的商业模式。
2. 可靠性高:一个 SRv6 TE Policy 可以包含多个候选路径(Candidate Path)。候选路径携带优先级属性(Preference)。优先级最高的有效候选路径作为 SRv6 TE Policy 的主路径,优先级次高的有效候选路径作为 SRv6 TE Policy 的备路径。
3. 负载分担:一个候选路径可以包含多个Segment List,每个 Segment List 携带 Weight 属性。每个 Segment List 都是一个显式 SID 栈,Segment List 可以指示网络设备转发报文。多个 Segment List 之间可以形成等价或非等价负载分担 (ECMP/UCMP)。
8.2 SRv6 TE Policy 的业务实现
SRv6 TE Policy 可以承载常见的传统业务,它们的转发过程都比较类似。下面以 EVPN L3VPNv4 over SRv6 TE Policy 为例介绍 SRv6 TE Policy 的业务实现。
1.控制器向头节点 PE1 下发 SRv6 TE Policy,Color 为 123,Endpoint 为 PE2 的地址 2001:DB8:40::4,只有一个 Candidate Path,且 Candidate Path 也只包含一 个 Segment List 。
2. 尾节点 PE2 向 PE1 发布 BGP EVPN 路由 10.2.2.2/32,BGP 路由的下一跳是 PE2 的地址 2001:DB8:40::4/128,Color 为 123。
3. PE1 在接收到 BGP 路由以后,利用路由的 Color 和下一跳迭代到 SRv6 TE Policy。
4. PE1 接收到 CE1 发送的普通单播报文后,查找 VPN 实例路由表,该路由迭代到 了一个 SRv6 TE Policy。PE1 为报文插入 SRH 信息,封装 SRv6 TE Policy 的 Segment List,Segment List 里最后一个 SID 是 VPN 路由对应的 End.DT4 SID,同时封装 IPv6 报文头信息,并查表转发。
5. 中间 P1 和 P2 节点根据 SRH 信息逐跳转发。
6. 报文到达 PE2 之后,PE2 使用报文的 IPv6 目的地址 2001:DB8:4::1 查找本地 SID 表,命中了 End SID,所以 PE2 将报文的 SL 减 1,IPv6 DA 更新为 VPN SID 2001:DB8:4::100。
7. PE2 使用 VPN SID 2001:DB8:4::100 查找本地 SID 表,命中了 End.DT4 SID, PE2 执行 End.DT4 SID 的指令,解封装报文,去掉 SRH 信息和 IPv6 报文头,使用内层报文的目的地址查找 End.DT4 SID 2001:DB8:4::100 对应的 VPN 实例路由表,然后将报文转发给 CE2。
8.2 SRv6 BE
SRv6 BE的原理及流程
SRv6 BE 的报文封装没有代表路径约束的 SRH,其格式与普通 IPv6 报文格式一致,转发行为也与普通 IPv6 报文转发一致,这就意味着普通的 IPv6 节点也可以处理 SRv6 BE 报文。
SRv6 BE 的报文封装与普通 IPv6 报文封装的不同点在于:普通 IPv6 报文的目的 地址是一个主机或者网段,但是 SRv6 BE 报文的目的地址是一个业务 SID。业务 SID可以指引报文按照最短路径转发到生成该 SID 的父节点,并由该节点执行业务 SID 的 指令。
L3VPN over MPLS 时一般使用两层 MPLS 标签,外层 MPLS 标签用来引导报文 到指定的 PE,内层 MPLS 标签属于业务标签,一般标识 PE 上的某个 VPN 实例。在 L3VPN over SRv6 场景,一个 SRv6 的业务 SID 即可做到两层 MPLS 标签的功能。如图所示,业务 SID 2001:DB8:3::C100 的 Locator 部分是 2001:DB8:3::/64, Function Opcode 是::C100。Locator 2001:DB8:3::/64 具有路由功能,可以将报文引导到对应的 PE;Function Opcode ::C100 是在 PE 上配置的本地功能,可以标识 PE 上的业务,比如某个 VPN 实例,这也是 SRv6 SID 融合了路由和 MPLS(标签代表业务)能力的具体体现。
SRv6 BE 的优势
SRv6 BE 只需要在网络的头尾节点部署,中间节点仅支持 IPv6 转发即可,这种方式对于部署普通 VPN 具有独特的优势。比如视频业务在省中心和市中心之间传递,需要跨越数据中心网络、城域网络、国家 IP 骨干网络,在传统方式部署 MPLS VPN 时,不可避免地需要跟省干、国干的主管单位进行协调,各方配合执行部分操 作才能成功,开通时间比较慢,错失很多商业机会;但是采用 SRv6 BE 承载 VPN, 只需要在省中心和市中心部署两台支持 SRv6 VPN 的 PE 设备,很快就开通了业务, 这种方式显然更容易抓住商业机会。
SRv6 BE 的业务实现
SRv6 BE 可以承载常见的传统业务,它们的转发过程都比较类似。下面以 EVPN L3VPNv4 over SRv6 BE 为例介绍 SRv6 BE 的业务实现。
在路由发布阶段:
1. PE2 上配置 Locator,然后PE2 通过 IGP 协议将 SRv6 SID对应的 Locator 网段路由 2001:DB8:3::/64 发布给 PE1。PE1 安装路由到自己的 IPv6 路由表。
2. PE2 在 Locator 范围内配置 VPN 实例的 End.DT4 SID 2001:DB8:3::C100,生成 本地 SID 表。
3. PE2 收到 CE2 发布的私网 IPv4 路由后,PE2 将私网 IPv4 路由转换成 IP Prefix Route 形式的 EVPN 路由,通过 BGP EVPN 邻居关系发布给 PE1。此路由携带 SRv6 VPN SID 属性,也就是 VPN 实例的 End.DT4 SID 2001:DB8:3::C100。
4. PE1 接收到 EVPN 路由后,将其交叉到对应的 VPN 实例 IPv4 路由表,然后转换 成普通 IPv4 路由,对 CE1 发布。
在数据转发阶段:
1. CE1 向 PE1 发送一个普通 IPv4 报文。
2. PE1 从绑定了 VPN 实例的接口上收到私网报文以后,查找对应 VPN 实例的 IPv4 路由转发表,匹配目的 IPv4 前缀,查找到关联的 SRv6 VPN SID 以及下一跳信 息。然后直接使用 SRv6 VPN SID 2001:DB8:3::C100 作为目的地址封装成 IPv6 报文。
3. PE1 然后按照最长匹配原则,匹配到路由 2001:DB8:3::/64,按最短路径转发到 P 设备。
4. P 设备按照最长匹配原则,匹配到路由 2001:DB8:3::/64,按最短路径转发到 PE2。
5. PE2 使用 2001:DB8:3::C100 查找本地 SID 表,匹配到 End.DT4 SID 对应的转发 动作,将 IPv6 报文头去除,然后根据 End.DT4 SID 匹配 VPN 实例,查找 VPN 实例 IPv4 路由表进行转发。