一個FEC,隻會為同一個路由配置設定标簽.
同一個路由的含義:相同的字首,相同的掩碼.
那麼有一個比較典型的情況會破壞這個規則:彙總。
過來的時候是明細,分發出去是彙總.雖然符合路由查找的規律,大網段包含小網段,可是對于FEC來說,是破壞了FEC的模型。
路由彙總在MPLS域内:
在下面這個彙總的圖中來說.C是彙總點.
<a href="http://s3.51cto.com/wyfs02/M00/74/01/wKiom1YL7bHipNs1AAGW76ONn3Q830.jpg" target="_blank"></a>
路由彙總,會破壞MPLS域内不是同一條路由(字首/掩碼絕對相同)
彙總以後,以彙總點為中心,一條FEC會被分割成兩端.
在上面的圖中,從Router E傳回來一個路由. 10.1.1.0/24, 24位的掩碼,傳到D,最後傳到C,這個時候C做一個彙總,彙總成/16位的掩碼從C通告給B,B再給A.前提是C隻發送彙總路由,抑制明細路由.
這樣,這個LSP已經被破壞成了兩段.
最終,資料流在MPLS域中轉發,由一條LSP變成了兩條LSP.以router C為分界點.
非鍊路聚合,一條完整FEC路徑的情況:
下面這個拓撲圖,R4 有一個環回口.44.1.1.1/32
R5也有一個環回口:55.1.1.1/32
期間,R4,R1,R2,R3,R5,所有裝置對該兩條路由的認識都是一樣的(掩碼相同,字首相同)
這樣才能形成一個完成FEC鍊路的先決條件.
<a href="http://s3.51cto.com/wyfs02/M01/74/01/wKiom1YL7bLxrgMwAAEXvJeyLdo503.jpg" target="_blank"></a>
從R4到R5是一條路徑,可以通過traceroute來進行檢視:
<a href="http://s3.51cto.com/wyfs02/M02/74/01/wKiom1YL7bPAWiGaAAHoupjmiFs603.jpg" target="_blank"></a>
從traceroute的結果來說,對于R4上面的55.1.1.1,R1配置設定的标簽是102.
R2為55.1.1.1配置設定的标簽是202.
R3為55.1.1.1配置設定的标簽是302.
R5上面,因為55.1.1.1/32是直連,配置設定的标簽是implict-null(3), 一個空标簽.
是以traceroute的路徑是:
label: 102-->202-->302-->(3)implict-null
這裡整條路徑是一條路徑.沒有做鍊路聚合.
鍊路聚合,一條不完整FEC路徑的情況:
現在,R1,2,3,4,5,中間我們做一個路由聚合,讓大家5台裝置對這個字首的認識不統一,看看會有什麼樣的情況發生.
最終標明R2做一個路由彙總.把/32位的路由彙總成/24位.
OSPF在同一個區域是不能做彙總的,是以環境需要稍微改造一下,R2--R3--R5屬于區域1中.
<a href="http://s3.51cto.com/wyfs02/M00/74/01/wKiom1YL7bXDVudSAAHYgwHB6w8117.jpg" target="_blank"></a>
在R2上面的ospf程序中,對area1進行一個55.1.1.1/32--->55.1.1.0/24的路由彙總.
最終通告給R1和R4,意思是R1和R4上面學習到的路由針對于55.1.1.0/24是24位的掩碼,而不是32位的。
最終,R4 traceroute 55.1.1.1的結果是:
<a href="http://s3.51cto.com/wyfs02/M01/74/01/wKiom1YL7bbwtzNTAAHV0MXwi9E195.jpg" target="_blank"></a>
這裡可以看到R4的資料包到了R1,R1對55.1.1.0/24配置設定的标簽是100.
當資料包到了R1以後,R2因為55.1.1.0/24是直連,是以配置設定的是空标簽給R1.R1将100标簽移除.将IP封包送給R2.
R2拿到這個IP封包,經過查詢,目的是55.1.1.1,他上面有55.1.1.1/32的路由,R3會為這個字首配置設定一個标簽30x給R2.
這個時候R2再将這個IP封包壓入标簽30x,然後進入MPLS轉發流程.
R2壓入30x的标簽進入該封包,送到R3,因為R5上面55.1.1.1/32是直連路由,R5會配置設定空标簽(3)給該字首,并且将(3)分發給R3.
是以該MPLS包送到R3的時候,R3會移除之前的30x,然後剝離标簽,直接發送IP封包給R5.
是以本身一段完整的LSP,最後被分割成了兩斷。
以R2為分界點.
下面是整個标簽準發的整個流程:
<a href="http://s3.51cto.com/wyfs02/M02/74/01/wKiom1YL7bjgQB1LAAOdPCZhvZk532.jpg" target="_blank"></a>
最後,再來整理一下标簽分發的過程:
1,R4始發該封包:
R4上面,路由表中對于55.1.1.x/24是24位的,因為R2做了area1的彙總,不會有明細32位的路由:
<a href="http://s3.51cto.com/wyfs02/M00/74/01/wKiom1YL7bqwpH_BAACYu8qVd3o488.jpg" target="_blank"></a>
在R4上面,outgoing的标簽應該是R1針對55.1.1.0/24配置設定過來的:
<a href="http://s3.51cto.com/wyfs02/M01/74/01/wKiom1YL7buQoB9QAADEwWZA7tY834.jpg" target="_blank"></a>
這樣,IP包進入R4,然後R4 PUSH進一個100的标簽.将該MPLS封包轉發給R1.
2, R1轉發MPLS封包.
R1上面對于55.1.1.0/24的路由字首,是由R2配置設定的标簽.
因為55.1.1.0/24是由R2産生的,也可以認為是R2的直連路由,是以R2會配置設定一個空标簽給R1.
R1現在收到标簽為100的MPLS封包,會做的動作是pop彈出該标簽.
<a href="http://s3.51cto.com/wyfs02/M02/74/01/wKiom1YL7byTGRBTAAEoV09BoX4792.jpg" target="_blank"></a>
因為R1為55.1.1.0/24配置設定的是一個(3),隐式空标簽.
是以R1收到了相關的100标簽的封包,直接彈出,然後通過接口eth0/0發送給R2.
==============至此,第一個LSP已經完畢了===========================
==============下面是第二條LSP====================================
3, R2收到IP封包,繼續PUSH然後轉發MPLS封包給R3.
R2這個時候收到一個封包,目的位址是55.1.1.1.
IP進,MPLS出,應該查詢cef表:
<a href="http://s3.51cto.com/wyfs02/M00/74/01/wKiom1YL7b3R1sUvAADGx915bKo041.jpg" target="_blank"></a>
R3為55.1.1.1/32路由字首配置設定的标簽是302.R2會将302作為出口PUSH進入那個IP包.然後通過e1/0轉發給R3.
4, R3收到MPLS封包,pop掉标簽,純IP轉發給R5.
因為55.1.1.1/32是R5的直連路由,是以R5會配置設定空标簽(3)給LDP鄰居R3.
MPLS進,mpls出,檢視R3的标簽轉發表:
<a href="http://s3.51cto.com/wyfs02/M01/74/01/wKiom1YL7b6jFf7FAAEs4_PMshw480.jpg" target="_blank"></a>
當R3收到标簽是302的MPLS封包,會pop掉标簽,然後通過Et0/0發送純IP封包給R5.
最終R5收到了相關IP封包,本地直連路由。單向通訊搞定。
是以最終的測試結果是:
<a href="http://s3.51cto.com/wyfs02/M02/74/01/wKiom1YL7cDgz5oeAAVYTkP5Jck580.jpg" target="_blank"></a>
本文轉自 hny2000 51CTO部落格,原文連結:http://blog.51cto.com/361531/1699680