1. 程式人生 > >OpenFlow協議及其簡單模擬

OpenFlow協議及其簡單模擬



OpenFlow協議及其簡單模擬

在講述本文的主旨之前,先來說一說SDN的三大要素:

  1. 轉發與控制分離,這使得網路交換機的資料轉發變得更加簡單、快速;同時,控制變成了網路作業系統中一個相對集中的邏輯功能。 

  2. OpenFlow協議,它向交換機傳送轉發表,交換機依此轉發報文。這種做法與傳統網路完全不同。在傳統網路架構中,交換機和路由器需要自己決定報文的轉發路徑,這可能會給網路運營商帶來一些不可預知的負面影響,包括成本增加、效能降低、上市時間延緩 等。有了SDN,控制軟體決定報文的轉發路徑,使得運營商可以“隨心所欲”地控制網路。

3. 具有一致性的、全系統範圍的網路作業系統可程式設計介面,它能讓網路實現真正意義上的可程式設計或者軟體定義。如果不能實現轉發與控制分離,那麼幾乎所有

SDN所能帶來的好處都無法體現;如果能實現轉發和控制分離,但沒有OpenFlow協議,那麼就需要通過其它途徑,將所需要的流量表資訊傳遞給交換機。OpenFlow就是實現這一功能的行業標準.

以上可以看出OpenFlow對於SDN的重要性不言而喻,本文將就OpenFlow的相關內容做一定總結,以及簡單的OpenFlow模擬平臺的搭建.

.OpenFlow簡介

OpenFlow是由斯坦福大學的Nick McKeown教授在20084ACM Communications Review上發表的一篇論文OpenFlow: enabling innovation in campus networks首先詳細論述了

OpenFlow的原理。由該論文課題可知OpenFlow提出的最初出發點是用於校園內網路研究人員實驗其創新網路架構、協議,考慮到實際的網路創新思想需要在實際網路上才能更好地驗證,而研究人員又無法修改在網的網路裝置,故而提出了OpenFlow的控制轉發分離架構,將控制邏輯從網路裝置盒子中引出來,研究者可以對其進行任意的程式設計從而實現新型的網路協議、拓撲架構而無需改動網路裝置本身。

OpenFlow的思路很簡單,網路裝置維護一個FlowTable並且只按照FlowTable進行轉發,FlowTable本身的生成、維護、下發完全由外接的Controller來實現,注意這裡的FlowTable並非是指IP

五元組,事實上OpenFlow 1.0定義的了包括埠號、VLANL2/L3/L4資訊的10個關鍵字,但是每個欄位都是可以通配的,網路的運營商可以決定使用何種粒度的流,比如運營商只需要根據目的IP進行路由,那麼流表中就可以只有目的IP欄位是有效的,其它全為通配。

2.OpenFlow協議的四個規範

2.1 OpenFlow的埠:

物理埠:即裝置上物理可見的埠

   邏輯埠:在物理埠的基礎上由switch裝置抽象出來的邏輯埠,如為tunnel或者聚合等功能而實現的邏輯埠:

OpenFlow定義的埠:OpenFlow目前總共定義了ALL,CONTROLLER TABLE IN_PORT,ANY LOCAL FLOOD8種埠,其中後3種為非必須的埠,只在混合型的OpenFlow Switch中存在.

2.2流表

OpenFlow通過使用者定義的或者預設的規則來匹配和處理網路包.一條OpenFlow的規則由匹配域(Match Fields)\優先(Priority)\處理指令(Instructions)和統計資料(Counters)等欄位組成,如下圖所示.

Ingress Port

Ether

Source

Ether

Dst

Ether

Type

Vlan

Id

IP

Src

IP dst

IP Tos

Bits

TCP/UDP Src Port

TCP/UDP Dst Port

在一條規則中,可以根據網路報在L2  L3 或者L4等網路報文頭的任意欄位進行匹配,比如乙太網的源MAC地址,IP包的協議型別和IP地址,或者TCP/UDP的埠號等.目前OpenFlow的規範中還規定了Switch廠商可以選擇性地支援萬用字元進行匹配.

2.3 通訊通道

OpenFlow規範定義了一個OpenFlow Switch如何與Controller建立連線、通訊以及相關訊息型別等。 

OpenFlow規範中定義了三種訊息型別:

  a) Controller/Switch訊息,是指由Controller發起、Switch接收並處理的訊息,主要包括FeaturesConfigurationModify-StateRead-StatePacket-outBarrierRole-Request等訊息。這些訊息主要由Controller用來對Switch進行狀態查詢和修改配置等操作

b) 非同步(Asynchronous)訊息,是由Switch傳送給Controller、用來通知Switch上發 生的某些非同步事件的訊息,主要包括Packet-inFlow-RemovedPort-statusError等。例如,當某一條規則因為超時而被刪除時,Switch將自動傳送一條Flow-Removed訊息通知Controller,以方便Controller作出相應的操作,如重新設定相關規則等。 

 c) 對稱(Symmetric)訊息,顧名思義,這些都是雙向對稱的訊息,主要用來建立連線、檢測對方是否線上等,包括HelloEchoExperimenter三種訊息。

