天天看點

超詳細MPLS學習指南 手把手帶你實作IP與二層網絡的無縫融合

作者:愛講網絡技術的闫輝

大家晚上好,我是小老虎,今天的文章有點長,但是都是幹貨,耐心看下去,不會讓你失望的哦!

超詳細MPLS學習指南 手把手帶你實作IP與二層網絡的無縫融合

随着ASIC技術的發展,路由查找速度已經不是阻礙網絡發展的瓶頸。這使得MPLS在提高轉發速度方面不再具備明顯的優勢。

但由于MPLS結合了IP網絡強大的三層路由功能和傳統二層網絡高效的轉發機制,在轉發平面采用面向連接配接方式,與現有二層網絡轉發方式非常相似,這些特點使得MPLS能夠很容易地實作IP與ATM、幀中繼等二層網絡的無縫融合,并為流量工程TE(Traffic Engineering)、虛拟專用網VPN(Virtual Private Network)、服務品質QoS(Quality of Service)等應用提供更好的解決方案。

那今天我們就拿好小本本 認真了解MPLS多協定标簽交換MPLS:

在傳統的IP轉發機制中,路由器是基于CPU(軟轉發)和模糊比對的方式進行資料轉發,轉發效率非常低;MPLS目的就是取代傳統IP的轉發機制;通過在IP資料包前添加标簽,在路由器上形成LFIB表,路由器在資料轉發時基于ASIC精确比對标簽進行轉發,進而大大提高了三層的轉發效率。

超詳細MPLS學習指南 手把手帶你實作IP與二層網絡的無縫融合

注:随着ASIC技術的發展,目前路由器的硬體性能和速率都比較高了,MPLS的優勢已經不是很明顯了;現在MPLS的優勢主要展現于其擴充應用方面,如MPLS-VPN、MPLS-TE流量工程和服務品質QoS。

1

工作原理

MPLS是一項旨在網絡中提高IP包轉發速率的技術,它需要在一個傳輸網絡中整體部署(營運商内網)。

對于部署了MPLS的網絡,會在網絡入口處的路由器上對進入流量進行分類,然後為不同類别的流量打上一個标簽。

流量進入網絡後就被打上了不同的标簽;網絡内部的路由器在收到流量的時候,是按照标簽來進行流量轉發的,不再去查找IP路由表;流量發出網絡時就被移除标簽。

MPLS的報頭和封包封裝:

Layer2/MPLS*x/IPv4/DATA/FCS,可包含多重标簽

超詳細MPLS學習指南 手把手帶你實作IP與二層網絡的無縫融合
  • 标簽長度:20bits,取值0-1048575,0-15是特殊标簽,其他正常使用。
  • EXP(試驗位)長度3bits,用于二層QOS
  • S(标記位)長度1bit,用于表示是外層标簽/内層标簽。
  • TTL長度8bits

MPLS有兩種封裝模式:幀模式和信元模式(ATM)。

幀模式封裝是直接在封包的二層頭部和三層頭部之間增加一個MPLS标簽頭,以太網/PPP采用這種封裝模式。

2

路由器的交換機制

1.程序交換:路由器針對收到的每個資料包都需要進行三層和二層表項的查詢,其中三層表項查詢是為了确定出接口和下一條,二層表項查詢(ARP)是為了擷取目的MAC位址實作二層的重新封裝;并且是基于CPU進行查詢,效率很低。

2.快速交換:也稱為網流式交換(一次路由多次交換或一次查表多次轉發)。

基于資料流進行轉發,路由器可以基于流量的七元組(源目IP位址、源目端口号、協定号、ToS字段、相同的入接口)進行資料流歸納。

将滿足相同七元組條件的資料包形成一股流,在進行資料轉發的時候提取這股流的第一個資料包查三層表确定出接口查二層表确定封裝資訊,并把轉發第一個資料包使用的出接口和封裝資訊整合形成一個cache并緩存在ASIC晶片中,針對這股流的後續資料包不再進行三層資料查詢直接基于ASIC緩存的cache進行轉發。

3.思科急速轉發CEF:思科私有轉發機制,路由器啟用CEF,會形成兩張表,儲存在ASIC中。

3

轉發資訊庫FIB

是一張三層表,裝的是經過優化的路由條目,基于路由表進行下載下傳得到的,主要優化了下一跳位址,在下載下傳前将所有路由的非直連下一跳位址整合為直連的下一跳。

路由表條目發生變更的時候FIB表也會自适應進行改變,在确定出接口後,FIB中還有資源關聯鄰接表,可以确定二層封裝資訊。

鄰接表Adjaceny Table:

是一張二層表,裝的優化後的供資料封裝的二層資訊

