【实战】MPLS单域通信过程详解
一、背景說明
?
本文專門從路由傳輸與數據傳輸兩個維度詳細講解傳輸的過程,上文實驗拓撲如下圖所示,為了簡單起見,只已客戶A為例(紫色)進行描述
?
二、路由傳輸層面
?
R5與R1之間通過ospf 1學習到5.5.5.5/32網絡?
?
將5.5.5.5/32路由導入R1上的instance A中,在bgp路由表中能看到5.5.5.5/32的起源路由器為R1,起源方式為incomplete?
由于R1和R3底層已經通過ospf建立鄰居關系,bgp協議的update包可以直接通過“一跳”的方式將路由從R1傳到R3?
由于R3上也創建了VRF,所以R1將5.5.5.5/32傳給R3時將普通的bpg報文變成mp-bgp報文傳送給R3,其中通過rd值來表示路由的唯一性,rt值告訴R3該路由應該放進R3上哪個VRF中,rt值信息粘附在R1傳給R3的bgp update報文community擴展屬性中?
一并傳給R3的還有R1通過mp-bgp為5.5.5.5/32分配的標簽值,此處為1028?
這一點也可以從R1上看到?
?
最后,R3將5.5.5.5/32由mp-bgp引入ospf1,在通過ospf1發給R7,至此路由信息傳送完成?
?
由上述可知,在整個過程中,PE(R1,R3)設備的任務最為繁重,他需要將普通的bgp路由條目轉換成mp-bgp的4路由條目,再通過lsp隧道發出,pe路由器的功能模塊在此過程中如下圖所示?
可以看到BGP除了本身的4路由表外,還單獨為每個vrf實例維護了一張路由表
?
三、數據傳輸層面
?
首先數據包從R7出來,目的地址是5.5.5.5/32?
?
由于R1,R2,R3之間還運行了ldp協議,所以當數據包到達R3時,棧底先壓上R1的mp-bgp為5.5.5.5/32分配的標簽1028,外層再壓上R2為1.1.1.1/32分配的標簽1025傳送給R2?
之所以壓上R2為1.1.1.1/32分配的標簽,是因為在R3的fib表中,去往5.5.5.5/32走的是0x3隧道?
而在0x3隧道中目的地址變成了1.1.1.1,下一跳是R2的g0/0/1接口,標簽為1025?
?
數據包到達R2后,剝離外層標簽,再發給R1?
?
R1根據MP-BGP分配的標簽值放入相應的VRF中,最后以ip報文的形式發送給R5,至此數據傳輸完成?
整個過程可以在R7上進行標簽路徑查看?
?
四、RD、RT與MP-BGP label詳解
1.RT詳解
當R1要把路由傳給R3時,由于R3上也運行了vrf,所以就需要有一種判斷機制來確定將路由存放到那一個vrf中,而rt的引入就是結局這個問題,他作為只對vrf感興趣的判斷依據,存放于BGP updata的擴展community屬性中,所以rt屬于控制(路由傳輸)層面的參數
2.RD詳解
關于rd值,以R1為例,很多解釋說他是為了在R1上標識路由的唯一性,其實這個說法并不準確,再往深層次的挖,就算R1上instance A與instance B使用了相同的路由,但BGP updata報文中的rt值已經判斷出要傳輸的路由屬于哪個vrf,所以rd值的作用并不是在此體現
還是以R1為例,假設instance A與instance B上都有5.5.5.5/32,發送給R3后,由于有rt這個擴展屬性,所以R3使能分辨出該放到哪個vrf中的,但之后如果R1給R3發的是一種撤銷報文(route reserve),這種報文與BGP的updata不同,他不會去查看屬性,所以此時的R3就不知道該撤銷那個vrf中的5.5.5.5/32,rd也只是在這種場景下發揮作用。這也是為什么rd是粘附在路由前綴之前,而rt在擴展屬性中,rd與rt一樣屬于控制(路由傳輸)層面的參數
3.Label詳解
首先要說明的是,label屬于轉發(數據傳輸)層面的參數。當R1將路由傳遞個R3后,R3將數據要發送給R1,此時他知道如何去往R1,但數據包送到R1的那個vrf中卻無法判定,所以bgp在通過rt值將路由發送過來時,一并附帶一個label值,就是用于告訴R3將數據發往哪個vrf的。
總結
以上是生活随笔為你收集整理的【实战】MPLS单域通信过程详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【教程】Linux 系统下对目录扩容的方
- 下一篇: 99%网工都会遇到的10道经典面试问题