全球短訊!SRv6基本原理

2022-12-09 17:09:30 來源:51CTO博客

SRv6將網絡功能指令化,將表達網絡功能的指令嵌入128 bit的IPv6地址中。在SRv6網絡里,業務需求可以被翻譯成有序的指令列表,由沿途的網絡設備去執行,達到網絡業務的靈活編排和按需定制。

1、SRv6 Segment

通常一條計算機指令包括兩方面的內容:Opcode(操作碼)和Operand(操作數),其中Opcode決定要完成的操作,Operand指參加運算的數據及其所在的單元地址。同樣,我們在進行SRv6網絡編程的時候,也需要定義網絡指令:SRv6Segment。標識SRv6 Segment的ID被稱為SRv6 SID ,SRv6SID是一個128 bit的值,它通常由3個部分組成Locator、Function、Arguments。


【資料圖】

Locator的作用就是將報文路由到執行該指令的網絡設備中,實現網絡指令的可尋址。Locator標識的位置信息有兩個重要的屬性:可路由和可聚合。Locator對應的路由會由節點通過IGP發布到網絡中,用于幫助其他設備將報文轉發到發布該Locator的節點。此外,Locator對應的路由也是可聚合的。Locator的長度可變,用于適配不同規模的網絡。Function用來表達該指令要執行的轉發動作,相當于計算機指令的Opcode。在SRv6網絡編程中,不同的轉發行為由不同的Function來表達。和計算機的指令類似,按照不同功能將Function定義成不同類型的SID,表達對應的轉發行為,如轉發報文到指定鏈路,或在指定表中進行查表轉發等。Arguments(Args)字段是一個可選字段。它是指令在執行時對應的參數,這些參數可能包含流、服務或任何其他相關的信息。
2、SRv6節點

在SRv6網絡中存在多種類型的節點角色,基本上分為以下3類:

SRv6源節點:生成SRv6報文的源節點,源節點將數據包引導到SRv6 Segment List中,如果SRv6Segment List只包含單個SID,并且無須在SRv6報文中添加信息或TLV,則SRv6報文的目的地址字段設置為該SID,可以不封裝SRH。源節點可以是生成IPv6報文且支持SRv6的主機,也可以是SRv6域的邊緣設備。中轉節點:在SRv6報文轉發路徑上不參與SRv6處理的IPv6節點,即中轉節點只執行普通的IPv6報文轉發。當節點收到SRv6報文以后,會解析報文的IPv6 DA(Destination Address,目的地址)字段。如果IPv6目的地址既不是本地配置的SRv6SID,也不是本地接口地址,則節點將SRv6報文當作普通的IPv6報文,按照最長匹配原則查找IPv6路由表,進行處理和轉發,不處理SRH,此時該節點就是中轉節點。中轉節點可以是普通的IPv6節點,也可以是支持SRv6的節點。SRv6段端點節點:在SRv6報文轉發過程中,節點接收的報文的IPv6目的地址是本地配置的SID,則該節點被稱為端點節點。該節點需要處理SRv6 SID和SRH。
3、SRv6擴展報文頭

為了實現SRv6,根據IPv6原有的路由擴展報文頭定義了一種新類型的擴展報文頭,稱作SRH。該擴展報文頭通過攜帶Segment List等信息顯式地指定一條SRv6路徑。SRH的格式如下:

SRH各字段的說明如下:

SRv6指令的命名規則如下:

End:End是最基礎的Segment Endpoint執行指令,表示當前指令的終止,開始執行下一個指令。對應的轉發動作是將SL的值減1,并將SL指向的SID復制到IPv6報文頭的目的地址字段。X:指定一個或一組三層接口轉發報文。對應的轉發行為是按照指定出接口轉發報文。T:查詢路由轉發表并轉發報文。D:解封裝。移除IPv6報文頭和與它相關的擴展報文頭。V:根據VLAN(Virtual Local Area Network,虛擬局域網)查表轉發。U:根據單播MAC查表轉發。M:查詢二層轉發表,進行組播轉發。B6:應用指定的SRv6 Policy。BM:應用指定的SR-MPLS Policy。

所有指令都是由上述一個或多個原子功能組合而成的。

4、SRv6報文轉發

SRv6節點維護一個本地SID表,該表包含所有在該節點生成的SRv6 SID信息。本地SID表有以下用途。

存儲本地生成的SID,例如End.X SID。指定綁定到這些SID的指令。存儲和這些指令相關的轉發信息,例如VPN實例、出接口和下一跳等。

假設現在有報文需要從主機H1轉發到主機H2,H1將報文發送給節點A處理。節點A、B、D和F均為支持SRv6的設備,節點C和節點E為不支持SRv6的設備。

在SRv6源節點A上進行了網絡編程,希望報文經過B-C和D-E這兩條鏈路,然后送達節點F,再經節點F送達主機H2。以下是報文從節點A到節點F的詳細處理步驟。

1)SRv6源節點A的處理。節點A將SRv6路徑信息封裝在SRH中,指定B-C鏈路和D-E鏈路的End.X SID。另外,節點A上還要封裝節點F發布的End.DT4 SID A6::100,這個End.DT4 SID對應于節點F的一個IPv4 VPN。按照逆序形式壓入SID序列,由于有3個SID,所以節點A封裝后的報文的初始SL=2。SL指向當前需要處理的操作指令,也就是Segment List[2]字段,節點A將其值A2::23復制到外層IPv6報文頭的目的地址字段,并且按照最長匹配原則查找IPv6路由表,將報文轉發到節點B。

2)Endpoint節點B的處理。節點B收到報文以后,根據IPv6報文的目的地址A2::23查找本地SID表,命中End.X SID。節點B執行End.X SID的指令動作,將SL的值減1,并將SL指示的SID更新到外層IPv6報文頭的目的地址字段,同時將報文從End.X SID綁定的鏈路發送出去。

3)中轉節點C的處理。當報文到達節點C后,節點C只支持處理IPv6報文頭,無法識別SRH,此時節點C按照正常的IPv6報文處理流程,按照最長匹配原則查找IPv6路由表,將報文轉發給當前的目的地址所代表的節點D。

4)Endpoint節點D的處理。節點D收到報文以后,根據IPv6報文的目的地址A4::45查找本地SID表,命中End.X SID。節點D執行End.X SID的指令動作,將SL的值減1,并將SL指示的SID更新到外層IPv6報文頭的目的地址字段,同時將報文從End.X SID綁定的鏈路發送出去。如果A4::45是PSP Flavor的SID,則此時可以根據PSP的指示將SRH彈出,報文就變成了普通的IPv6報文。

5)中轉節點E的處理。節點E只支持IPv6報文頭處理,無法識別SRH,此時節點E按照正常的IPv6報文處理流程,按照最長匹配原則查找IPv6路由表,將報文轉發給當前目的地址所代表的節點F。

6)Endpoint節點F的處理。節點F收到報文以后,根據外層IPv6目的地址A6::100查找本地SID表,命中End.DT4 SID。節點F執行End.DT4 SID的指令動作,解封裝報文,去除IPv6報文頭,再將內層IPv4報文在End.DT4 SID綁定的VPN實例的IPv4路由表中進行查表轉發,最終將報文發送給主機H2。

標簽: 目的地址

上一篇:Elasticsearch的SearchAfter
下一篇:Linux安裝JDK