3.OpenFlow模擬平臺mininet的搭建

Mininet是一個輕量級軟體定義網路(SDN)和測試平臺;它採用輕量級的徐立華技術使一個單一的系統看起來像一個王錚的網路執行相關的系統核心和使用者程式碼,也可以理解為SDN網路系統中的一種基於程序虛擬化平臺,它支援OpenFlow OpenvSwith等各種協議,Mininet也可以魔力一個完整的網路主機,連結和交換機在同一臺計算機上且有助於互動開發、測試和演示,尤其是那些使用 OpenFlow 和 SDN 技術;同時也可將此程序虛擬化的平臺下程式碼遷移到真實的環境中。

3.1 mininet的安裝

    本文所採用的系統環境為Ubuntu14.04,具體安裝流程如下:

# git clone git://github.com/mininet/mininet

# cd mininet/util/

# ./install.sh -a 

# ls

mininet  of-dissector  oflops  oftest  OpenFlow  pox

3.2建立網路

由於 Mininet 支援自定義網路,這裡先引用一個簡單網路示例如圖 1,在 Mininet 網路系統中直接輸入 mn 命令,可以在此係統中建立單層的拓撲網路,從中預設建立了兩臺 host 和一個交換機,並且激活了控制器和交換機。同時也可以通過命令 net 檢視到鏈路情況,先簡單列出了示例,如在 Mininet 系統中啟用 Web 伺服器與客戶端。

使用的命令為:

mininet> h1 python -m SimpleHTTPServer 80 &    

 #在主機 h1 開啟 Web 服務

mininet> h2 wget -O - h1    

執行結果如下圖所示:

mininet系統上,實現兩主機互連測試.

檢視節點和連結

輸出各個節點的資訊:

測試主機之間的連通性:

兩個主機相互ping:

名字空間 namespace

通常情況下,主機介面有用獨立的名字空間 namespace,而控制節點跟交換節點都在根名字空間(root namespace)中。如果想要讓所有節點擁有各自的名字空間,需要新增 --innamespace 引數,即執行:mn --innamespace

另外一個例子:

網路的拓撲結構如下:

命令很簡單:[email protected]:~$ sudo mn --topo single,3 --mac --switch ovsk --controller remote

表明拓撲有三個虛機hosth1,h2,h3分別有獨立的IP地址,三個host分別連線到本地kernel裡的OpenFlow交換機的三個埠,然後OpenFlow交換機連線到remotecontroller,其實就是在本地。

通過mininet net命令可以檢視拓撲:

啟動wireshark抓包軟體,選擇的埠為loopback,開啟抓包,可以看到很多資料包,我們只想看OpenFlow,就在filter裡輸入’of’來過濾一下,啟動controller

[email protected]:~$ controller ptcp:

就可以在wireshark介面中得到如下的結果:

4.小結

      本文主要是對SDN中採用的協議OpenFlow進行了簡單的介紹,闡述了一下OpenFlow協議的幾個規範,主要部分是在linux下搭建了OpenFlow的模擬平臺mininet,並在此平臺中搭建了簡單的網路,進行了模擬。OpenFlow協議和該模擬平臺的研究還可以進一步的深入研究。

相關推薦

OpenFlow協議及其簡單模擬

 OpenFlow協議及其簡單模擬 在講述本文的主旨之前,先來說一說SDN的三大要素:   1. 轉發與控制分離,這使得網路交換機的資料轉發變得更加簡單、快速;同時,控制變成了網路作業系統中一個相對集中的邏輯功能。    2. OpenFlow協議,它向交換機傳送轉發

SONY VISCA協議及其簡單認識

最近在搞visca協議,在這裡寫寫,算是個記錄。 visca是索尼公司搞出來的,用來控制相機的協議,一般通過rs232來通訊(看了些資料,也有用rs485的)。 一、命令格式 命令通訊的基本單元稱為包(Packet)。一個包的長度為3到16位元組,由頭部、訊息體和結束符三部分組成。命令包的第一個位元組稱為命

php 使用curl 進行簡單模擬提交表單

8.0 bin field this class chrom 提交表單 bsp alt //初始化curl $ch = curl_init(); $url = ‘xxx‘; $option = [ CURLOPT_URL => $url, CURLO

python簡單模擬:把樹存儲在數據表中

數據庫 __main__ __name__ com clas list lis 數據表 name 在數據庫中建立一個表,有Id, fatherId, value 三個字段,就可以存儲一個樹。 如何把該表中的數據以樹的形式呈現出來,下面小弟用python簡單模擬一下。 初學p

【滲透課程】第二篇上-http請求協議簡單描述

