本檔案將說明為什麼Cisco IOS© IPv6提供者邊緣路由器(6PE)在資料平面中使用兩個多重協定標籤交換(MPLS)標籤。
如需文件慣例的詳細資訊,請參閱思科技術提示慣例。
A.6PE使用兩個標籤:
頂部標籤是傳輸標籤,由標籤分發協定(LDP)或MPLS流量工程(TE)逐跳分配。
底部標籤是由邊界網關協定(BGP)分配並由提供商邊緣(PE)路由器之間的內部BGP(iBGP)通告的標籤。
6PE發佈時,主要要求是MPLS核心路由器(P路由器)都不必須支援IPv6。這一要求促使人們需要在資料平面上放置兩個標籤。6PE需要兩個標籤的原因有兩個。
PHP功能
如果只使用傳輸標籤,並且使用倒數第二跳跳躍(PHP),則倒數第二跳路由器(P路由器)需要瞭解IPv6。
使用PHP時,此倒數第二跳路由器需要刪除MPLS標籤並將資料包作為IPv6資料包轉發。此P路由器需要知道資料包是IPv6,因為P路由器需要對IPv6使用正確的第2層封裝型別。(IPv6和IPv4的封裝型別不同;例如,對於乙太網,IPv6的封裝型別是0x86DD,而IPv4的封裝型別是0x0800。) 如果倒數第二跳路由器不支援IPv6,則它可能將IPv4的第2層封裝型別用於IPv6資料包。輸出PE路由器隨後會認為資料包是IPv4。
IPv4和IPv6標頭中都存在生存時間(TTL)處理。在IPv6中,該欄位稱為跳數限制。IPv4和IPv6欄位位於報頭中的不同位置。此外,還需要更改IPv4報頭中的報頭校驗和;IPv6中沒有Header Checksum欄位。如果倒數第二跳路由器不支援IPv6,則會導致IPv6資料包格式錯誤,因為路由器期望在報頭中找到TTL欄位和Header Checksum欄位。
由於這些差異,倒數第二跳路由器需要知道它是IPv6資料包。此路由器如何知道資料包是IPv6資料包,因為它沒有為IPv6轉發等價類(FEC)分配標籤,並且在MPLS報頭中沒有封裝欄位?它可以掃描標籤堆疊後的第一個半位元組並確定資料包是IPv6(如果值為6)。但是,這意味著倒數第二跳路由器需要支援IPv6。
如果使用顯式null標籤(因此沒有PHP),則此方案可能會起作用。 然而,該決定是要求PHP。
負載平衡
P路由器上的典型負載平衡遵循此過程。P路由器會前往標籤堆疊的尾端,並透過檢視標籤堆疊後的第一個半位來判斷它是否為IPv4封包。
如果半位元組的值為4,則MPLS負載是IPv4資料包,P路由器通過雜湊源和目標IPv4地址來平衡負載。
如果P路由器支援IPv6,而nibble的值為6,則P路由器通過雜湊源和目標IPv6地址來平衡負載。
如果P路由器不支援IPv6,且半位元組的值不是4(如果資料包是IPv6資料包,則可能是6),則P路由器確定它不是IPv4資料包,並根據底部標籤做出負載均衡決策。
在6PE場景中,假設有兩個出口PE路由器向BGP中的入口PE路由器通告一個IPv6字首。此IPv6字首將在BGP中使用兩個不同的標籤進行通告。因此,在資料平面中,底部標籤將是兩個標籤中的一個。這將允許P路由器按流量對底部標籤進行負載均衡。
如果6PE僅使用傳輸標籤通過MPLS核心傳輸6PE資料包,則P路由器將無法逐流地負載均衡這些資料包,除非P路由器支援IPv6。如果P路由器支援IPv6,它們可以使用源和目的IPv6地址做出負載均衡決策。