注:在思科裝置上,如果啟用MPLS必須先啟用CEF,路由器運作MPLS需要進行标簽插入,而路由器的IP路由表不支援标簽插入,隻有FIB支援标簽插入,啟用CEF之後才會有FIB表。

轉發等價類FEC:

MPLS是一種資料層面的分類轉發技術,它将具有相同轉發處理方式(優選相同的目的位址、相同的出接口、相同的VPN目的位址、相同QOS)的分組歸為一類打上标簽,這種類别就稱為FEC轉發等價類。

路由器可以基于路由條目進行标簽分發,屬于一個FEC的流量具有相同的轉發方式、轉發路徑和轉發待遇。

但是并不是所有擁有相同标簽的封包都屬于一個FEC,因為這些封包的EXP值可能不相同,執行方式可能不同,是以他們可能屬于不同的FEC。

注:做完MPLS後就不能在MPLS域内做路由彙總或聚合,由于不同的路由器上的路由條目不一樣會導緻資料層面的黑洞;同時還要注意OSPF中環回口掩碼問題。

4

MPLS架構

  • 控制層面:使用靜态或動态路由選擇協定産生路由,形成FIB路由表。
  • 控制層面:标記分發協定TDP(思科私有/前身)、标簽分發協定LDP(公有)、MP-BGP、資源預留協定RSVP。
  • 标簽分發,基于FIB路由表中的路由條目進行标簽創造并加入FIB路由表。
  • 标簽分發隻具有本意義,兩台路由器關于同一條路由條目可以分發不同的标簽。

路由器需要将本地産生的關于一條路由條目的标簽通告給鄰居,實作标簽共享;

當收到鄰居發送過來的關于一條路由條目所對應的标簽時,會形成LIB拓撲表;

鄰居雙方标簽共享完成後,本地形成一張LFIB表供後續進行标簽資料轉發。

資料層面:根據LFIB表轉發帶MPLS标簽的封包以及轉發普通IPv4封包。

超詳細MPLS學習指南 手把手帶你實作IP與二層網絡的無縫融合

5

MPLS的工作過程

标簽壓入:給資料包添加标簽;邊界标簽交換路由器通過外部接口收到一個IPv4資料包,路由器查找FIB表發現為了轉發這個資料包需要通過連接配接MPLS的接口發走并根據FIB表中壓入鄰居分發的标簽(思科優化機制一次查表即可)。

标簽交換:MPLS域内的路由器收到一個帶有标簽的資料包,就不再檢視三層報頭的目的IP位址;路由器會根據标簽轉發資訊庫LFIB中下一跳鄰居分發給該路由的标簽進行标簽添加然後轉發出去。

标簽彈出:删除最外層的标簽;标簽移除:删除協定棧中的所有标簽

邊界标簽交換路由器R1收到從内到外的流量,路由器收到帶有标簽的封包隻能查詢LFIB,路由器查找LFIB不能确認轉發資訊,路由器查表失敗退而求其次嘗試将标簽移除根據三層報頭目的IP位址查詢FIB進行轉發。

思科路由器為了優化LSR标簽移除,開發出了PHP(倒數第二跳标簽彈出或次末跳标簽彈出),路由器會根據路由判斷自己是不是倒數第二跳路由器,倒數第二跳路由器收到最後路由器發送的一條路由條目的标簽是3,倒數路由器在将封包發給最後一跳路由器的時候會将标簽移除。

LFIB:标簽轉發資訊庫,基于标簽的路由表;包含内容如下,路由條目/本地分發的标簽/鄰居分發的标簽/出接口/下一跳

FIB:标簽資訊庫/拓撲表,關于一條路由條目本地分發的标簽是什麼,鄰居分發的标簽是什麼。、

  • FIB:轉發資訊庫,啟用CEF生成的基于IPv4的路由表。
  • 标簽交換路徑LSP:流量在MPLS域内進行轉發時經過的路徑,這條路徑在轉發流量之前就已經通過控制層面協定确定并建立的,流量會在特定的LSP上傳遞;由于PHP機制的存在,LSP不一定會端到端保持一緻。
  • 入标簽:接收到的路由攜帶的标簽,為本地産生的标簽
  • 出标簽:發送給鄰居路由攜帶的标簽,為鄰居産生的标簽
  • 本地标簽local label:關于一條路由條目,本地分發的标簽
  • 遠端标簽remote label:關于一條路由條目,鄰居分發的标簽
  • MPLS的上遊和下遊:根據資料層面路由流向,離路由源越近的路由器為下遊路由器,離資料發送者越近的路由器為上遊路由器,下遊路由器一跳一跳的把路由傳遞給上遊,與此同時上遊路由器把标簽一跳一跳的傳遞給下遊。

6

MPLS環路檢測和處理

IGP環路檢測機制和處理

TTL環路檢測

幀模式的MPLS中使用TTL

