2018年12月27日 星期四

什麼是MPLS

From:http://eservice.seed.net.tw/class/class0801c.html
多重通訊協定標籤交換傳輸(Multi-Protocol Label Switching)是由IETF 所發展出來的Network Standard。它是實現寬頻網際網路最熱門的技術;其目的是要提供一個更具彈性、擴充性及效率更高的IP層交換技術。
MPLS 是一種整合了標籤交換架構與網路層的路由機制的技術,最基本的概念是將進入MPLS Network 的封包(Packet)配置一個固定長度的標籤(Label),在MPLS Network中Packet會根據標籤(Label) 做Forwarding , 由Label來決定Packet在網路上的路徑,不會再看 Layer 3的 IP Header(標頭)。
傳統IP Network 的運作方式
Packet在一般的IP Network傳遞時,路由器的運作是以所謂的"Store and Forward"的程序來做Packet路由的選擇及轉送,所以當路由器收到一個Packet時,會先儲存Packet 、分析路由、轉送Packet 到下一個適當的路由器,而當此路由器又收到下一個Packet 要傳送到相同的目的地時,它必須重覆執行相同的程序(儲存、分析、轉送),這樣是很沒有效率的而且會耗用路由器大量的CPU處理能力及記憶體空間,此外傳統的路由器是以軟體的處理方式轉送IP 封包,而MPLS的技術則是引用與ATM交換技術類似的標籤交換(Label Switching)技術,簡化了路由器的轉送功能直接利用Switching Fabric以線上速度(Line Speed)來轉送封包(Packet)到達目的地。
MPLS Label 的Format及插入Packet的位置
Label是一個4Bytes、固定長度、locally-significant identifier類似在ATM網路中VPI(Virtual Path Identifier)/VCI(Virtual Circuit Identifier)或是Frame-Relay網路中的DLCI(Data Link Circuit Identifier),Label是被插入於Packet的第二層資料鏈結層(data link layer)與第三層網路層(network layer)Header之間。
MPLS Network 的組成
MPLS 網路是由多個具有標籤交換能力的路由器LSR(Label Switch Router)互相連結所組成,根據在MPLS網路內扮演角色的不同LSR可以分為三種類型:
(1) Ingress LSR:負責將進入MPLS網路的IP Packet貼上標籤(Push Label)
(2) Core LSR:LSR則位於MPLS網路的核心,負責做標籤轉換(Label Swap)
(3) Egress LSR:當封包要離開MPLS網路到一般IP網路時,負責去除標籤( Pop Label)。

Label Assignment and Distribution的過程
  1. LSR Routing Table的建立:在MPLS網路中所有的LSR利用routing protocol來交換路由資訊,建立自己的IP Routing Table,並根據Routing Table 建立自己的FIB(Forwarding Information Base),此時的FIB中並沒有Label的資訊。
  2. LSR Allocating Label過程: 當LSR路由器開始啟動MPLS功能時,會根據由IGP(如RIP、OSPF)學來的路由表(Routing Table)內容,對於使用相同處理方式、相同path、到達相同目的地IP subnet的Routing entry 做彙整(aggregation)及分類後Assign Label。
  3. LSR 初步建立自己的LIB及LFIB:將前面步驟Allocating 的local Label資訊儲存於LIB(Label Information Base)和LFIB(Label Forwarding Information Base)中,此時的LFIB中只有local Label 的資訊並沒有outgoing Label 的資訊。
  4. LSR Label Distribution過程:LSR將他Local assign的Label資訊傳送(Distribution)給相鄰的LSR,不論這相鄰的LSR是local LSR的downstream或upstream 都會傳送,而Label Distribution 靠的是相鄰的LSR間要執行LDP(Label Distribution Protocol)的協定,來互相交換彼此的Label資訊。另外談到LDP 的特性,MPLS Device 會send/receive LDP,LDP 透過Discovery 去和Neighbor溝通對方是否有啟動MPLS及交換Label information,而LDP是用UDP protocol去discovery neighbor,並利用 TCP 去去交換彼此Label information。
  5. LSR收到相鄰LSR送來的Lable資訊做資訊的彙整過程:最後每個LSR 根據接收到相鄰LSR送來的Label 資訊後,新增這些Label資訊於自己的LIB中,並根據routing table得到的最佳路徑,獲知到某網段的Next-hop LSR 所送來的Label資訊,插入到LFIB的outgoing Label資料結構中。
Packet在MPLS網路中傳送的過程
  1. Ingress LSR(Router A):IP Packet 進入MPLS網路的第一顆LSR路由器稱為Ingress LSR,當IP Packet 進入Ingress LSR 首先會查看Packet中的Destination IP address,並且在FIB中lookup 是否有符合的IP network ,如果有則進一步查看FIB中相對應的Label欄位其值為何?(例如:IP =X ,Label=25 ),當Packet從Ingress LSR 送出時,會在此Packet中打上Label=25的標示,再傳送出去。
  2. Core LSR (Router B):當帶有Label=25的Packet傳到Router B時,Router B會查看(lookup)他的LFIB的資料,看看是否有Inbound Label=25的entry,如果有則再查看此entry中Outgoing Label的欄位值為何?(例如 Outgoing Label=47),所以Packet中的Label快速的被置換(Label=25 aLabel=47)並往下一個節點傳送出去。
  3. Egress LSR(Router C):當帶有Label=47的Packet傳到Router C時,Router C會查看(lookup)他的LFIB的資料,看看是否有Inbound Label=47的entry,如果有則再查看此entry中Outgoing Label的欄位值為何?(例如 Outgoing Label=Pop),所以Packet中的Label被移除,此時已離開MPLS網路再進入到IP的網路中,因此重新查看Packet中的Destination IP address為何?並查看其FIB以決定Packet要傳送的下一個節點 。
在MPLS網路中Egress LSR double lookup的問題
由於Egress LSR不但要查看LFIB中的資料以便移除Packet 中的Label,而且還要查看FIB中的資料以決定將Packet往IP網路的下一個節點傳送,這樣的作法會使Egress LSR 的負擔太重,而且對傳送有Label的封包也不是最有效的方式。
Penultimate Hop Popping
所以解決的方式就是在原來Egress LSR前一個節點就把Label移除,最後一顆Router 只要做IP lookup 就好了,此種運作方式稱為Penultimate Hop Popping。
結語
本篇文章從一開始介紹傳統路由器在IP 路由傳送封包的運作缺點及描述發展MPLS技術的優勢,並且說明整個MPLS 技術的運作原理,從MPLS Label的format介紹及Label在封包標頭位置的解說,到整個MPLS網路中各個不同角色LSR的運作方式,在其中更詳細的探討Label 如何被Assignment及 相鄰LSR之間如何交換彼此的Label Information的過程,另外更舉例說明封包在MPLS網路中從Push(加上)Label,一直到離開MPLS網路前Pop(去除)Label的詳細過程,最後則探討為何封包在離開MPLS網路的前一個節點(Hop)就要先Pop(去除)Label的原因。

How to use simple speedtest in RaspberryPi CLI

  pi@ChunchaiRPI2:/tmp $  wget -O speedtest-cli https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py --2023-06-26 10:4...