2.SRv6
SR架構設計之初,就為SR數據平面設計了兩種實現方式:一種是SR-MPLS,其重用了MPLS數據平面,可以在現有IP/MPLS網絡上增量部署;另一種是SRv6,使用IPv6數據平面,基于IPv6路由擴展頭進行擴展。
RFC8402(Segment Routing Architecture)介紹了源路由的機制,即在頭節點引入一段有序的Segment List控制流量引入和轉發。這個行為可以被看作是在頭節點輸入一段有序的指令(Instruction),每個指令則代表了在網絡中某個特定位置的功能(Function)。功能是節點上本地定義的,例如簡單的按照Segment List轉發或其他復雜的用戶自定義行為。
SRv6(draft-ietf-spring-srv6-network-programming)更強調網絡編程,這能將簡單和復雜的網絡功能結合,能夠實現更多的網絡目的而不僅僅是轉發。
基于IPv6轉發面的SRv6,通過在IPv6報文中插入一個路由擴展頭SRH(Segment Routing Header),在SRH中壓入一個顯式的IPv6地址棧,通過中間節點不斷的進行更新目的地址和偏移地址棧的操作來完成逐跳轉發。
網絡編程的概念
網絡意圖
–某業務沿著低時延路徑轉發SDN控制器
–業務需求轉換為網絡模型、SRv6段
–控制器計算將路徑編碼為SRv6 Segment插入報文中網絡設備
–網絡設備轉發報文
SRv6的價值
- 簡化協議、簡化網絡:去掉LDP、RSVP-TE等MPLS控制協議,網絡控制層面協議簡化為IGP/BGP。無需維護多種協議狀態,并應對復雜的協議狀態同步問題
- SDN事實上的標準應用:兼具全局最優和分布智能的優勢,可以實現各種流量工程,根據不同業務提供提供按需的SLA保障
- 100%拓撲保護:任意拓撲100%保護倒換全覆蓋,保護路徑最優(與收斂后的路徑一致)
- 強可擴展性:基于源路由技術,每條流的狀態僅在頭節點維護,中間節點不感知
2.1 IPv6 Segment Routing Header(SRH)
2.1.1 SRH字段
RFC 8754中定義IPv6 SRH擴展頭標準,在IPv6報文增加一個SRH擴展頭。
next=43字段
:表明是Routing Extension Header。IPv6的擴展報頭類型之一就是路由報頭 (Routing Header),其類型號是43,。IPv6源結點使用路由報頭列出一個或多個中間結點,使得數據包在去往最終目的地的路徑上經過這些結點。因此源結點可以使用路由報頭來實現數據包的源路由。
Routing Extension Header的Routing Type建議值為4
表明是SR Header,稱作SR擴展頭或者SRH。
SRH繼承路由報頭屬性:它應該只在數據包中出現一次,并且如果Segment Left = 0,則忽略 (但不丟棄) SRH,并且基于數據包中的下一報頭來處理數據包
Segment Left
是一個指針,指向下面的地址列表,比如2,就會把指針為2的地址放入到目的地址中,從而影響數據的轉發
如果結點收到數據包,并且數據包的目的地址對應于該結點的地址,則該數據包檢查擴展報頭 (如果存在)。如果擴展報頭中含有結點不能識別的路由類型的路由報頭,結點的行為取決于 “Segment Left” 的值:
如果Segment Left = 0,則節點忽略路由報頭并處理數據包的下一報頭。
如果Segment Left != 0,則節點丟失數據包,并且向數據包的源地址發送ICMP “參數問題 (Parameter Problem)” 的消息。
SRH擴展頭包含如下內容:
- Segment List:有序的SRv6 SID列表
- Segments Left(SL):SRv6激活的SID為Slist【SL】。轉發過程中通過修改SL,同時更換DIP為活躍的SID來分段完成轉發
- Tag:用于對數據包分組可以實現基于組的策略。
- SRH TLVs(NSH metadata,HMAC TLV,Padding TLV等):可以作為segment list的SID共同使用的全局參數
從SRH看SRv6網絡可編程能力
SRv6較于SR-MPLS有更強大的網絡編程能力,這種能力體現在SRH中。
整體上看SRH有三層編程空間:
- 第一層是segment序列。它可以將多個segment組合,形成SRv6路徑。這一點和MPLS標簽棧類似。
- 第二層是對SRv6 SID 128bit地址的運用。MPLS標簽中四個段是定長的(20bit標簽、8bit TTL、3bit TC和1bit棧底標識)。而SRv6 SID的128bit可以靈活分段,并且每個段的長度也可以變化。由此SRv6具備更靈活的可編程能力。
- 第三層是緊接在segment序列后的可選TLV。報文在網絡中傳送時,如果需要在轉發平面封裝一些非規則類的信息,可以通過在SRH中TLV的靈活組合來完成。
2.1.2 SRH處理過程
SRv6路徑上分為三種不同角色的結點。
源結點
源結點是可以產生帶有SRH的IPv6數據包的任何結點:
產生帶有SRH的IPv6數據包的主機
插入SRH或壓入新的帶有SRH的外部IPv6報頭的SRv6域入口節點
當源結點產生數據包時,它會為數據包創建SRH,如下所示,并將其插入報頭。
Segment List:采用對路徑進行逆序排序的方式編碼n個Segment。第一個位置是最后的Segment,最后位置是第一個Segment。
Segment Left:設置為n-1。
First Segment:設置為n-1。
Des-address:數據包地址設置為路徑的第一個Segment。
HMAC TLV和 (或) 其他TLV可以添加到SRH。
事實上,SRv6主報頭中的目的地址會被編碼為active segment對應的IPv6地址。
Segment端節點
帶有SRH的IPv6數據包的目的地址如果與結點的地址一樣,則該節點稱為Segment端節點。
Segment端節點接收到一個帶有SRH的數據包時的操作如下:
if “Des-address == self-address” then
— if “Segment Left > 0” then
—— Segment Left - 1 (next Segment become active)
—— update Des-address to active SID (IPv6 address)
—— if “Segment Left ==0” then
——— if “C-flag == 1” then
———— remove SRH
——— endif
—— else
——— process next header
—— endif
— endif
endif
avtive Segment是Segment Left指向的Segment List中的Segment。Active Segment也被設置為數據包的目的地址。在每個Segment端節點處,通過在Segment List中找到的下一個active Segment來更新目的地址。
中轉結點
中轉結點是數據包路徑上的一個結點,但不是Segment端節點。IPv6規范規定中轉結點必須將數據包轉發到其IPv6目的地址,且不改動SRH。中轉結點不需要支持SRv6來轉發數據包。
2.2 網絡指令:SRv6 Segment
SRv6 Segment是一個128位數,通常也可以稱為SRv6 SID或者SID。SID是一種實例化的IPv6地址,此類IPv6地址被賦予唯一的功能,一個SRv6 SID可以表示一個節點/鏈路,或者一個L2/L3的VPN,又或者一個服務。可以說,通過SRv6 SID可以定義任何的網絡功能。
通常一條計算機指令包括兩個部分,opcode(操作碼)和operand(操作數)。opcode是指令要完成的操作,operand是參加運算的數據及其所在地址。同樣SRv6網絡編程也要定義網絡指令,及SRv6 segment。
SRv6 segment是IPv6地址形式,通常也可以成為SRv6 SID
與SR MPLS的Segment不同,SRv6的Segment有128bits,而且分成了三部分:
- Locator(位置標識):網絡中分配給一個網絡節點的標識,可以用于路由和轉發數據包。Locator有兩個重要的屬性,可路由和聚合。在SRv6 SID中Locator是一個可變長的部分,用于適配不同規模的網絡。
- Function(功能):設備分配給本地轉發指令的一個ID值,該值可用于表達需要設備執行的轉發動作,相當于計算機指令的操作碼。在SRv6網絡編程中,不同的轉發行為由不同的功能ID來表達。一定程度上功能ID和MPLS標簽類似,用于標識VPN轉發實例等。
- Args(變量):轉發指令在執行的時候所需要的參數,這些參數可能包含流,服務或任何其他相關的可變信息。
三部分的表現為LOC:FUNCT:ARG。注意Length<=128。當長度小于128時,保留位用0補齊
Locator
Locator是網絡拓撲中的一個網絡節點的標識,用于路由和轉發報文到該節點,實現網絡指令的可尋址。
Locator標識的位置信息由兩個重要的屬性:可路由和可聚合。節點配置Locator之后,系統會生成一條Locator網段路由,并且通過IGP在SR域內擴散。網絡里其他節點通過Locator網段路由就可以定位到本節點,同時本節點發布的所有SRv6 SID也都可以通過該條Locator網段路由到達。
在華為設備配置中,配置前綴為2001:DB8:ABCD:,長度為64 bit:
[Router] segment-routing ipv6
[Router-segment-routing-ipv6] locator srv6_locator1 ipv6-prefix 2001:DB8:ABCD: 64
Fuction & Argument
Function用來表示該指令要執行的轉發動作(實RFC中叫做behavior),相當于計算機指令的Opcode。在SRv6網絡編程中,不同的轉發行為由不同的Fuction來標示,例如在RFC中定義了公認的End(類似node segment)、End.X(類似鄰接segment)、End.DX4、End.DX6等。
Argument是可選的,這是對Function的一個補充。
例如End-x類似SR-MPLS中的Adjacency SID,用于標識某條鏈路。配置如下:
[Router-segment-routing-ipv6] locator srv6_locator1 ipv6-prefix 2001:DB8:ABCD: 64
[Router-segment-routing-ipv6] opcode ::1 end-x interface g3/0/0 next-hop 2001:DB8:200::1
此Function對應的opcode為::1,此時沒有Argument,那么SRv6 SID的只為2001:db8🔡:1
此Function的行為標示將報文從指定接口(G3/0/0),轉發給對應的鄰居節點(2001:db8:200::1)
SRv6 SID總結
首先它的長度128bit與IPv6地址長度保持了兼容(實際上他們之間沒有關系,這只是一種巧妙的設計),這使得SRv6 SID可以作為IPv6地址使用。且現有的IPv6地址也能在讀在SRv6中使用。
其次,SRv6中SID中的“Locator+Function”設計實際上是一種“路由+MPLS”的融合。總所周知MPLS是一種“2.5”層技術,SRv6可以類似的看做是一種“3.5”層技術,它同時融合了路由和MPLS技術的優勢。
最后SRv6 SID中字段的含義和長度是可自定義的,而非像MPLS標簽采用固定格式。這提供了更好的編程靈活性。
2.3 SRv6節點
源節點(SR source node):生成SRv6報文的源節點
中轉節點(transit node):轉發SRv6報文但不進行SRv6處理的IPv6節點
endpoint節點(SR segment endpoint node):SRv6報文的目的節點
2.3.1 Source Node