html 文章 ont tp服務器 交互 .exe 打開 路徑 什麽 HTTP協議剖析 什麽是HTTP協議?如何發起請求?我認為這樣講大家能夠理解: 瀏覽器訪問網站也是http請求的一個過程。當你打開瀏覽器,訪問一個URL (協議://服務器IP:端口/路徑/文件)的時候,

python3實現TCP協議簡單服務器和客戶端

由於 轉載 while encoding ont ans 令行 cti 數據 利用python3來實現TCP協議,和UDP類似。UDP應用於及時通信,而TCP協議用來傳送文件、命令等操作,因為這些數據不允許丟失,否則會造成文件錯誤或命令混亂。下面代碼就是模擬客戶端通過命令行

python3實現UDP協議簡單服務器和客戶端

開始 turn lose () rec 交流 cnblogs 無連接 簡單的 利用python中的socket模塊中的來實現UDP協議,這裏寫一個簡單的服務器和客戶端。為了說明網絡編程中UDP的應用,這裏就不寫圖形化了,在兩臺電腦上分別打開UDP的客戶端和服務端就可以了。

多線程練習(簡單模擬火車站多窗口同時售票)

火車 thread art this 模擬 練習 lis span 對象 模擬火車站售票窗口同時售票 public class xianchenglianxi { public static void main(String arg[]){

大魚吃小魚(簡單模擬

一個 入棧 nco http spa println code tar pre 題目:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1289 從左往右將數字壓入棧裏(想象成一個水平向右的棧),如果

HihoCoder1052基因工程(簡單模擬題)

修改方法 ace lib stream 方法 div 最小 mes 大寫 描述 小Hi和小Ho正在進行一項基因工程實驗。他們要修改一段長度為N的DNA序列,使得這段DNA上最前面的K個堿基組成的序列與最後面的K個堿基組成的序列完全一致。 例如對於序列"ATCGA

網絡啟動一:之IPXE初識及其簡單應用

releases 依賴包 放置 art 配置 ces sdi ftw bootsect IPXE初識及其簡單應用 最近迷上了網絡啟動這回事,查詢了部分文檔,做了基本測試和總結,以供以後參考。 概述:PXE(preboot execute environm

7-18 銀行業務隊列簡單模擬(25 分)

時間間隔 int fin scanf 就是 偶數 static log 辦理 設某銀行有A、B兩個業務窗口,且處理業務的速度不一樣,其中A窗口處理速度是B窗口的2倍 —— 即當A窗口每處理完2個顧客時,B窗口處理完1個顧客。給定到達銀行的顧客序列,請按業務完成的順序輸出

Java簡單模擬Android中Handler-Message機制

就是 示例代碼 pri 技術分享 android ble [] handle @override 在Android中主線程與子線程的通信十分重要,Google工程師為我們提供了Handler-Message機制來解決他們之間的交互問題。今天,我們就來簡單理解Handler-

使用原生ajax及其簡單封裝

rom OS encode chang file 使用 ie6 afa 簡單 原生ajax配置詳解 // 原生ajax // 1. 創建ajax對象 if(window.XMLHttpRequest){ // // IE7+, Firef

spring中的工廠原理簡單模擬

spring中的工廠原理簡單模擬 package service; import dao.User;import factory.Factory; public class Test {// private static User user = new UserImpl();//耦合度太高 private

簡單模擬jQuery創建對象的方法,以及封裝一個js動畫框架

動畫框架 dst nts 創建 pro 以及 原型 time parse 今天無事點開了N年未點開的慕課網,看了一個js動畫框架的視頻,心血來潮用jQuery的方法封裝了一下,雖然不如jQuery,但是還是有點點所獲。 什麽都不說,直接上代碼: /** * 這是框架的

http協議簡單介紹

Linuxhttp:伯納斯·李{1994年,伯納斯李在MIT網絡中心成立萬維網中心,代表互聯網誕生,伯納斯李被稱為萬維網之父;}http/0.9:只有get或put功能;http的原型版本;http/1.0(1998年);引入郵件中的MIME機制:Mutipurpose Internet Mail Exten

網絡層 協議及其原理 路由器工作原理

網絡層 路由器網絡層(IP ICMP RAP)1.網絡層功能: 尋址+路由定義了基於IP協議的邏輯地址連接不同的媒介類型選擇數據包通過網絡的最佳路徑2.IP包頭的格式3.ICMP協議:(ping請求)internet 控制消息協議,主要用於在ip網絡中發送控制消息,提供可能發生在通信環境中各種問題的反饋。IC

應用層協議及其功能詳解

應用層應用層協議及其功能詳解 DNS: 域名服務,用於將名稱解析為IP地址,反之亦然 DNS是一個倒置的樹形結構。最頂部是根域,用英文句點(.)表示。全球有13個根域服務器,一臺主服務器在美國,9臺輔助服務器在美國,2臺在歐州,一臺在日本。 根域服務器以下是一級域(頂級域)、二級域、三級域……最多127級

http 協議簡單學習 雖然有點老但是 還不錯

http協議版本 常見 fan 編碼 sdc 適合 管道 協議 char HTTP簡介 HTTP協議是Hyper Text Transfer Protocol(超文本傳輸協議)的縮寫,是用於從萬維網(WWW:World Wide Web )服務器傳輸超文本到本地瀏覽器的傳