本節書摘來自異步社群《mpls在cisco ios上的配置》一書中的第1章,第1.8節,作者 【美】lancy lobo, ccie #4690 , umesh lakshman,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視
mpls在cisco ios上的配置
運作幀模式mpls的lsr之間可以交換ip資料包或mpls資料包,例如次末跳lsr和末跳lsr之間交換ip資料包,其他lsr之間交換mpls資料包。lsr處理mpls資料包時,需要首先解析幀頭,找到标簽的資料結構,然後對标簽執行壓标簽、彈标簽或交換标簽操作。mpls網絡工作在幀模式時,lsr之間的互聯鍊路封裝協定可以是hdlc/ppp、以太或atm。
請讀者注意,atm以信元的方式為我們提供了2層資料轉發服務,ip over atm就是用信元來傳輸ip資料包。路由模式pvc以atm為底層封裝協定,為兩端的節點提供了3層的點對點鍊路。在這種情況下,盡管封裝協定是atm,但是mpls仍然工作在幀模式。
圖1-14描述了幀模式mpls的lsr執行标簽配置設定和标簽分發的過程。在圖1-14中,假設4台lsr都完成了igp收斂和建立ldp會話,4台lsr都為網絡字首172.16.10.0/24配置設定了本地标簽,并通過ldp向上遊分發。lsr根據igp和ldp的資訊,生成了ip轉發表、标簽表和标簽轉發表的相應表項。
如圖1-14所示,e-lsr r1為網絡字首172.16.10.0/24配置設定了本地标簽implicit-null,并通過ldp分發給上遊lsr r2。lsr r2和r3分别為網絡字首172.16.10.0/24配置設定了本地标簽l2和l3,并通過ldp分發給各自的上遊lsr。标簽分發的方式可以是下遊按需方式或者下遊主動方式,唯一的差別是lsr向上遊lsr分發标簽之前,是否需要接收上遊lsr的标簽請求。在完成标簽配置設定和标簽分發以後,lsr的ip轉發表、标簽表和标簽轉發表都會生成與網絡字首 172.16.10.0/24相關的表項,如圖 1-14所示。
lsr轉發去往網絡172.16.10.0的資料包的過程如圖1-15所示。e-lsr r4接收ip資料包,用l3(出向标簽)封裝此ip資料包,将得到的mpls資料包轉發給下遊lsr r3(下一跳)。r3執行交換标簽操作,用出向标簽l2替換本地标簽l3,将得到的mpls資料包轉發給下遊lsr r2。在r2的标簽轉發表中,本地标簽l2對應的出向标簽是implicit-null,暗示着r2需要執行次末跳彈出,是以,r2删除頂層标簽l2。在本例中,mpls資料包的标簽棧隻包含1層标簽,r2删除頂層标簽即删除了整個标簽棧,是以,r2的次末跳彈出操作将mpls資料包轉化為ip資料包。
路由器接收一個 2 層幀,可以根據幀頭中的協定/類型(protocol/type)字段判斷出負荷的類型。以以太網為例,以太幀或802.3幀的第 13位元組 和第 14 位元組(前導比特後面)是“以太類型”或“ieee802.3 長度”字段。如果字段的值是 0x0800,那麼幀負荷中承載了 ip 資料包;如果字段的值是0x08847,那麼幀負荷中承載了mpls資料包。是以,路由器可以識别出幀的負荷中承載了 ip資料包或mpls資料包。
ldp或tdp是lsr分發标簽的重要途徑,但是,ldp和 tdp本身不具備防環機制。如前所述,lsr使用ldp和igp生成标簽轉發表的資訊,其中igp具備較完善的防環機制,可以有效地防止mpls網絡出現環路。一旦mpls網絡出現了環路,那麼資料包會在環路中循環轉發。為了避免這種情況,mpls标簽中包含了ttl字段,稱為标簽ttl。标簽ttl的取值範圍是0~255,mpls資料包每經過一個lsr時,其标簽ttl的值就會減1。相比之下,ip資料包的封包頭也包含ttl字段,稱為ip ttl,其功能與标簽ttl類似。
當 ip資料包的ttl減至0時,路由器丢棄此ip資料包,并且向資料源發送“ttl過期”的icmp消息。這種機制可以防止ip資料包在環路中循環轉發。标簽ttl的工作機制與ip ttl相似。
當一個ip資料包進入mpls網絡以後,入向e-lsr将ip ttl值複制至标簽ttl字段中。當mpls資料包經過lsr時,标簽ttl會遞減 1。出向e-lsr将mpls資料包轉化為ip資料包時,将标簽ttl值複制至ip ttl字段。這個過程稱作ip ttl向标簽ttl的傳遞(ip to label ttl propagation),簡稱ttl傳遞(ttl propagation)2。
在mpls網絡中,e-lsr可以禁用ttl傳遞。當ttl傳遞被禁用以後,入向 e-lsr不複制ip ttl至标簽ttl,而是将标簽ttl值設定為255。cisco路由器預設開啟 ttl傳遞功能。在e-lsr上配置的指令no mpls ip propagate-ttl [forwarded | local]可以針對e-lsr轉發的流量(使用關鍵字forwarded)或e-lsr本地生成的流量(使用關鍵字local)禁用ttl傳遞。e-lsr本地生成的流量是指e-lsr以本地loopback接口或互聯接口的ip位址作為源位址,向外發送的資料。
如果e-lsr開啟了ttl傳遞,那麼traceroute可以顯示轉發路徑上的逐跳路由節點,包括組成lsp的所有lsr。例如,e-lsr處理非本地生成的流量時,可以使用forwarded關鍵字關閉ttl傳遞。是以,當客戶希望使用traceroute指令顯示提供商的網絡拓撲時,提供商可以實作其網絡拓撲對客戶透明。這是提供商的mpls網絡最常見的配置政策之一。
但是,對于e-lsr本地生成的流量,ttl傳遞是生效的。是以,提供商仍可以使用traceroute指令執行排錯(troubleshooting)。如果不顯式配置關鍵字forwarded或local,那麼e-lsr對任何流量都禁用ttl傳遞,即完全隐藏mpls網絡的拓撲。
在圖1-16中,如果e-lsr配置了no mpls ip propagate-ttl forwarded指令,那麼客戶路由器a向路由器 b執行traceroute指令的步驟如下。
1.路由器 a 發送一個traceroute資料包,目的位址是 172.16.20.1,ip ttl值是1。當e-lsr r1接收此ip資料包以後,将ip ttl遞減至0,并向資料源發送ttl過期的 icmp消息。
2.路由器 a 發送一個traceroute資料包,目的位址是172.16.20.1,ip ttl值是2。e-lsr r1接收此ip資料包,遞減ip ttl至1。r1已經禁用了 ttl 傳遞功能,是以r1執行壓标簽操作時,設定标簽ttl為255。r2和r3向目的網絡轉發資料包,隻遞減标簽ttl而不修改ip ttl。e-lsr r4遞減ip ttl至0,并向資料源發送ttl過期的 icmp消息。
3.路由器a發送一個traceroute資料包,目的位址是172.16.20.1,ip ttl值是3。e-lsr r1接收此ip資料包,遞減ip ttl至2。r1已經禁用了ttl傳遞功能,是以r1執行壓标簽操作時,設定标簽ttl為255。r2和r3向目的網絡轉發資料包,隻遞減标簽ttl而不修改ip ttl。e-lsr r4遞減ip ttl至1,并将ip資料包轉發給路由器b。路由器b遞減ip ttl至0,并向資料源發送ttl過期的icmp消息。
在圖 1-16 中,如果e-lsr r1向 e-lsr r4執行traceroute指令,那麼結果會顯示lsp上的所有lsr,因為r1沒有對本地生成的流量禁用ttl傳遞。
1準确地說,lsr遞減頂層标簽的ttl值。—譯者注
2準确地說,ttl傳遞是入向e-lsr将ip ttl複制至标簽ttl的過程。請讀者注意,出向e-lsr不應将标簽ttl複制至ip ttl。—譯者注