信元模式的MPLS中無TTL

LDP環路檢測機制

距離向量法:通過檢測TLV中是否包含自身的Router ID,如果包含,則丢棄

最大跳數法:通過檢測TLV中設定LSP最大跳數

MPLS對TTL的處理方式:預設使用方式一

方式一:實作不對外隐藏MPLS域内的網絡結構

超詳細MPLS學習指南 手把手帶你實作IP與二層網絡的無縫融合

方式二:實作對外隐藏MPLS域内的網絡結構

超詳細MPLS學習指南 手把手帶你實作IP與二層網絡的無縫融合

MPLS解決BGP資料層面黑洞的原理:

R4--R2--R1--R3--R5

當一台路由器使用一條BGP路由轉發從外到内封包的時候,會針對這條BGP路由的下一跳位址查詢對應的IGP路由,根據IGP路由的遠端标簽封裝資料,R2在給R1發送的時候會攜帶關于3.3.3.0的标簽,因為R1為倒數第二跳路由器,R1在給R3發送資料的時候會彈出标簽,R3根據EBGP路由進行資料轉發。

标簽分發協定LDP:

端口号使用TCP和UDP的646,通過UDP建鄰居,鄰居建立後通過TCP發送更新及其他各種封包;支援認證。

LDP報頭/封包封裝:Layer2/IPv4/TCP或UDP/LDP/FCS

超詳細MPLS學習指南 手把手帶你實作IP與二層網絡的無縫融合

LDP Header:

Version:版本,目前版本号為1。

PDU Length:長度,表示除了Version和PDU Length以外的其他部分的總長度。

LDP Identifier:前4bit表示Router ID,後2bit表示LSR的标簽空間是路由器空間還是接口空間(路由器空間關于一條路由條目隻有一個标簽,标簽少,占用資源也少;接口空間關于一條路由條目的一個出接口配置設定一個标簽,接口空間占用資源多,但提高了安全性)。

LDP message:

U:Unknown Message bit。當LSR收到一個無法識别的消息時,該消息的U=0時,LSR會傳回給該消息的生成者一個通告,忽略該無法識别的消息。

Type:表示具體的消息類型,目前,LDP定義的常用的消息有Notification,Hello,Initialization,KeepAlive,Address,Address Withdraw,Label Mapping,Label Request,Label Abort Request,Label Withdraw,Label Release。

Message Length:M ID、M Parameters和Optiona的總長度。

Message ID:用來唯一辨別一個消息。

Mandatory Parameters和Optional Parameters分别為可變長的該消息的必須的參數和可選的參數。

LDP消息類型:

1.Discover message:通告自身存在并自動建鄰居,多點傳播位址224.0.0.

2.Session message:建立TCP連接配接,協商參數等,建立或拆除連接配接

3.Advertisement message:生成,通告及删除标簽

4.Notification message:通告告警和錯誤資訊

超詳細MPLS學習指南 手把手帶你實作IP與二層網絡的無縫融合

LDP狀态機:

超詳細MPLS學習指南 手把手帶你實作IP與二層網絡的無縫融合

▶路由器運作LDP也需要選舉RID,預設使用環回口的最大位址,如果沒有環回口,使用實體接口的最大位址,一般都是手工指定.

路由器在發送LDP hello封包的傳輸位址(Transport Address)不是實體接口的IP位址,而是Router ID;是以路由器在建立LDP鄰居的時候使用的Router ID值必須可達(直連建鄰居)。

在路由器的LDP鄰居表中,路由器關于鄰居的标簽資訊都是基于路由器的環回口位址.

而在FIB表中,所有轉發資訊都是基于直連接配接口的下一跳位址。為了将環回口和直連接配接口下一跳位址關聯起來,路由器在通過LDP建立鄰居後會将本地所有其他接口的IP位址發送給鄰居,除了環回口的其他位址預設處于隐藏狀态。

路由器啟用MPLS之後會自動啟用LDP協定;周期性發送hello建立LDP鄰居;

标簽分發:對FIB表中的每一條IGP的路由條目來說,每一台運作LDP協定的LSR都會自動分發本地标簽;

●獨立的Independent:收到IGP路由,不管有沒有收到下遊路由器發送的标簽都會分發本地标簽。

●有序的Ordered:收到IGP路由,隻有收到下遊路由器發送的标簽才能分發本地标簽。

标簽通告:LSR将該配置設定的标簽分發通告給所有的LSR鄰居,這些接收到的标簽轉換為遠端标簽,之後鄰居将該遠端标簽和本地标簽存儲于标簽資訊庫LIB;

按需通告DU:不管有沒有收到鄰居的标簽請求,形成标簽映射主動向鄰居發送。

請求通告DoD:不主動給鄰居發送标簽映射,在收到鄰居發送的标簽通告請求根據鄰居發送的請求映射給鄰居發送對應的标簽資訊。

