SDN概述:簡介、工具、環境部署

1、前言:

本文初步接觸 SDN 的相關概念。須要依次完成下面幾項任務:php

  • SDN 簡介
  • SDN 工具
  • SDN 環境部署

struct-md

推薦閱讀

推薦閱讀下述內容:python

2、SDN 簡介

在剛剛接觸 SDN 時,咱們心裏最但願明白這樣的三個問題,這也是咱們初步學習的目標:git

  • SDN 是什麼;
  • SDN 能作什麼;
  • SDN 優點是什麼;

解決了這樣三個問題,咱們便知道咱們爲何要學習 SDN,也擁有了咱們學習的方向。接下來咱們未來簡單的回答這樣三個問題。github

2.1 SDN 是什麼

SDN 是一種讓網絡靈活、簡單的體系結構。docker

這樣的結論是源於:SDN(Software Defined Networks,翻譯爲軟件定義網絡)這種方式設計的初衷就是爲了咱們可以經過軟件更加便捷、更加靈活的控制咱們的網絡。編程

這樣的網絡體系結構,設計理念是時代發展的催化。ubuntu

  • 網絡的時代,讓咱們可以不出門便知天下事,
  • 移動信息化時代的到來,讓咱們的生活更加的便捷,讓咱們生活的方方面面均可以依賴網絡,而這樣的發展使得咱們網絡的業務極速的擴張,
  • 業務需求如潮水通常,有潮起潮落,爲了更合理的利用資源誕生了按需付費,彈性服務的雲服務。

雲服務以靈活吸引用戶,而不一樣的用戶有不一樣的業務需求,也就避免不了的擁有不一樣的網絡需求,使得網絡變得更加的靈活,而這樣的靈活僅僅在應用層次上改變是不夠的,最終的數據的傳輸須要經過路由,交換機等網元設備,如果這樣的設備也可以靈活控制,這樣的效率將是咱們所期許的。靈活控制的變革也會使得網絡前進一大步。緩存

傳統的網元設備從廠商引進,只能按照規則來配置、使用該設備,就像一個電視機,給了咱們遙控器,咱們只須要知道如何使用便可,可是當擁有大量設備時咱們只可以一臺臺的去配置,而且如果有漏洞,或者有定製化的需求出現時,使用者將是迫不得已的。網絡

SDN 這樣的體系結構使用自定義的軟件來主導這一切,天然而然的解決了問題。架構

what-sdn

2.2 SDN 能作什麼

在 SDN 的體系架構中定義這樣的三個平面:

  • 業務平面:該層面又可細分爲這樣兩個平面:
    • 管理平面:負責一些組件的初始化、配置等工做
    • 應用平面:負責將用戶的請求經過某種方式發送給下一個層面,控制平面。
  • 控制平面:負責將應用平面的請求轉換爲實際的操做,從而控制基礎網元設備的行爲,起一個承上啓下的做用,能夠說是 SDN 體系結構中的核心,該平面就像公司的領導同樣。
  • 數據平面:負責數據轉發,該平面就像公司中的搬運工同樣。

這樣的體系結構實現了控制平面與數據平面的徹底分離(邏輯上的分離與物理上的分離),而這樣的分離就像是科幻電影中將全部思考的能力都交給了人工智能的大腦,而其餘執行命令的機器人並無思考的能力,只可以接受大腦的支配,大腦的全權掌控能力使得即便出現了什麼問題亦或者是由新功能的增長咱們也可以及時升級系統來補救或者升級,而不用每一個機器人都召回升級,而且這樣的集中掌控能力使得咱們定製化也將更加的方便。

再也不像傳統的網元,全部的邏輯控制都有廠商定製好,沒法自由變更,通通在黑盒子裏。

固然學習過網絡基礎(相似 CCNA 課程)的同窗會說其實在傳統的設備中控制平面與數據平面也是相互分離的,由控制器(CPU)來完成一些靈活的功能,由線卡來負責數據在端口間的轉發。

traditional-sdn
(此圖來自於 Cisco)

傳統的設備其實在物理結構上是緊密耦合的,這樣作雖然可以使得轉發效率更高,對會有其餘的一些弊端,例如分佈式的控制須要逐一配置、可能部分的設備數據流採樣會致使 CPU 的升高等問題。

這樣的對比並非爲了說 SDN 的體系結構是天衣無縫的,SDN 在發展時期也有會有必定的弊端,或者不如意的地方,可是在總體結構上是比傳統的結構更加的靈活,更適合於當前的大環境的使用,固然 SDN 發展至今也有十個年頭,逐漸的被大部分的廠家所承認,甚至實施了部署,例如 SDN 最爲成功的案例 Google 利用 SDN 搭建的數據中心網絡 B4,還有 Vmware、Juniper、Cisco、Dell 等等大巨頭紛紛投入 SDN 的懷抱,足以看出 SDN 的吸引力。

