SR | 理論(一)
MPLS TE缺點
- RSVP-TE大部分都是為了FRR的目的
- 不支持ECMP
- 所有流量都需要在隧道里
- 誕生了“戰術型”TE,只在需要的時候使用。
術語
TI-LFA
:與拓撲無關的無環路備份,能保證備份路徑的最優性即備份路徑是收斂后路徑,並且是針對每個目的地單獨計算的。特點:
- 小於50ms鏈路、節點和SRLG保護
- 100%覆蓋率
- 基於IGP自動計算
- 是PLR本地機制
- 可增量部署
- 適用於IP、LDP、SR流量
PLR
:本地修復點
SRv6
:把SR架構應用到IPV6數據平面稱為SRV6
LFIB
:MPLS轉發表
LSD
:標簽交換數據庫,用於管理本地標簽的分配。
SR定義
基於源路由,節點選擇路徑並引導數據包沿着該路徑轉發,做法是在數據包報頭插入帶順序的segment list,而segment可以表示任何類型的指令,轉發路徑上的節點不需要維護流狀態信息,除了源節點之外其他節點不需要存儲和維護任何流狀態信息,流量引導只在於節點。
segment和SID
segment
是節點針對所接受到的數據包要執行的指令,包含在數據包報頭中。
SID
(segment標識segment Identifier)用於標識segment,格式可自行實現。
Segment List
(SID List)是segment的有序列表,每個條目是一條指令。
segment list支持的操作
PUSH
:在SID list頭部壓入一個或多個segment,並將第一個設為活動segment;
CONTINUE
:表示segment還沒處理完成,繼續保持活動狀態;
NEXT
:活動segment已完成,segment列表中的下一個segment將成為活動segment;
全局和本地segment
全局:表示所有啟用SR的節點均質池與全局segment相關聯的指令,每個節點轉發表中均裝載全局segment的指令。
本地:只有生成本地segment的節點支持與該segment相關的指令。不一定只在本地有效
SR控制平面
可由IGP或BGP分發segment,、
IGP segment
IS-IS和OSPF都支持分發SID的擴展,IGP segment分為IGP前綴segment(IGP prefix segment)和鄰接segment(IGP Adjacency segment),分別對應IGP前綴和IGP鄰接。
IGP Prefix Segment
Prefix-SID是由IS-IS或OSPF通告的全局segment,特點:
- 全局性,SR域中所有節點都知道如何處理prefix segment為活動segment的數據包
- 多跳的,並且允許使用跨多跳ECMP
- 支持ECMP
- 由動態路由協議自動維護和計算
- 自動50ms保護
要求:prefix-SID
是全局唯一的,最典型的是分配Loopback地址,使用的是SPF的最短路徑算法,但支持松散最短路徑和嚴格最短路徑兩種模式。一個算法中一個prefix只能關聯一種prefix-SID。
IGP節點segment
即Node segment
Node-SID,也是一種IGP prefix segment,通常用於該節點環回地址的主機前綴,類似路由器ID
Node-SID是prefix-SID的子類型,所以二者的指令相同,不同點在於Node-SID僅與主機前綴相關聯,即N-flag
被置位,其他被通告時不會有該指示。
IGP anycast segment
域中多個節點上分配相同的單播前綴,該單播前綴構成anycast segment
,該前綴在語法上和單播IP前綴無區別,Anycast-SID
是與anycast前綴相關聯的特殊類型IGP prefix segment,Anycast segment是Prefix segment的子類型,因此指令相同。不標識特定節點,而是標識一組節點。通告時N-flag`不置位。
一個prefix-SID即使關聯到一個loopback地址上的主機前綴也不一定總是標識一個節點,也可能是一個anycast-SID
IGP Adjacency Segment
Adj-SID
是單向鄰接segment,指令為“引導流量由與該segment相關聯的鄰接鏈路(集合)轉發出去”而不再遵循最短路徑如何。
一般Adj-SID用於通告它的節點的本地segment。雖然協議允許全局,但一般用在本地使用。
可以給一條特定的鏈路分配多個Adj-SID,使得每個Adj-SID具有不同的屬性。
Adj-SID只能被始發它的路由器識別。但不支持ECMP。
二層Adj-SID
用於引導流量到單個LACP成員組的一個成員鏈路上。
組Adj-SID
group Adj-SID
用於實現ECMP的方式下在組內鏈路上轉發流量
BGP Prefix segment
BGP Prefix-SID
與BGP前綴相關聯,屬於全局segment,指令為“引導流量沿着支持ECMP的BGP多路徑去往該segment相關聯的前綴”。BGP prefix-SID可以把流量負載均衡到可用的BGP多路徑上。
BGP anycast segment
效果與IGP anycast segment效果相同,簡寫為BGP Anycast-SID。
BGP 對等體segment
與BGP peer特定鄰居或一組鄰居相關聯,為本地segment。通常由BGP speaker分配給其對等體會話,並通過BGP通告出去。
還有BGP 對等體節點segment,對等體鄰接segment。
SR數據平面
SR的MPLS數據平面利用MPLS架構,SID表現為MPLS標簽或MPLS標簽中的索引。segment列表在MPLS數據包中被表示為MPLS標簽棧。
SR的IPV6數據平面被稱為SRv6
,在SRv6中,segment體現為IPv6地址,SRv6無需網絡支持MPLS就可以提供SR功能。
SID在數據平面被編碼為MPLS標簽,在SR中前綴到FEC的映射方式與傳統MPLS基本相同,唯一的區別為對應該FEC的標簽是從Prefix-SID(IGP/BGP作為信令協議)獲得,而不是從LDP分發獲得。
SRGB
SR的全局塊SRGB
是用於全局segment的SID集合。SID是一個標簽值或標簽塊的一個索引,本地segment的SID是本地標簽值,而全局segment的SID是全局唯一的索引。SRGB是給特定節點分配全局segment的一個本地標簽集合
每個節點都可獨立決定分配SRGB的預留范圍。
SID索引從0開始,指向每個節點本地SRGB中的一個本地標簽值,一般SRGB中的第一個標簽值加上SID索引數字,就可計算出全局segment的本地標簽值。
SRGB只本地有效,所以每個節點需向其他節點通告它的SRGB。但SRGB不適用於本地segment,SID也是SRGB外的標簽范圍分配的。
SR MPLS標簽棧操作
segment列表 | MPLS標簽棧 |
---|---|
PUSH | PUSH |
CONTINUE | SWAP |
NEXT | POP |
倒數第二跳
倒數第二跳彈出會導致MPLS的EXP(SR中稱為TC字段)在倒數第二跳被彈出,導致COS信息無法到達最后一跳節點,解決方案為倒數第二跳將頂層標簽交換為顯式空標簽
,而不是彈出。代價就是最后1跳必須先彈出空標簽,再進行二次查找。
最后一跳
該跳可以是不帶任何標簽,直接按照報頭進行查找。
Adj-SID和MPLS
Adj-SID的MPLS標簽動作總是彈出,和Prefix-SID的倒數第二跳不同。
Adj-SID與鄰接相關聯,而不是和前綴相關聯。因此流量不會自動被壓入Adj-SID標簽。Adj-SID被用於引導流量到特定鏈路,不管是不是最短,比如TI-LFA,SRTE
MPLS TTL和TC/EXP

- LABEL: 20bit標簽值;
- TC: 3bit TC字段,也叫EXP位;
- TTL:8bit TTL字段;
- S:1bit 是否棧底;
當SR MPLS域在入口收到去往隧道的報文,壓入Perfix-SID標簽,並將IP TTL減一后復制到MPLS標簽的MPLS TTL字段,或把MPLS TTL字段設置為255,默認是復制(可通過命令改變默認行為),在壓入多個標簽時(TE, TI-LFA,L3VPN等)所有標簽的MPLS TTL都一樣,都是從IP TTL復制來的。可選擇對本地生成數據包有效,也可選擇對轉發的數據包有效。
當最后一個標簽被彈出且IP報頭暴露時,默認行為是將MPLS TTL減一后再將其復制到IP TTL(僅當MPLS TTL小於IP TTL時才會發生,防止環路導致IP TTL不會遞減到0),也可配置不復制,這樣數據包在MPLS網絡中的所有跳數不會被計入。
MPLS到MPLS 的TTL
交換

入向頂層標簽被交換的話,默認只有頂層的標簽MPLS TTL減一
交換+壓棧

入向頂層被交換同時有一個或多個標簽被壓入,則頂層標簽的MPLS TTL減一,然后復制到交換之后的MPLS TTL字段以及 所有新壓入標簽的MPLS TTL字段
彈出
頂層標簽要被彈出,則頂層MPLS TTL減一后復制到新暴露出標簽的MPLS TTL字段,僅當頂層MPLS TTL小於新暴露標簽的MPLS TTL值時才會發生。
MPLS TC/EXP
當入向數據包壓入一個或多個標簽時,默認將IP報頭的優先級復制到所有新壓入標簽的MPLS TC字段,如果IP DSCP的6個比特都被占用了則將DSCP的前三個比特復制。
當彈出最后一個標簽時,默認不會將MPLS TC字段復制到暴露出的IP優先級或DSCP位。
當頂層標簽被交換時,則MPLS TC字段復制到交換后的標簽上。
當頂層標簽被交換且又有新壓入的標簽時,則頂層標簽的TC字段復制到交換后的和新壓入的。
當彈出時,默認頂層TC字段不會復制到新暴露出的TC字段。
MPLS 負載均衡
為實現用數據包的MPLS報頭下的IP頭負載均衡,設備需要深入數據包報頭中查看,不同設備可以深入的能力不一樣,如果標簽棧過深則會有一定影響。
MPLS MTU
PTU(Protocol Data Unit)規定了該協議層最大數據包,如二層以太網MTU為1514字節(二層頭開銷14字節,三層1500字節,不含前導碼、幀定界符、FCS等)。而PPP/HDLC則二層開銷為4字節。
所有接口IP MTU默認1500字節,而MPLS MTU默認也是1500,單個MPLS頭4字節。為保持IP MTU的默認,則MPLS MTU要增加4*N字節。N為MPLS報頭中最大標簽數量。最后應用到接口上還必須增加二層MTU。
為考慮到Jumbo幀,還經常使用9216字節。
SRGB
SRGB用於指定全局Segment標簽范圍,SRGB范圍的大小在SR域中所有節點上應當相同,否則受限於最小的范圍。SRGB大小決定了全局segment的SID索引的最大值。
思科默認16000-23999,共8000個segment。可修改
SRGB與anycast segment
同一anycast集合中的所有節點應適用相同SRGB來簡化操作。最好網絡中使用相同的SRGB。
SRGB為節點屬性,與SR協議無關,修改SRGB會導致流量中斷
SGRB配置的優先級應用順序:每個IGP實例的配置>全局配置>默認
BGP僅使用全局SRGB,無默認值,必須顯式的配置。
- 標簽空間默認划分范圍:
- 0~15:特殊用途保留
- 16~15999:靜態MPLS
- 16000~23999:默認SRGB
- 大於24000,用於動態標簽分配
動態標簽的例子:LDP 、RSVP、L2VPN、BGP、TE、 ISIS、OSPF
在路由器啟動時,LSD會優先讓SR的控制平面協議(ISIS, OSPF和BGP)優先發起注冊,並執行SRGB的分配。
LSD首先等待SR協議客戶端去注冊,比如ISIS或OSPF,等他們激活分配標簽后,再為其他MPLS應用分配本地標簽。
- 每個節點保留一個范圍的本地標簽,用於全局segment的SGRB
- Prefix-SID是SRGB中的唯一索引
- 前綴始發節點使用Prefix-SID通告索引