天天看點

MPLS + BGP進階特性

LDP是否會為BGP路由配置設定标簽?為什麼?

<a href="http://s3.51cto.com/wyfs02/M01/73/F1/wKioL1YKXeqDh--uAADO8mbg56g863.jpg" target="_blank"></a>

---之前我們說LDP都是為IGP配置設定标簽,從來都沒有說為BGP配置設定标簽.

下面用一個實驗來說明一下LDP+BGP的工作方式.

純IP網絡的轉發方式:

<a href="http://s3.51cto.com/wyfs02/M02/73/F1/wKioL1YKXevTS8KKAADKiFkhGyc794.jpg" target="_blank"></a>

該拓撲圖中,R1和R4建立EBGP鄰居. R3和R5建立EBGP鄰居.

R1和R3之間建立IBGP鄰居.

R1-R2-R3之間的IGP協定是OSPF.

R4 bgp中network 44.1.1.1 mask 255.255.255.255

R5 bgp中network 55.1.1.1 mask 255.255.255.255

問題:

最終,R4和R5通過BGP都會學習到對端的BGP路由. 首先有一個問題,就是R4 ping 55.1.1.1 source loo0,或者是R5 ping 44.1.1.1 sou loo0,會通嗎?

-------------答案是不通. 通過做實驗就能證明. 原因就在于R2上面.如果純IP的話,R2就是一個路由黑洞.

在R2上面,既沒有44.1.1.1的路由,也沒有55.1.1.1的路由. 如果要想讓R4和R5兩個路由器通,除非,讓R2也參與到BGP中來,方法很多。R2作為RR路由反射器。R1和R3都是R2的用戶端.再或者用聯盟.總之一定要讓R2也能學習到相關44.1.1.1/55.1.1.1的路由,那麼在純IP環境中才能進行通訊.

否則R2就是一個路由黑洞.

MPLS标簽轉發方式:

拓撲圖依舊,隻是中間AS 100區域,R1,R2和R3之間運作MPLS IP.

這個時候,R2依然沒有運作BGP.

其他條件和上面純IP轉發一緻.

<a href="http://s3.51cto.com/wyfs02/M00/73/F1/wKioL1YKXeyCBmlDAADaAEOlqNs890.jpg" target="_blank"></a>

在這種情況下,R4 network 44.1.1.1/32進入BGP. R5 network 55.1.1.1/32進入bgp.

問:是否R4能ping通R5,為什麼?

-------通過實驗發現,能通.

<a href="http://s3.51cto.com/wyfs02/M01/73/F1/wKioL1YKXe2xLxvmAADnjOYcNYQ532.jpg" target="_blank"></a>

結論:在ASBR上面,收到了一個IP資料包。

對于R1來說,該封包源是44.1.1.1.目的是55.1.1.1, 從R1的e0/1進IP,從R1的e0/0 MPLS出.

目的地是去往一個bgp條目的.那麼這個時候會打上一個标簽,這個時候會給bgp路由的下一跳打上一個标簽.

這就是為什麼R2沒有去往55.1.1.1或者44.1.1.1的路由,依然會有标簽,因為标簽是針對于11.1.1.1或者33.1.1.1的。R2有路由字首,并且有相關的标簽映射.

是以,一定要保證ASBR上面有明細的路由。否則資料包到了ASBR會因為核心路由表沒有條目而丢包.

下面來看看這個資料流如何走:

<a href="http://s3.51cto.com/wyfs02/M02/73/F1/wKioL1YKXe6BzUSSAADsGKlKebM717.jpg" target="_blank"></a>

在R4上面, ping 55.1.1.1 source loo0.

1, 首先R4需要有55.1.1.1的字首路由資訊.

<a href="http://s3.51cto.com/wyfs02/M01/73/F4/wKiom1YKXeXijR8KAABEqbRqUh4076.jpg" target="_blank"></a>

這裡在R4的核心路由表中,對于該路由,下一跳是14.1.1.1.可達.那麼資料包就送到了R1上面去.

2, 當該IP封包送到R1的時候,是IP---&gt;MPLS,應該檢視CEF表.

下面是R1所有的相關表項.

首先,R1有核心路由表的路由:

show ip route

B 55.1.1.1 [200/0] via 33.1.1.1, 02:40:13

這裡,R1要到55.1.1.1,bgp路由下一跳是33.1.1.1.

其次,show ip cef表,發現55.1.1.1的字首,被遠端R2配置設定了一個label=17.

再次,在LFIB中,發現17這個标簽,其實是對33.1.1.1(剛好是bgp字首下一跳)進行配置設定的标簽.

最後該資料包會PUSH進一個17的标簽通過R1的e0/0轉發給R2.

<a href="http://s3.51cto.com/wyfs02/M01/73/F4/wKiom1YKXefiPVLvAANUoSL8L9s761.jpg" target="_blank"></a>

3, 當MPLS封包,攜帶label=17,進入了R2的e0/0.

R2的标簽轉發表如下:

<a href="http://s3.51cto.com/wyfs02/M02/73/F1/wKioL1YKXfKDgaXHAAC7khNgjpc937.jpg" target="_blank"></a>

對于進來的17的MPLS封包,在R2上面會将該标簽彈出,因為33.1.1.1/32是R3的直連,R3會配置設定一個隐式空标簽給33.1.1.1字首,并且分發給R2.當資料包到了R2以後,剝離标簽,pop label(PHP倒數第二條彈出機制).然後IP封包轉發給R3.

4, R3收到這個封包以後. 發現封包目是55.1.1.1.查找路由表:

R3上面的路由表:

<a href="http://s3.51cto.com/wyfs02/M00/73/F1/wKioL1YKXfOCbLzCAAA4QxctR_s603.jpg" target="_blank"></a>

在R3上面,到達55.1.1.1,下一跳是直連路由35.1.1.5. 是可達的。是以資料包轉發到R5.

5, 資料包到R5上面,最後成功轉發。

=============================================

思考:如果R1和R3不用loopback作為bgp的source, 而用實體接口,R4和R5還能通訊嗎?

之前的應用是R1和R3用環回口建立的IBGP.

<a href="http://s3.51cto.com/wyfs02/M01/73/F1/wKioL1YKXfTQYoyxAAEZ1J_CZs4782.jpg" target="_blank"></a>

思考,如果用直連建立IBGP鄰居的話,是否R4和R5依然可以通過MPLS域進行通訊,為什麼?

-----------答案是否定的。

原因:資料包到了R1以後,R1上面的路由表會變成:

B 55.1.1.1 [200/0] via 23.1.1.3,

R2會認為,23.1.1.0/24是自己的直連路由,那麼R2會配置設定一個空标簽給23.1.1.0/24.分發給R1和R3.

R1上面對于23.1.1.0是沒有标簽的.

等IP資料包到了R2以後,R2查詢,無标簽,那麼查詢路由表,因為R2根本就沒有啟用bgp,也沒有44.1.1.1/55.1.1.1的路由,是以R2又變成了路由黑洞. 主要的目的是利用标簽将資料包使用标簽交換發送到R3上面,這樣R3才能進行路由查詢轉發資料.

本文轉自 hny2000 51CTO部落格,原文連結:http://blog.51cto.com/361531/1699261