Segment Routing
作者,乾颐堂安德
本课程内容来源:
思科官网、Google、Segment Routing详解(第一卷)
通过本文档,您会学到如下内容:
1.SDN时代的网络基础架构革命(简介)
2.SR的控制层面
3.SR的数据转发层面
4.SR的全局块(SRGB)
5.SR在数据中心网络中的部署演示(基于IOS XRv)
6.迁移到Segment Routing
免费视频连接:http://edu.51cto.com/course/13320.html
你能在这里找到我,思科群:529468183;华为群:645866695
什么是segment routing(SR)
SR架构基于源路由。节点(路由器、主机或设备)选择路径,并且引导数据包沿着该路径通过网络,做法是在数据报头中插入带顺序的段列表,以指示接收到这些数据包的节点怎么去转发和处理这些数据包
Segment: 指令类型的标识符或字段
– 表示转发或服务
段标识(Segment ID)
–SID用于标识segment,其格式取决于实现SID格式的例子,包括:MPLS(多协议标签交换)标签、MPLS标签空间的索引或者IPv6地址等。很多时候SID和segment混用过
Segment Routing的优势
协议栈瘦身:
无需再使用LDP、RSVP等负载的标签分发协议,也无需担心LDP和IGP同步、LDP对负载均衡支持力度不够等问题
更具备实施、排错优势的FRR(快速重路由)
自动50ms保护
易于操作和理解
关键业务选取低时延路径(少量segment就可以指示一条显式路径)
对SDN和OpenFlow的影响(可以预期的SRTE, SRTE是一种集中式和分布式混合的模式,即在控制器和网络设备之间进行协同,控制器要做的就是用segment列表来表达它想要的路径)
在一个分布式信令方案中,每台路由器就像一个坐在桌子边的小孩,而带宽就如同桌子中间的一堆糖果。所有的孩子都在争抢糖果(路由器在争夺带宽资源),如果没有老师指示和协调这种争抢就没办法保证每个小孩子得到自己喜欢的味道或者对健康有帮助的糖果。
SRTE是一种集中式和分布式混合的模式,即在控制器和网络设备之间进行协同,控制器要做的就是用segment列表来表达它想要的路径
Global Segment和local Segment
全局(global)Segment
– SR域的任一节点都明白该Segment的相关指令
– SR域的每个节点的转发表中都安装了该Segment相关指令(到达目的地的最短路径)
– 在MPLS SR中: 为段路由全局块(SRGB)中的全局标签值
本地(local)Segment
– 只有该Segment的始发节点明白它的相关指令
– 在MPLS SR中: 为本地分发的标签
SR的控制层面
通常使用路由协议在网络中分发段信息,支持的协议包括ISIS、OSPF和BGP协议。
IGP分发的段称之为IGP segment
BGP分发的段称之为BGP segment
预期未来将有更多类型的Segment
IGP segment和IGP 前缀segment
IGP段分为IGP前缀segment和IGP邻接segment
--使用链路状态协议通告和分发,这表明IGP网络中的所有节点都能接收到IGP segment
IGP 前缀segment,也称为prefix-SID,即由路由协议通告的全局的Segment(用标签关联一个32位前缀是最通常的用法)。
通过IGP 为1.1.1.4/32在域内通告了一个全局标签16004,它指示如何到达1.1.1.4的路径
• 标签 = 16000 + 索引,16004=16000+4
关于IGP邻接段(adj segment或者AJD-SID)
用数字来表明邻居!
引导流量由与该segment关联的邻接链路转发出去(不一定是否是最短路径)
从路由器的某个接口转发流量出去。如图
不一定是否是最短路径,表明可能是显式路径。邻接segment通常为本地段。
进入下一部分,数据转发层面
Segment routing的数据转发层面
SR使用MPLS数据层面承载IPv4和IPv6数据报文。
– Segment->MPLS 标签
– Segment list->标签堆栈
SR遵循了MPLS的一系列动作(压入、交换、弹出、PHP、显式空)
注: local label 16004 labels imposed {16004}
local label 16004 labels imposed {ImplNull}
但卷一描述,段列表对应的行为是压入,继续(continue)和下一个(next)
MPLS数据平面操作– push(压入) 标签
RP/0/0/CPU0:R1#show cef 44.1.1.1 detail
Thu Apr 12 16:59:04.601 UTC
44.1.1.1/32, version 21, internal 0x1000001 0x81 (ptr 0xa13d82f4) [1], 0x0 (0xa13a37c4), 0xa28 (0xa16b107c)
Updated Apr 12 15:29:37.079
local adjacency 12.1.1.2
Prefix Len 32, traffic index 0, precedence n/a, priority 1
via 12.1.1.2/32, GigabitEthernet0/0/0/0, 7 dependencies, weight 0, class 0 [flags 0x0]
path-idx 0 NHID 0x0 [0xa10b1250 0x0]
next hop 12.1.1.2/32
local adjacency
local label 16004 labels imposed {16004} //压入标签
via 13.1.1.3/32, GigabitEthernet0/0/0/1, 7 dependencies, weight 0, class 0 [flags 0x0]
path-idx 1 NHID 0x0 [0xa10b134c 0x0]
next hop 13.1.1.3/32
local adjacency
local label 16004 labels imposed {16004}
MPLS服务提供简单而有效传输
本课程的目的就是实现SR基础上的×××网络
MPLS 数据平面操作– swap(交换)标签
限于拓扑结构,无法验证,图中表明在R2上16004交换到16004,但请读者明确,这是一个全局标签(其实没有变化)
MPLS 数据平面操作– pop(弹出)标签
验证 :
RP/0/0/CPU0:R2#show mpls forwarding labels 16004
Thu Apr 12 17:09:23.129 UTC
Local Outgoing Prefix Outgoing Next Hop Bytes
Label Label or ID Interface Switched
------ ----------- ------------------ ------------ --------------- ------------
16004 Pop SR Pfx (idx 4) Gi0/0/0/1 24.1.1.4 240
SR的全局块(SRGB)
预留给SR全局segment的MPLS标签范围(理论值为16000到2的20次方-1)
默认的SRGB范围是16,000-23,000,思科设备如此,其他厂商也遵循这个原则。推荐前缀SID使用绝对值配置
prefix-SID是作为整个SR域范围唯一特定的索引在IGP中进行通告
•prefix-SID索引指向SRGB内特定的标签
– 索引是基于0开始,例如,第一个索引=0
– 标签=Prefix-SID索引+SRGB基值(SRGP的第一个值)
– 例如:Prefix1.1.1.65/32,它的prefix-SID索引被设定为65,则在此SRGB中,得到的MPLS标签是16065
SRGB
强烈推荐在所有节点上使用相同的SRGB
– 这是所有的运营商期望的模式
– 简单、直接
– 全局segment等同于全局标签值
– 虽然SR支持使用不同的SRGB,但是对用户来说操作复杂
• 非默认的SRGB可以在16,000 和1,048,575间分配
– 或者只达到路由器平台支持的标签范围上限
• 所有节点上的SRGB大小必须相同
– 当前最大值是64k
验证:
RP/0/0/CPU0:R1(config)#segment-routing global-block ? //修改SRGB的命令,协议下也可以修改
<16000-1048574> The lower bound of SRGB
RP/0/0/CPU0:R1#show mpls label table detail
Thu Apr 12 18:30:40.385 UTC
Table Label Owner State Rewrite
----- ------- ------------------------------- ------ -------
0 0 LSD(A) InUse Yes
0 1 LSD(A) InUse Yes
0 2 LSD(A) InUse Yes
0 13 LSD(A) InUse Yes
0 16000 OSPF(A):ospf-110 InUse No
(Lbl-blk SRGB, vers:0, (start_label=16000, size=8000
实施数据中心环境下的×××
实施SR环境下的MPLS ×××提要
前缀段 - Prefix segment
全局segment – 具有全局意义
– SR域中唯一的
由路由协议管理
– IGP从标签交换数据库(LSD)分配一块标签(SRGB)用于Prefix Segment
手工配置
– 关联在启用IGP的loopback接口下
– 仅为/32或/128前缀分配,存在于全局路由表中
Prefix-SIDs一般由运营商自己分配 ,与分配loopback地址类似
步骤1.IOS XRv初始化-配置地址
hostname R1
interface Loopback0
ipv4 address 11.1.1.1 255.255.255.255
!
interface GigabitEthernet0/0/0/0
ipv4 address 12.1.1.1 255.255.255.0
no shutdown
!
interface GigabitEthernet0/0/0/1
ipv4 address 13.1.1.1 255.255.255.0
no shutdown
Commit //提交后,命令生效
hostname R2
interface Loopback0
ipv4 address 22.1.1.1 255.255.255.255
!
interface GigabitEthernet0/0/0/0
ipv4 address 12.1.1.2 255.255.255.0
no shutdown
!
interface GigabitEthernet0/0/0/1
ipv4 address 24.1.1.2 255.255.255.0
no shutdown
commit
R3:
hostname R3
interface Loopback0
ipv4 address 33.1.1.1 255.255.255.255
!
interface GigabitEthernet0/0/0/0
ipv4 address 34.1.1.3 255.255.255.0
no shutdown
!
interface GigabitEthernet0/0/0/1
ipv4 address 13.1.1.3 255.255.255.0
no shutdown
R4:
interface Loopback0
ipv4 address 44.1.1.1 255.255.255.255
!
interface MgmtEth0/0/CPU0/0
shutdown
!
interface GigabitEthernet0/0/0/0
ipv4 address 34.1.1.4 255.255.255.0
!
interface GigabitEthernet0/0/0/1
ipv4 address 24.1.1.4 255.255.255.0
!
interface GigabitEthernet0/0/0/2
shutdown
步骤2.IOS XRv运行OSPF环境下的SR
R1:
router ospf 110
router-id 11.1.1.1
area 0
segment-routing mpls //启动SR功能同时启动MPLS数据层面的SR
interface Loopback0
passive enable
prefix-sid absolute 16001 //为该前缀分配S-ID 16001的段(标签)
!
interface GigabitEthernet0/0/0/0
!
interface GigabitEthernet0/0/0/1
R2:
router ospf 110
router-id 22.1.1.1
area 0
segment-routing mpls
interface Loopback0
passive enable
prefix-sid absolute 16002
!
interface GigabitEthernet0/0/0/0
!
interface GigabitEthernet0/0/0/1
R3:router ospf 110
router-id 33.1.1.1
area 0
segment-routing mpls
interface Loopback0
passive enable
prefix-sid absolute 16003
!
interface GigabitEthernet0/0/0/0
!
interface GigabitEthernet0/0/0/1
R4:
router ospf 110
router-id 44.1.1.1
area 0
segment-routing mpls
interface Loopback0
passive enable
prefix-sid absolute 16004
!
interface GigabitEthernet0/0/0/0
!
interface GigabitEthernet0/0/0/1
验证OSPF协议得到的路由
RP/0/0/CPU0:R1#show route ospf //域内路由信息完整
Tue Apr 10 13:18:48.439 UTC
O 22.1.1.1/32 [110/2] via 12.1.1.2, 00:03:09, GigabitEthernet0/0/0/0
O 24.1.1.0/24 [110/2] via 12.1.1.2, 00:03:09, GigabitEthernet0/0/0/0
O 33.1.1.1/32 [110/2] via 13.1.1.3, 00:03:30, GigabitEthernet0/0/0/1
O 34.1.1.0/24 [110/2] via 13.1.1.3, 00:02:32, GigabitEthernet0/0/0/1
O 44.1.1.1/32 [110/3] via 13.1.1.3, 00:02:28, GigabitEthernet0/0/0/1
[110/3] via 12.1.1.2, 00:02:28, GigabitEthernet0/0/0/0
测试和验证
RP/0/0/CPU0:R1#show mpls forwarding //实施完毕基本的SR之后,您会发现在没有运行LDP清下,我们“神奇”的看到了标签,即16002、16003、16004等。
Tue Apr 10 16:40:48.809 UTC
Local Outgoing Prefix Outgoing Next Hop Bytes
Label Label or ID Interface Switched
------ ----------- ------------------ ------------ --------------- ------------
16002 Unlabelled SR Pfx (idx 2) Gi0/0/0/0 12.1.1.2 0
16003 Unlabelled SR Pfx (idx 3) Gi0/0/0/1 13.1.1.3 0
16004 Unlabelled SR Pfx (idx 4) Gi0/0/0/0 12.1.1.2 0
Unlabelled SR Pfx (idx 4) Gi0/0/0/1 13.1.1.3 0
RP/0/0/CPU0:R1#ping 44.1.1.1 //但此时依旧是通过IP转发的报文
Tue Apr 10 16:44:34.314 UTC
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 44.1.1.1, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/5/9 ms
验证在没有开启LDP时的MPLS
RP/0/0/CPU0:R1#show mpls interfaces
Wed Apr 11 10:53:22.890 UTC
Interface LDP Tunnel Static Enabled
-------------------------- -------- -------- -------- --------
GigabitEthernet0/0/0/0 No No No Yes
GigabitEthernet0/0/0/1 No No No Yes
RP/0/0/CPU0:R1#show mpls interfaces detail
Wed Apr 11 10:53:30.279 UTC
Interface GigabitEthernet0/0/0/0:
LDP labelling not enabled
LSP labelling not enabled
MPLS enabled
Interface GigabitEthernet0/0/0/1:
LDP labelling not enabled
LSP labelling not enabled
MPLS enabled
SR对OSPF做出了很多方面的改造(简易)
RP/0/0/CPU0:R4#show ospf database opaque-area 4.0.0.0 self-originate
Router Information TLV: Length: 4
Capabilities:
Graceful Restart Helper Capable
Stub Router Capable
All capability bits: 0x60000000
Segment Routing Algorithm TLV: Length: 1
Algorithm: 0 //算法0,即最短路径,算法1(严格SPF算法)并不启用
Segment Routing Range TLV: Length: 12
Range Size: 8000 //SRGB大小为8000
SID sub-TLV: Length 3
Label: 16000 //起始的SRGB
一个或多个SID/标签范围TLVs(SRGB描述符)包含在路由器信息不透
明LSA中
– SR算法TLV也包含在路由器信息LSA中
• SID/标签范围TLV包括:范围 (24 bits),SRGB的起始SID/标签 (可变长
度的,对于MPLS是32位)
• SR算法TLV包含使用在节点中的一系列算法标识符(8bits/标识符)
– Algorithm 0: 最短路径优先(SPF)算法基于链路度量参数
使得全局标签(SR)可以承载报文
R1:router ospf 110
router-id 11.1.1.1
area 0
segment-routing forwarding mpls//在后续的XR版本中,SR转发机制将默认启用。此配置将不再需要
segment-routing mpls
interface Loopback0
passive enable
prefix-sid absolute 16001
!
interface GigabitEthernet0/0/0/0
!
interface GigabitEthernet0/0/0/1
R4:
router ospf 110
router-id 44.1.1.1
segment-routing mpls
area 0
segment-routing forwarding mpls
segment-routing mpls
interface Loopback0
passive enable
prefix-sid absolute 16004
!
interface GigabitEthernet0/0/0/0
!
interface GigabitEthernet0/0/0/1
R2:
RP/0/0/CPU0:R2#sh run router ospf
Tue Apr 10 14:22:56.146 UTC
router ospf 110
router-id 22.1.1.1
area 0
segment-routing forwarding mpls
segment-routing mpls
interface Loopback0
passive enable
prefix-sid absolute 16002
!
interface GigabitEthernet0/0/0/0
!
interface GigabitEthernet0/0/0/1
------------------------
R3:
RP/0/0/CPU0:R3#sh run router ospf
Tue Apr 10 14:23:06.105 UTC
router ospf 110
router-id 33.1.1.1
area 0
segment-routing forwarding mpls
segment-routing mpls
interface Loopback0
passive enable
prefix-sid absolute 16003
!
interface GigabitEthernet0/0/0/0
!
interface GigabitEthernet0/0/0/1
验证通过全局标签承载的报文
RP/0/0/CPU0:R1#traceroute 44.1.1.1
1 13.1.1.3 [MPLS: Label 16004 Exp 0] 19 msec 9 msec 9 msec
2 34.1.1.4 9 msec * 19 msec
RP/0/0/CPU0:R1#show mpls forwarding
Tue Apr 10 14:21:12.773 UTC
Local Outgoing Prefix Outgoing Next Hop Bytes
Label Label or ID Interface Switched
16002 Pop SR Pfx (idx 2) Gi0/0/0/0 12.1.1.2 0
16003 Pop SR Pfx (idx 3) Gi0/0/0/1 13.1.1.3 0
16004 16004 SR Pfx (idx 4) Gi0/0/0/0 12.1.1.2 0
16004 SR Pfx (idx 4) Gi0/0/0/1 13.1.1.3 296208
24000 Pop SR Adj (idx 0) Gi0/0/0/0 12.1.1.2 0
24001 Pop SR Adj (idx 0) Gi0/0/0/0 12.1.1.2 0
24002 Pop SR Adj (idx 0) Gi0/0/0/1 13.1.1.3 0
24003 Pop SR Adj (idx 0) Gi0/0/0/1 13.1.1.3 0
SR标签“负责”的FIB转发表
RP/0/0/CPU0:R1#show cef 44.1.1.1 detail
Wed Apr 11 11:16:13.906 UTC
44.1.1.1/32, version 22, internal 0x1000001 0x81 (ptr 0xa13f1ef4) [1], 0x0 (0xa13bd6a4), 0xa28 (0xa16b107c)
Updated Apr 11 10:11:48.020
local adjacency 12.1.1.2
Prefix Len 32, traffic index 0, precedence n/a, priority 1
gateway array (0xa128623c) reference count 3, flags 0x68, source rib (7), 0 backups
[2 type 5 flags 0x8401 (0xa15754c4) ext 0x0 (0x0)]
LW-LDI[type=5, refc=3, ptr=0xa13bd6a4, sh-ldi=0xa15754c4]
gateway array update type-time 1 Apr 11 10:11:48.020
LDI Update time Apr 11 10:11:48.020
LW-LDI-TS Apr 11 10:11:48.020
via 12.1.1.2/32, GigabitEthernet0/0/0/0, 7 dependencies, weight 0, class 0 [flags 0x0]
path-idx 0 NHID 0x0 [0xa10e51fc 0x0]
next hop 12.1.1.2/32
local adjacency
local label 16004 labels imposed {16004} //负载均衡环境下的压入标签表象,下同
via 13.1.1.3/32, GigabitEthernet0/0/0/1, 7 dependencies, weight 0, class 0 [flags 0x0]
path-idx 1 NHID 0x0 [0xa10e52f8 0x0]
next hop 13.1.1.3/32
local adjacency
local label 16004 labels imposed {16004}
Load distribution: 0 1 (refcount 2)
Hash OK Interface Address
0 Y GigabitEthernet0/0/0/0 12.1.1.2
1 Y GigabitEthernet0/0/0/1 13.1.1.3
全局标签的真面目
中间系统到中间系统协议配置段路由实例
构建客户之间的×××测试神奇的SR
PE-XR1:
vrf QYT
address-family ipv4 unicast
import route-target
100:100
!
export route-target
100:100
!
!
!
interface GigabitEthernet0/0/0/2
vrf QYT
ipv4 address 15.1.1.1 255.255.255.0
no shutdown
!
router ospf 1
vrf QYT
redistribute bgp 100
area 0
interface GigabitEthernet0/0/0/2
!
!
!
!
router bgp 100
address-family ***v4 unicast
!
neighbor 44.1.1.1
remote-as 100
update-source Loopback0
address-family ***v4 unicast
!
!
vrf QYT
rd 100:100
address-family ipv4 unicast
redistribute ospf 1
SR承载IP转发的验证(客户QYT)
验证客户数据的转发
RP/0/0/CPU0:R1#show cef vrf QYT 66.1.1.1 detail
Thu Apr 12 17:54:42.043 UTC
66.1.1.1/32, version 7, internal 0x5000001 0x0 (ptr 0xa13d84f4) [1], 0x0 (0x0), 0x208 (0xa155b258)
Updated Apr 12 15:36:09.573
Prefix Len 32, traffic index 0, precedence n/a, priority 3
gateway array (0xa126c4a8) reference count 2, flags 0x4038, source rib (7), 0 backups
[1 type 1 flags 0x48441 (0xa1575410) ext 0x0 (0x0)]
LW-LDI[type=0, refc=0, ptr=0x0, sh-ldi=0x0]
gateway array update type-time 1 Apr 12 15:31:45.471
LDI Update time Apr 12 15:31:45.471
via 44.1.1.1/32, 3 dependencies, recursive [flags 0x6000]
path-idx 0 NHID 0x0 [0xa15c3af4 0x0]
recursion-via-/32
next hop VRF - 'default', table - 0xe0000000
next hop 44.1.1.1/32 via 16004/0/21
next hop 12.1.1.2/32 Gi0/0/0/0 labels imposed {16004 24005} //16004为我们配置的SR的前缀SID,即标签,而24005为×××v4标签
next hop 13.1.1.3/32 Gi0/0/0/1 labels imposed {16004 24005}
SR标签承载的业务数据
R5-CE#traceroute 66.1.1.1 numeric //客户终端测试成功
Type escape sequence to abort.
Tracing the route to 66.1.1.1
VRF info: (vrf in name/id, vrf out name/id)
1 15.1.1.1 4 msec 3 msec 2 msec
2 12.1.1.2 [MPLS: Labels 16004/24005 Exp 0] 18 msec 15 msec 14 msec
3 24.1.1.4 [MPLS: Label 24005 Exp 0] 17 msec 16 msec 15 msec
4 46.1.1.6 17 msec * 12 msec
R6#traceroute 55.1.1.1 nu
R6#traceroute 55.1.1.1 numeric
Type escape sequence to abort.
Tracing the route to 55.1.1.1
VRF info: (vrf in name/id, vrf out name/id)
1 46.1.1.4 7 msec 2 msec 1 msec
2 24.1.1.2 [MPLS: Labels 16001/24005 Exp 0] 55 msec 10 msec 10 msec
3 12.1.1.1 [MPLS: Label 24005 Exp 0] 13 msec 10 msec 11 msec
4 15.1.1.5 11 msec * 24 msec
迁移到Segment Routing(段路由 )
SR和其他MPLS协议共存
SR一直以来的目标之一就是简化现有MPLS协议和机制,同时增加新的保护流量工程的能力
由于SR可重用MPLS数据层面,所以大多数时候仅仅需要升级软件就可以支持基本SR功能
过渡的2种方式:
1.SR和其他MPLS协议共存
2.SR和LDP互操作
SR和其他MPLS协议共存
控制层面
每个节点的标签管理器( Label Manager)进行下面动作:
– 预留一个SR控制平面的标签范围(SRGB)
– 确保所有动态标签在SRGB块之外分配
– 确保动态标签是唯一分配
每个LSR必须确保它可以唯一地解读其入标签
– 邻接段:Label Manager本地自动分配独一无二的标签
– 前缀段:运营商确保在SRGB范围内分配唯一的标签
和LDP数据平面共存1
IP报文到MPLS报文转发(入口PE),只能使用SR的标签或者LDP的标签中的一个,而不能同时使用(图中为优先使用SR,注意命令已经发生改变为RP/0/0/CPU0:R1(config-ospf)#segment-routing sr-prefer )
和LDP数据平面共存2
MPLS到MPLS(P设备)转发表项可以不唯一,因为出方向标签针对下游设备优先,而不是本地设备
MPLS到IP的转发表项也可以共存(都存在PGP)
所以除了入口PE其他设备无需做过多关心
最简单地迁移方式: LDP到SR
初始状态:所有节点运行LDP而不运行 SR
步骤1:所有节点都升级到支持到支持SR
– 没有特殊的顺序要求
– 仍旧默认优选LDP标签压入
步骤2:所有PE都配置成优选SR标签压入(出口PE和入口PE是相对而言)
– 没有特殊的顺序要求
步骤3:LDP被从网络节点中移除
– 没有特殊的顺序要求,最终状态:所有节点运行SR,而不运行LDP
来源:51CTO
作者:EnderJoe
链接:https://blog.51cto.com/enderjoe/2115124