SRV6基础
参考链接
https://support.huawei.com/enterprise/zh/doc/EDOC1100195151?sendFrom=mobile
https://www.bilibili.com/video/BV1vK4y197tX?p=1&vd_source=4134b92c3a7468ae0a22c27b16a3440f
SRv6 基础概念
基本问题
源节点凭什么去规划路径?它怎么会有这样的能力呢?
这个问题其实很好回答,我们先来看一下IGP当中的OSPF是怎么规划路径的,IGP当中的OSPF是凭什么形成路径的转发树的呢?所有的路由器都要事先交换信息从而形成LSDB,有了LSDB意味着路由器对整个网络有了一个详细认知,然后再根据SPF算法计算出最优的路径树。
SR的源节点之所以能规划出最优秀的路径树整体思路与OSPF是差不多的。在SR当中,我们把规划路径的看做是控制能力,最常见的方式是SR源节点把控制能力交给控制器,由控制器反所有的路径算好之后下发到源节点,这是一种方式;另一种方式就是让SR网络设备之间相互交互信息自己计算出一个最优秀的路径,当然管理员也可以参与规划。
源路由
1. MPLS架构用的好好的,为什么要用SR呢?
上面这个图不错,是华为PPT上的图,我们来简单解释一下;
- 第一阶段是纯纯的MPLS架构,控制层面必须得基于IGP建立;
- 第二阶段是重心转到了对IGP的扩展上,但IPV4的报文设计无法原生支持SR,所以还是借鉴了MPLS架构;
- 第三阶段是彻底摆脱对MPLS架构,IGP的真正意义实现了控制层面和转发层面合二为一。
2. SRV6的优势体现在什么地方?
- 继承IPV6的优势
- 原生亲和SDN
- 具有可编程的优势
3. SR的两种部署方式
- IPV4网络:通过MPLS架构增量部署
- IPV6网络:无需借助其它技术,IPV6原生即支持SR
SRH和报文结构
SRH全称是segment routing header,直译为段路由的扩展报文头。
我们知道IPV6报文默认只有一个标准的首部,可以通过添加扩展头来实现多种功能,如果说在标签首部上添加段路由扩展头,那IPV6报文就能直接支持SR功能,这意义相当重大哈!为什么这么说,在MPLS-LDP时期想实现报文通过MPLS穿越ISP,那中间所有的网络都必须得运行MPLS-LDP,本来这些网络设备就已经运行了IPV4的路由协议,现在还在在此基础上叠加一个MPLS-LDP,SRv6时代不用了,只运行一个支持IPV6的动态路由协议即可完成转发了,也就是说一个支持IPV6的IGP协议就能完成之前整个MPLS架构才能完成的事情。
SRH的报文结构如下所示:
我们可以看到SRH的位于标准首部和载荷中间,蓝色部分全都是,但其中最核心的部分就是segment list,这其实就是由连续的IPV6地址组成的列表,数据报文在转发的时候根据这个列表进行转发,就是源路由那个感觉。也就是说SR报文在发送之前在填充SRH,而填充SRH之前要先计算出路径,谁来计算出路径呢?支持的IPV6的IGP都可以,比如扩展后的OSPF或ISIS。
这里会涉及一个问题,那就是SRH会改变报文的源目IP地址吗?
不会的,SRH是附加在标准首部之上的,不会改变标准首部中的源目IP地址。
SID
SRH里面最关键的字段就晃segment,也称为是SID
SID的表现形式就像IPV6地址,SID由三部分组成(小于等于128位):
- locator
- function
- arguments
locator
SID里面最关键的字段就是locator
locator的作用是标识网络节点,用于路由和转发到该节点
在SR-MPLS里面控制层还是依赖MPLS标签,而在SRV6当中没有标签的概念,那代替MPLS标签是什么呢?是一个类似IPV6地址的字段叫locator,locator是本地管理员参与分配,分配完之后会随之IGP协议分发,IGP的作用是形成底层的承载路由条目,而其中就有locator所形成的路由条目。也就是说以后再转发的时候不再看下一跳标签转发表,而是直接查路由表就行了!而且locator还有一个标签不具有好处,标签仅仅是两台路由设备之间才会生效,而locator是全域唯一,因为它是跟随ISIS进行泛洪,可以直接全域唯一标识一台路由设备,这可比router-id的功能要强,router-id虽然也是全AS泛洪并唯一标识,但是router-id并不能直接用来路由。
在MPLS LDP时代,底层的IGP负责形成承载路由条目,LDP形成最外层的标签,而现在,ISIS或OSPF本身通过locator字段实现了类似标签分发的效果,原本IGP和LDP泾渭分明,各自负责自己的工作,而现在IGP通过locator实现了LDP做到事情。我们可以一个新形象的例子说明,原本A是种植鸦片的,是整个毒品网络最底层,B从A进货销售,而现在情况变了,A不仅自己种植鸦片,而且自产自销,直接开启了“厂家直销,没有中间商赚差价”的新商业模式。
function
locator用于标识,而function里面是要执行的动作
function在华为路由器当中以opcode来命名
arguments
一般情况下不配置
SID类型和举例
- End SID用于标识网络中的某个目的节点(Node)。类似SR-MPLS中的Node SID。End SID通过IGP协议扩散到其他网元,全局可见,本地有效。
End.X SID表示三层交叉连接的Endpoint SID,用于标识网络中的某条链路。类似SR-MPLS中的Adjacency SID。End.X SID通过IGP协议扩散到其他网元,全局可见,本地有效。
End.DT4 SID表示PE类型的Endpoint SID,用于标识网络中的某个IPv4 VPN实例。End.DT4 SID对应的转发动作是解封装报文,并且查找IPv4 VPN实例路由表转发。End.DT4 SID在L3VPNv4场景使用,等价于IPv4 VPN的标签。End.DT4 SID可以通过静态配置生成,也可以通过BGP在Locator的动态SID范围内自动分配。
SID的配置
我们整理一下前面的关键内容之前关系:
-
IPV6报文
- SRH
- SID/srv6 segment
- locator
- function
- arguments
- SID/srv6 segment
- SRH
-
上述这个关系很简单,IPV6报文通过在标准的报文头当中插入特定的SRH扩展报文头用以支持SRV6的功能,也就是说SRV6的大部分功能都能在该SRH报文扩展头当中有所体现。
-
SRH结构当中较为关键的一组字段为SID/srv6 sid,sid的表现形式类似于IPv6地址,sid又有三部分组成;
-
locator用于标识节点,function用于标识动作。
- 进一步说,我们如果想要使能SRV6,必须得配置SID,否则SRH报文首部无法被填充;
- 再进一步,我们如果想配置SID,就必须先配置locator
- 最后,当我们配置完locator之后,sid会自动形成,SRH得以填充,报文得以发送
- SRV6的SID配置方式分为:
- 动态配置:只需配置locator,arguments由IGP动态分配
- 静态配置:不仅需要配置locator,还得规定arguments(推荐静态配置End SID和End.X SID。动态生成的SID如果设备重启,SID会变化,不利于维护。)
问题1:arguments是动作,如果是动态分配,系统怎么知道我们想要执行什么动作呢?
是因为locator有类型之分,而这些类型有默认的动作,所以系统能自动进行实例动作。
问题2:动作是否可以自定义?
是可以的,这就是SRv6可编程性的一个体现
基本实验
接口IP的配置
# CX1的配置
sys i
sysn CX1
undo dcn
y
int ether1/0/0
ipv6 enable
ipv6 address 2012::1/64
int l0
ipv6 enable
ipv6 add 2000::1/128
# CX2的配置
sys i
undo dcn
sysn CX2
y
int l0
ipv6 enable
ipv6 address 2000::2/128
int ether1/0/0
ipv6 enable
ipv6 address 2012::2/64
int ether1/0/1
ipv6 enable
ipv6 address 2023::2/64
quit
# CX3
sys i
sysn CX3
undo dcn
y
int l0
ipv6 enable
ipv6 address 2000::3/128
int ether1/0/0
ipv6 enable
ipv6 address 2023::3/64
quit
ISIS的配置
# CX1
isis 1
is-level level-2
cost-style wide
is-name cx1
network-entity 49.0001.0000.0000.0001.00
ipv6 enable topology standard
int ether1/0/0
isis ipv6 enable 1
int l0
isis ipv6 enable 1
# CX2
sysn CX2
isis 1
is-level level-2
cost-style wide
is-name cx2
network-entity 49.0001.0000.0000.0002.00
ipv6 enable topology standard
int ether1/0/0
isis ipv6 enable 1
int ether1/0/1
isis ipv6 enable 1
int l0
isis ipv6 enable 1
quit
# CX3
isis 1
is-level level-2
cost-style wide
is-name cx3
network-entity 49.0001.0000.0000.0003.00
ipv6 enable topology standard
int ether1/0/0
isis ipv6 enable 1
int l0
isis ipv6 enable 1
quit
SRv6配置
# 检查类的命令,先检查一下基础环境
dis current interface ether1/0/0
dis ipv6 interface brief
ping ipv6 2000::1/64
dis isis peer
dis isis route ipv6
SRV6的关键配置 | |
---|---|
segment-routing ipv6 | 首先全局打开ipv6 |
encapsulation source-address 2000::1/128 | 设置srv6报文封装源,用环回接口配置 |
locator yeslab ipv6-prefix A111::96 static 16 | 设置前缀为96位,静态固定部分16位 |
isis | |
segment-routing ipv6 locator yeslab | 要求在ISIS当中宣告出去 |
PS:static在这里的意思是静态段的位数,而不是静态locator的意思,上述的prefix依然是动态分配的方式。也就是说这条命令的意思是locator yeslab ipv6-prefix A111::96 static 16,locator前缀为96位,还剩下32位,32位中的16位用做静态,剩下的16位用做动态分配。
# 下面演示一下动态的方式配置SID
[CX1]segment-routing ipv6
[CX1-segment-routing-ipv6]encapsulation source-address 2001::1
[CX1-segment-routing-ipv6]locator test1 ipv6-prefix A111::1 96 static 16
[CX1-segment-routing-ipv6-locator]
[CX1]isis 1
[CX1-isis-1]segment-routing ipv6 locator test1
**[CX1]dis segment-routing ipv6 local-sid end forwarding**
My Local-SID End Forwarding Table
---------------------------------
SID : A111::1:0/128 FuncType : End
Flavor : -- # 正常的
LocatorName: test1 LocatorID: 1
SID : A111::1:1/128 FuncType : End
Flavor : PSP # 附加额外功能的
LocatorName: test1 LocatorID: 1
**[CX1]dis segment-routing ipv6 local-sid end-x forwarding**
My Local-SID End.X Forwarding Table
-----------------------------------
SID : A111::1:2/128 FuncType : End.X
Flavor : --
LocatorName: test1 LocatorID: 1
NextHop : Interface : ExitIndex:
FE80::3A2A:8FFF:FE01:100 Eth1/0/0 0x00000006
SID : A111::1:3/128 FuncType : End.X
Flavor : PSP
LocatorName: test1 LocatorID: 1
NextHop : Interface : ExitIndex:
FE80::3A2A:8FFF:FE01:100 Eth1/0/0 0x00000006
Total SID(s): 2
我们会发现通过动态方式配置SID时,我们仅需要把locator写上,然后规定一下静态位占多少位,在上文我们规定locator是96位,同时规定静态位占16位,其实也意味着动态位也是16位,注意这里面的16仅仅是位数而已,static并不代表这是静态配置。
当我们查看end SID的时候发现产生了两个,一个是flavor是空,另一个是PSP,这是什么意思?另外这两种SID这也不一样呀,这是怎么回事?我们规定了SID的前96位(也就是prefix),所以所有的SID前96位都是固定的都是A111,后面的数字依次是动态位和静态位,各占16位,这个两个数字都是动态自动分配的,因为我们在配置locator的时候使用的就是动态配置呀,为什么会有两个呢?你还记得MPLS-LDP当中两个表吗?一个表是下一跳标签转发表,另一个表是入标签转表,这两张表里面一个存储的是自己对网段分配的标签,另一张表里面存储的是下游对网段的描述,这里也类似,Flavor为空的是本地的描述,而 flover是PSP是要发给上游的。
一个SID即可以形成end-sid,也只可以形成end-x-sid,end是描述节点的,而end-x是描述链路或网段的,这一点就比MPLS-LDP要强多了,标签就只能标识一个网段或一个路由。做完locator之后会生成各种SID,locator会扩散出去在其它路由表上形成路由,如果有路由器把标签设置为某个SID,就可以通过locator路由直接转发。