2.3 SDN 的相關術語

從上文咱們得知 SDN 的網絡體系中主要分爲 業務平面、控制平面、數據平面。

一般工做於業務平面的是一些 SDN 應用,也就是一羣 Application,針對用戶的一些需求;工做於控制平面是控制器(Controller),也就是控制數據實際走向的核心;工做於數據層的是各個網元設備,也就是一些交換器等,真正轉發數據的工具。

將這三個平面串起來的是 openflow 協議與 API,經過 API與 openflow 協議來相互通訊,這其中控制平面與業務平面相互通訊的接口一般稱爲北面接口(Northbound Interfaces,與之對應的控制平面與數據平面相互通訊的接口一般稱爲南面接口(Southbound Interfaces)。

SDN-architecture-overview-transparent

(此圖來自於 wikipedia SDN Architecture Overview (PDF), Version 1.0, December 12, 2013., CC BY-SA 3.0,

openflow 協議能夠看出是 SDN 的關鍵,SDN 發展初期、概念不明確時,openflow 一度是 SDN 的代名詞。

固然 openflow 也存在一些問題,因此不斷的推出新版本,爲此創始人 Nick McKeown 教授等人提出了 P4(Programming Protocol-Independent Packet Processors),華爲公司也提出了相應的解決方案 POF(Protocol Oblivious Forwarding)。由此能夠明白 openflow 不等於 SDN,他只是一個最典型的、被當前所普遍承認的一個南向協議而已。

經過上文所述或許你對 SDN 的印象仍是朦朧的,可是至少咱們知道了:

  • SDN 是一個新的體系結構;
  • SDN 是爲解決管理複雜、封閉、不靈活而誕生;
  • SDN 的核心思想:控制平面於數據平面的分離;

由控制平面核心控制器集中式控制,並可編程化;

3、 SDN 工具

爲了更深刻的瞭解 SDN,咱們須要更多的動手實驗,而實驗須要實驗的環境,環境主要在於交換機的模擬與控制器上。

3.1 交換機

交換機的實驗方式主要有這樣的幾種方式:

  • 直接使用支持 openflow 真機;
  • open vswitch;
  • mininet;

第一種方式即是直接使用支持 openflow 的真實 switch:

  • 優勢:這樣的方式可以直接見到效果,還可以見到實物,研究的興趣更高,而且可以避免一些模擬器所帶來的外界因素(如之前使用 GNS3 的時候,該模擬器雖然使用真機鏡像,可是不少功能是不支持的,由於有些功能是使用硬件完成的,因此會致使即便正確的配置也會出錯)。
  • 缺點:這樣的實驗方式的成本很高。

第二種即是使用 open vswitch:

  • 優勢:只須要安裝軟件與必定配置就能夠將一臺物理改形成一個交換機,而且由於虛擬化技術使得該設備上能夠建立多個交換機,不會由於須要多臺交換機環境便增長多臺物理設備。
  • 缺點:在搭建與使用上有必定的門檻。

Distributed_Open_vSwitch_instance

(此圖來自於wikipedia By Goran tek-en - Own workDerived from:virtual networking

第三種即是使用 mininet 模擬器:

  • 優勢:使用簡單;
  • 缺點:只是模擬的網絡拓撲環境,並非真實的網絡。

mininet

其實還能夠利用支持 openwrt 的路由器,經過 openwrt 給路由器刷 openflow,但這樣的方式較爲麻煩,有興趣的同窗能夠嘗試一番。

在接下來的實驗中咱們將使用 mininet 模擬器來完成咱們後續的學習。而 mininet 是什麼?

  • mininet 是一個由 python 開發的一個輕量級的模擬工具;
  • mininet 虛擬節點的建立是經過 Linux Network Namespace 來實現。

3.2 控制器

選擇好了交換機的模擬工具,接下來咱們須要選擇一款合適的控制器框架。

當前有不少的控制器框架,被普遍使用的主要有這樣幾種:

  • Floodlight:使用 Java 開發,由 Big Switch Networks 設計的開源控制器;
  • Opendaylight:使用 Java 開發,由 Linux 基金會推出的一個開源項目,其會員有 Cisco(不少項目的主導), Juniper, HP, IBM,Brocade,微軟,Huawei 等等知名供應商,功能強大,但也十分龐大;
  • Open contrail:使用 Java 開發,有 Juniper 主導設計、研發的開源控制器
  • onos:使用 Java 開發,由 ON.Lab(由最先創造發明 SDN 的斯坦福與伯克利等大學聯合運營商與製造商發起的開源社區)實現發佈的首款開源的 SDN 網絡操做系統,主要面向服務提供商、企業骨幹網
  • Pox:使用 python 開發,支持的協議不是太多;
  • Ryu:使用 python 開發,由 NTT 公司設計研發的開源控制器,較於 pox 更新支持的 openflow 協議版本更多,支持的協議更多;

controller-image

(此圖來自於 linkedin

爲了更容易上手咱們選擇了 Ryu 控制器,在接下來的實驗中咱們都使用 Ryu 。

4、SDN 環境部署

4.1 工具安裝

咱們能夠經過 apt、pip 這樣的安裝包管理工具來裝咱們所需的 mininet 與 Ryu 工具。

經過這樣的方式咱們能夠十分便捷的安裝 mininet:

#更新源
sudo apt-get update
#安裝 
mininetsudo apt-get install -y mininet

稍等片刻便安裝完成,咱們能夠經過這樣的方式來檢測咱們是否安裝成功:

sudo mn

如果看到這樣的輸出則表示成功安裝:

mininet-install-test

正常啓動不會有 error 信息,上面的 error 信息是環境所致使的,出現這樣的狀況通常有兩種

  • 如果在 ubuntu 中部署則多是由於你的內核版本在 3.13.0-96 到 3.13.0-100 左右,由於在這個版本之間沒法使用 sudo sysctl -w net.ipv4.neigh.default.gc_thresh1=4096 命令來修改 ARP 的緩存大小。
  • 如果在 docker 中部署則多是由於沒有給予 privilege 權限)。

沒有參數,直接運行 sudo mn 默認會建立一個簡單的拓撲,由一個控制器、一個交換機與兩個節點構成,並進入 mininet 的命令行界面。

輸入 exit 咱們便能推出 mininet 的命令行界面。

在成功安裝 mininet 以後咱們只須要一行簡單的命令便可安裝 ryu:

sudo pip install ryu

稍等片刻久安裝成功了,咱們直接輸入這樣的命令查看是否可以正常使用:

ryu-manager

如果看到這樣的命令輸入,說明安裝成功可以正常使用:

ryu-install-test

4.2 鏡像安裝

mininet 是一個開源的模擬工具,咱們能夠直接訪問 github 中的該項目能夠看到其源碼與相關的文檔,在 wiki 中咱們看到官方還爲咱們提供了鏡像,使咱們安裝更便捷。

經過該連接咱們能夠下載到 VMware 與 VituralBox 的鏡像,直接導入鏡像咱們便可食用。

4.3 源碼安裝

最後一種方式即是經過源碼安裝,這樣的方式能夠得到最新版本的 mininet。

首先經過 git 命令下載最新的源碼:

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

下載成功以後進入項目目錄中:

cd mininet

由於是直接下載的源碼,咱們能夠選擇咱們想要安裝的版本,能夠經過 git tag 看到:

mininet-dir

咱們經過這樣的命令切換到相關版本的源碼下:

git checkout -b 2.2.2

而後經過這樣的命令來安裝:

util/install.sh -a

-a 參數會幫咱們裝全部咱們須要的相關工具如 openflow、wireshark、dissector、pox。咱們也可使用 -nfv參數來精簡安裝。

mininet-source-install

看到 Enjoy Mininet! 這樣的標題說明咱們安裝成功,一樣咱們能夠用上述方式來檢驗 mininet 是否成功安裝(在最新的 mininet 源碼中提供了 ryu 的安裝,只是其腳本有問題因此會安裝失敗,有興趣的同窗能夠修改一下 install.sh 腳本,在 462 行左右)。
一樣咱們經過源碼來安裝 ryu。

如果爲了使得 python 的運行環境不被幹擾咱們可使用 virtualenv:

#安裝 virtualenv
sudo pip install virtualenv

#建立文件夾
mkdir SDN

#進入該文件夾
cd SDN

#建立隔離環境
virtualenv env

#使用該隔離環境
source env/bin/activate

#下載 ryu 的源碼
git clone git://github.com/osrg/ryu.git

#進入該目錄
cd ryu

#安裝 ryu
python ./setup.py install

#安裝 ryu 的相關依賴
pip install -r tools/pip-requires

咱們可使用上述相同的辦法測試咱們是否成功的安裝了 ryu。

5、最後

以上SDN概述:簡介、工具、環境部署 的所有內容摘選自實驗樓課程【SDN軟件定義網絡動手實驗】,感興趣的小夥伴能夠點擊【SDN軟件定義網絡動手實驗】,學習更多SDN。

【SDN軟件定義網絡動手實驗】主要使用 mininet 模擬器與 Ryu 控制器,從簡單的安裝到查看代碼的理解原理,從部署簡單的拓撲到自定義網絡拓撲,逐步引領你進入不同的網絡世界。

相關文章
相關標籤/搜索