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--->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