标簽保持:通常一台LDP路由器會有多個LDP鄰居,那麼這些鄰居都會給路由配置設定标簽然後将這些标簽傳給自己,在所有捆綁某一特定字首的遠端标簽中,LSR隻使用其中一個遠端标簽來确定該字首的出站标簽。

而LSR從下遊鄰居收到的遠端标簽中選擇FIB表中到達該字首的下一跳的标簽,LSR用這樣的資訊來建立它自己的标簽轉發資訊庫LFIB。

保守Conservative:隻有下遊鄰居發送的關于下一跳路由的标簽才會接收,關于其他路由的标簽不接收。

自由Libral:鄰居發送的标簽都接收,隻有關于路由下一跳的标簽才加入LFIB

LDP的特性:

二層Type字段描述MPLS協定單點傳播0x8847;MPLS協定多點傳播0x8848

一台路由器不能為不同的路由分發相同的标簽,每條路由條目對應一個本地唯一的标簽,但是0-15标簽被保留;

  • 标簽0-顯式空标簽,收到鄰居發送的路由,自己将标簽移除;
  • 标簽1-路由器報警标簽;
  • 标簽3-隐式空标簽,鄰居發送時路由時先将标簽移除;

建立LDP建立鄰居時,傳輸位址大的一端的主動發送目的端口号646給對端

LDP基本發現機制:發現直接連接配接在同一鍊路上的LSR鄰居。

LDP擴充發現機制:發現非直連的LSR鄰居,隻能使用單點傳播建鄰居。

LDP可以給直連路由、靜态路由和通過IGP路由協定學習的動态路由分發标簽。

BGP路由的标簽由BGP自身分發,BGP隻為VPNv4路由和VPNv6路由分發标簽。

不是基于BGP路由的字首分發标簽,針對BGP路由的下一跳對應的IGP分發标簽。

RSVP既可以進行資源預留,也能夠分發标簽;在MPLS TE中可以基于Qos進行标簽分發。

MPLS-VPN:

采用MPLS技術在營運商寬帶IP網絡上建構企業IP專網,實作跨地域、安全、高速、可靠的資料、語音、圖像多業務通信,并結合差别服務、流量工程等相關技術,将公衆網可靠的性能、良好的擴充性、豐富的功能與專用網的安全、靈活、高效結合在一起,為使用者提供高品質的服務。

MPLS-VPN網絡主要由CE路由器、PE路由器和P路由器等3部分組成;

1、PE路由器:營運商的邊緣路由器裝置,與使用者的CE路由器直接相連,負責VPN業務接入,處理VPNv4路由,是MPLS三層VPN的主要實作者;

2、CE路由器:使用者網絡邊界路由器裝置,直接與營運商網絡相連,它“感覺”不到VPN的存在;

3、P路由器:營運商核心路由器裝置,負責快速轉發資料,不與CE直接相連。

控制層面:

虛拟路由轉發VRF(Virtual Routing Forwarding):

PE路由器為了解決不同的客戶使用相同的私有位址的問題,針對每一個客戶單獨建立一張獨立的VRF路由表。

VRF路由表支援命名,VRF名稱隻具有本地意義,當PE路由器把連接配接CE的接口和VRF關聯以後,控制層面和資料層面都是基于VRF路由表進行資料轉發(VRF隻能關聯到連接配接CE路由器的接口)。

PE路由器為了将VRF路由發送給對端的PE路由器,需要使用MP-BGP進行資料轉發。

首先兩台PE路由器之間先建立VPNv4鄰居,PE路由器使用MP-BGP進行資料轉發的時候,先将VRF路由轉換成VPNv4路由(x:y路由條目)添加到VPNv4 BGP表中。

一台路由器可以有多個VRF表但VPNv4 BGP表隻有一個,這樣可能會出現路由重複的狀況,為避免路由重複,路由在加入BGP路由表前需要添加RD。

  • 路由區分符RD(Route Distinguishers):在VPNv4 BGP表中辨別VRF路由條目
  • 路由目标RT(Route Targets):就是BGP中的擴充團體屬性,讓對端PE路由器收到公網傳遞的VPNv4路由的時候能知道将該路由添加到哪個VRF路由表中。

導出:PE将VRF路由添加到VPNv4 BGP表中的時候攜帶的RT值

導入:PE收到VPNv4路由之後将帶有RT值的路由加入本地對應的VRF路由表

  • VPNv4路由:攜帶了RT和RD屬性的IPv4私網路由,然後通過BGP來傳遞
  • BGP針對VPNv4路由使用MP-BGP再進行标簽分發

Layer2/VPNv4路由下一跳位址的IGP路由标簽|VPNv4标簽/IPv4/DATA/FCS