OpenFlow 軟體定義網路 SDN 網路 協定

軟體定義網路入門第一課 學會轉發平面與控制平面

2016-05-10
此篇文章將先介紹軟體定義網路,並說明與其相關的OpenFlow控制協定,接著以深入淺出的方式講解路由器的轉發平面與控制平面的運作方式。
Link-State路由演算法會使用以下五種資訊來維護整個路由資訊:

·LSA(Link-State Advertisements)
·網路拓撲資料庫(Topological Database)
·最短路徑優先(SPF)演算法
·最短路經優先樹狀結構
·存放網路路徑的路由表(Routing Table)

其中,網路拓撲資料庫也被稱為Neighbor-ship Database,而最短路徑優先(SPF)樹狀結構也被稱為Link-State Database,而最後用來存放網路路徑的路由表就相當於存放「最佳路徑」的地方。

預設路由

事實上,預設閘道可以透過靜態路由來設定。所謂的預設路由就是當不知道要將這個封包送往哪裡的時候,就會採用這個預設路由所指定的路徑。以下採用上面的範例來說明,在該範例中,若要在路由器B設定,讓那些不知道要送往哪裡的封包都送到路由器A,其設定方式如下:


這個指令的不同之處,就在於把將目的地的網路IP設定為0.0.0.0,並將網路遮罩也設定成0.0.0.0。

預設上,Classful的路由協定都會假設所有直接連接於這個路由器設備的子網路都被塞到自己的路由表內,當路由器設備收到一個封包,而這個封包的目的端網路不存在於這台路由器設備的路由表內,那麼這台運行於Classful路由協定的路由器設備就會把這個網路封包給丟棄,因為這台路由器設備會假設這樣的目的端網路並不存在,即使有設定預設路由,也是一樣。

例如圖5般的網路架構,若路由器B沒有把前往路由器A的路由加到路由表內,則透過路由器A要前往另一端網路的封包都會被丟棄。但是,網路管理人員可以藉由「ip classless」指令來避免這樣的事情發生,這個指令執行於Global Configuration模式之下,而且預設為啟動。


▲圖5 網路架構範例。

依照圖5的網路架構,可以在路由器B設備上執行下列的指令來做設定:


這樣一來,當路由器B收到的封包,其封包的目的端網路位址即使沒有存在於路由器B的路由表內,路由器B設備也會把這個封包轉送給預設路由所指到的路由器設備,而不會直接丟棄。

FIB設計的產生

路由表(Routing Table)就是轉發平面會使用的資料來源,不過也有可能會使用獨立出來的Forwarding Information Base,簡稱FIB。所以,如果看到RIB、FIB或是路由表,都是轉發平面會使用的資料來源。

不過,不同的是FIB裡面的資料就是專門給轉發平面使用,所以FIB裡面的資料量會比RIB或是路由表還要少,還要精簡,也因此,查找速度也快上許多。

但是RIB或路由表的優點就是可以藉由良好的路由協定設計,快速有效地做出精準的資料更新。早期的路由器可能用Hash Table的方式來製作FIB,最主要的考量就是查找速度,而可能會用Linked list的方式來製作RIB或是路由表。因此,FIB的資料量一般會小於或是等於RIB的資料量。

轉發平面的效能考量

轉發平面扮演著極為重要的角色,一旦網路封包送進來到路由器後,轉發平面是第一個要馬上處理的元素,而且收到網路封包後,還要處理很多事情,所以效能考量是一件很重要的事情。以下這些都是路由器在轉發網路封包時,在效能上扮演著重要的角色:

1. 拆解(Extract)和解碼(Decode)網路封包取得Header中所需的資料。
2. 分析(Analyze)網路封包的資料。

其實還有很多細節都與轉發平面的效能有關,例如使用RIB或使用FIB等等。一般家用的路由器比較便宜,可能整台會有一個處理器(Processor)在處理所有的需求。有些比較進階高級的路由器會包含許多處理器,分別處理各種相同、甚至於不同種類的網路需求。

除了透過使用比較多的處理器(可以是多顆處理器,或是一顆多核處理器)以硬體的方式來提升效能外,稍早也提到可以把FIB用Hash Table的方式來實作,提升查找的速度。

除了這些方式以外,有些路由器會使用二元樹(Binary Tree)、基數樹(Radix Tree)等方式來提升效能。而在硬體的部分,Content Addressable Memory(簡稱CAM)也經常拿來被使用,以便提升查找速度。

當然還有許多關於「搜尋」領域的研究或是主題可以使用,與大部分這些主題一樣,在關切搜尋查找速度的同時,所耗費的記憶體或者硬碟空間是另外一個相當重要的課題。

記憶體的部分,Cisco設備也會使用共享記憶體(Shared Memory)技術,所以路由器就會切分成多個轉發元素(Forwarding Element),每一個轉發元素都有自己的FIB,但是多個轉發元素會共用Shared Memory或Shared Bus,此時,這些Shared Memory或Shared Bus就可能會成為效能的關鍵,Cisco 7500路由器就是這樣的設計,而每一個Shared Bus每一秒大約可以處理兩百萬個網路封包。

什麼是控制平面

在路由的技術裡面,除了轉發平面外,還有一個稱為控制平面(Control Plane)。控制平面最主要的目的在於建立剛才一直提到的路由表,進而刻畫出整個網路拓撲,決定當網路封包進來的時候,應該要如何做,這包含決定網路封包應該要由哪一個介面轉發出去,或者是否應該要丟棄,所以控制平面建立這樣的資料後,再由轉發平面去執行。

因此,之前的文章談了很久的路由協定,包含RIP、IGRP、EIGRP等等,都是用很多不同複雜的演算法來建立路由表,這些動作就都是控制平面所負責的。

結語

到目前為止,已經知道轉發平面(Forwarding Plane)在軟體定義網路(Software Defined Network)中扮演相當重要的角色,網路管理人員可以撰寫程式,透過OpenFlow協定來遠端控制轉發平面,進而得知如何處理網路封包。

而在一般情況下,轉發平面會使用路由表(或是RIB、FIB)中的資料來決定如何轉發網路封包,但也可能因為安全性的考量而直接丟棄封包,這件事情有可能會在轉發之前或是決定轉發之後去執行。而路由表則是由控制平面透過各種不同的路由協定來建立並且維護。

<本文作者:胡凱智,前在美商Mozilla擔任全球技術專案總監,同時擔任全球開放式網路設備(Open Web Device)協議審查董事會(Compliance Review Board)的技術主席(Technical Committee Chairman)。曾於趨勢科技任職七年多,有兩年美國矽谷工作經驗,在美國專利局擁有軟體專利。讀者交流建議:https://www.facebook.com/khu.page>


追蹤我們Featrue us

本站使用cookie及相關技術分析來改善使用者體驗。瞭解更多

我知道了!