
SRv6將網絡功能指令化,將表達網絡功能的指令嵌入128 bit的IPv6地址中。在SRv6網絡里,業務需求可以被翻譯成有序的指令列表,由沿途的網絡設備去執行,達到網絡業務的靈活編排和按需定制。
通常一條計算機指令包括兩方面的內容:Opcode(操作碼)和Operand(操作數),其中Opcode決定要完成的操作,Operand指參加運算的數據及其所在的單元地址。同樣,我們在進行SRv6網絡編程的時候,也需要定義網絡指令:SRv6Segment。標識SRv6 Segment的ID被稱為SRv6 SID ,SRv6SID是一個128 bit的值,它通常由3個部分組成Locator、Function、Arguments。
【資料圖】
在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。為了實現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。所有指令都是由上述一個或多個原子功能組合而成的。
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。
標簽: 目的地址