源節點將數據包引導到SRv6 segment list中,如果SRv6 segment list只包含單個SID,并且無需在SRv6報文中添加信息或TLV字段,則SRv6報文的目的地址字段設置為該SID。
源節點可以是生成IPv6報文且支持SRv6的主機,也可以是SRv6域的邊緣設備
如圖本咧為L3VPNv4 over SRv6 TE policy,即在SRv6上承載IPv4流量。源節點負責將IPv4流量引入隧道,封裝SRH
2.3.2 Transit Node
中轉節點是在SRv6報文路徑上不參與SRv6處理的IPv6節點,即中轉節點只執行普通的IPv6報文轉發
當節點收到SRv6報文后解析報文的IPv6目的地址字段。如果IPv6目的地址不是本地配置的SRv6 SID也不是本地接口地址,節點則將SRv6報文當做普通IPv6報文查詢路由表執行轉發,不處理SRH。
中轉節點可以使普通的IPv6節點,也可以是支持SRv6的節點
2.3.3 Endpoint Node
在SRv6報文轉發過程中,節點接收報文的IPv6目的地址是本地配置的SID,則節點被稱為Endpoint節點
Endpoint節點需要處理SRv6 SID和SRH
2.3.4 SRH處理過程
在SRv6轉發過程中每經過一個SRv6節點,segment left(SL)字段減1,IPv6 DA信息變換一次,Segment Left和Segment List字段共同決定IPv6 DA信息
與SR-MPLS不同,SRv6是從下到上逆序操作,SRH中的segment在經過節點后也不會被彈出。因此SRv6報頭保留了路徑信息可以做路徑回溯
2.3.5 SRv6指令集
SRH存儲了實現網絡業務的有序指令列表,相當于計算機的程序。其中的Segment List[0] ~ Segment List[n]相當于計算機程序的指令。第一個需要執行的指令是Segment List[n]。Segment Left相當于計算機程序的PC(Program Counter,程序計數器)指針,指向當前正在執行的指令。
SRv6指令的命名規則
End:是最基礎的Segment Endpoint執行指令,表示中止當前指令,開始執行下一個指令。對應的轉發動作是將SL值-1,并將SL指向的SID復制到IPv6報文頭的目的地址中。
X:指定一個或一組三層接口轉發報文。對應的轉發行為是按照指定出接口轉發報文。
T:查詢路路由表并轉發報文。
D:解封裝,移除IPv6報文頭和與它相關的擴展報文頭。
V:根據VLAN查表轉發。
U:根據單播MAC查表轉發。
M:查詢二層轉發表進行組播轉發。
B6:應用指定的SRv6 Policy。
BM:應用指定的SR-MPLS Policy。
源節點行為
SRv6源節點負責將流量引導到SRv6 policy中,并執行可能的SRH封裝。下面列舉了SRv6源節點封裝報頭的幾種模式:
源節點行為 | 功能描述 |
---|---|
H. Insert | 為接收到的IPv6報文插入SRH,并查表轉發。 |
H. Insert. Red | 為接收到的IPv6報文插入Reduced SRH,并查表轉發。 |
H. Encaps | 為接收到的IP報文封裝外層IPv6報文頭與SRH,并查表轉發。 |
H. Encaps. Red | 為接收到的IP報文封裝外層IPv6報文頭與Reduced SRH,并查表轉發。 |
H. Encaps. L2 | 為接收到的二層幀外封裝IPv6報文頭與SRH,并查表轉發。 |
H. Encaps. L2. Red | 為接收到的二層幀外封裝IPv6報文頭與Reduced SRH,并查表轉發。 |
Endpoint節點行為
指令 | 功能描述 | 應用場景 |
---|---|---|
End | 把下一個SID復制到IPv6目的地址,進行查表轉發 | 指定節點轉發,相當于SR-MPLS的Node Segment |
End. X | 根據指定出接口轉發報文 | 指定出接口轉發,相當于SR-MPLS的Adjacency Segment |
End. T | 在指定的IPv6路由表中進行查表并轉發報文 | 用于多路由表轉發場景 |
End. DX2 | 解封裝報文,從指定的二層出接口轉發 | L2VPN,例如EVPN VPWS(Virtual Private Wire Service) |
End. DX4 | 解封裝報文,從指定的IPv4三層鄰接轉發 | L3VPNv4,通過指定的IPv4鄰接轉發到CE |
End. DX6 | 解封裝報文,從指定的IPv6三層鄰接轉發 | L3VPNv6,通過指定的IPv6鄰接轉發到CE |
End. DT6 | 解封裝報文,在指定的IPv6路由表中進行查表轉發 | L3VPNv6 |
End. DT4 | 解封裝報文,在指定的IPv4路由表中進行查表轉發 | L3VPNv4 |
End. B6. Insert | 插入SRH,應用指定的SRv6 Policy | Insert模式下引流如SRv6 Policy,隧道拼接、SD-WAN選路等 |
End. BM | 插入MPLS標簽棧,應用指定的SR-MPLS Policy | SRv6與SR-MPLS互通場景 |
Flavors附加行為
Flavors是為了增強End系列指令而定義的附加行為。這些附加行為是可選項,它們將會增強End系列指令的執行動作,滿足更豐富的業務需求。
SRv6-Network-Programming中定義了以下附加行為,PSP(Penultimate Segment Pop of the SRH,倒數第二段彈出SRH)、USP(Ultimate Segment Pop of the SRH,倒數第一段彈出SRH)和USD(Ultimate Segment Decapsulation,倒數第一段解封裝)。
附加行為 | 功能描述 | 附著的End指令 |
---|---|---|
PSP | 在倒數第二個Endpoint節點執行移除SRH操作。 | End、End.X、End.T |
USP | 在最后一個Endpoint節點執行移除SRH操作。 | End、End.X、End.T |
USD | 在最后一個Endpoint節點執行解封裝外層IPv6報文頭操作。 | End、End.X、End.T |
2.4 SRv6 Policy
集中式SR-TE功能架構
SR-TE采用集中式架構,控制器收集全局網絡拓撲信息和TE信息,集中算路,然后把算路結果下發給網絡設備
首先SR也通過IGP來擴散SR信息,然后由頭節點建立滿足約束的SR路徑,但是不需要RSVP-TE信令建立LSP
控制器
- 通過BGP-LS收集網絡信息,建立全局TE數據庫
- 基于約束全局算路
- 使用PCEP或BGP SRv6 Policy將算路結果下發設備
網絡設備上沒有算路功能組件
SRv6 TE Policy簡介
SR-TE Policy是SR Policy在流量工程領域的使用。它使用SR的源路由機制,通過在頭節點封裝一個有序的指令列表來知道報文穿越網絡。SR-TE Policy沒有傳統隧道接口的概念。
SR-TE Policy根據Segment不同分為SR-MPLS TE Policy和SRv6 TE Policy,這里以后者為例
SR Policy是當前主流廠家的實現SR-TE的方式,后續將用SRv6 policy代指SRv6 TE Policy