128SDN 軟件定義網(wǎng)絡(luò)動(dòng)手實(shí)驗(yàn)--SDN 初試

image.png

推薦閱讀

本節(jié)實(shí)驗(yàn)推薦閱讀下述內(nèi)容:
Ethane 項(xiàng)目,openflow 的基礎(chǔ)
openflow 的提出
SDN 的道路
openflow 的白皮書
SDN 的發(fā)展史

SDN 簡(jiǎn)介

在剛剛接觸 SDN 時(shí),我們內(nèi)心最希望明白這樣的三個(gè)問題,這也是我們初步學(xué)習(xí)的目標(biāo):
SDN 是什么;
SDN 能做什么;
SDN 優(yōu)勢(shì)是什么;
解決了這樣三個(gè)問題,我們便知道我們?yōu)槭裁匆獙W(xué)習(xí) SDN,也擁有了我們學(xué)習(xí)的方向。接下來我們將來簡(jiǎn)單的回答這樣三個(gè)問題。

SDN 是什么

SDN 是一種讓網(wǎng)絡(luò)靈活、簡(jiǎn)單的體系結(jié)構(gòu)。
這樣的結(jié)論是源于:SDN(Software Defined Networks,翻譯為軟件定義網(wǎng)絡(luò))這種方式設(shè)計(jì)的初衷就是為了我們能夠通過軟件更加便捷、更加靈活的控制我們的網(wǎng)絡(luò)。

這樣的網(wǎng)絡(luò)體系結(jié)構(gòu),設(shè)計(jì)理念是時(shí)代發(fā)展的催化。
網(wǎng)絡(luò)的時(shí)代,讓我們能夠不出門便知天下事,
移動(dòng)信息化時(shí)代的到來,讓我們的生活更加的便捷,讓我們生活的方方面面都可以依賴網(wǎng)絡(luò),而這樣的發(fā)展使得我們網(wǎng)絡(luò)的業(yè)務(wù)極速的擴(kuò)張,
業(yè)務(wù)需求如潮水一般,有潮起潮落,為了更合理的利用資源誕生了按需付費(fèi),彈性服務(wù)的云服務(wù)。
云服務(wù)以靈活吸引用戶,而不同的用戶有不同的業(yè)務(wù)需求,也就避免不了的擁有不同的網(wǎng)絡(luò)需求,使得網(wǎng)絡(luò)變得更加的靈活,而這樣的靈活僅僅在應(yīng)用層次上改變是不夠的,最終的數(shù)據(jù)的傳輸需要通過路由,交換機(jī)等網(wǎng)元設(shè)備,若是這樣的設(shè)備也能夠靈活控制,這樣的效率將是我們所期望的。靈活控制的變革也會(huì)使得網(wǎng)絡(luò)前進(jìn)一大步。
傳統(tǒng)的網(wǎng)元設(shè)備從廠商引進(jìn),只能按照規(guī)則來配置、使用該設(shè)備,就像一個(gè)電視機(jī),給了我們遙控器,我們只需要知道如何使用即可,但是當(dāng)擁有大量設(shè)備時(shí)我們只能夠一臺(tái)臺(tái)的去配置,并且若是有漏洞,或者有定制化的需求出現(xiàn)時(shí),使用者將是無可奈何的。
SDN 這樣的體系結(jié)構(gòu)使用自定義的軟件來主導(dǎo)這一切,自然而然的解決了問題。


image.png

SDN 能做什么

在 SDN 的體系架構(gòu)中定義這樣的三個(gè)平面:
業(yè)務(wù)平面:該層面又可細(xì)分為這樣兩個(gè)平面:
管理平面:負(fù)責(zé)一些組件的初始化、配置等工作
應(yīng)用平面:負(fù)責(zé)將用戶的請(qǐng)求通過某種方式發(fā)送給下一個(gè)層面,控制平面。
控制平面:負(fù)責(zé)將應(yīng)用平面的請(qǐng)求轉(zhuǎn)換為實(shí)際的操作,從而控制基礎(chǔ)網(wǎng)元設(shè)備的行為,起一個(gè)承上啟下的作用,可以說是 SDN 體系結(jié)構(gòu)中的核心,該平面就像公司的領(lǐng)導(dǎo)一樣。
數(shù)據(jù)平面:負(fù)責(zé)數(shù)據(jù)轉(zhuǎn)發(fā),該平面就像公司中的搬運(yùn)工一樣。

這樣的體系結(jié)構(gòu)實(shí)現(xiàn)了控制平面與數(shù)據(jù)平面的完全分離(邏輯上的分離與物理上的分離),而這樣的分離就像是科幻電影中將所有思考的能力都交給了人工智能的大腦,而其他執(zhí)行命令的機(jī)器人并沒有思考的能力,只能夠接受大腦的支配,大腦的全權(quán)掌控能力使得即使出現(xiàn)了什么問題亦或者是有新功能的增加我們也能夠及時(shí)升級(jí)系統(tǒng)來補(bǔ)救或者升級(jí),而不用每個(gè)機(jī)器人都召回升級(jí),并且這樣的集中掌控能力使得我們定制化也將更加的方便。
不再像傳統(tǒng)的網(wǎng)元,所有的邏輯控制都由廠商定制好,無法自由變動(dòng),統(tǒng)統(tǒng)在黑盒子里。
當(dāng)然學(xué)習(xí)過網(wǎng)絡(luò)基礎(chǔ)(類似 CCNA 課程)的同學(xué)會(huì)說其實(shí)在傳統(tǒng)的設(shè)備中控制平面與數(shù)據(jù)平面也是相互分離的,由控制器(CPU)來完成一些靈活的功能,由線卡來負(fù)責(zé)數(shù)據(jù)在端口間的轉(zhuǎn)發(fā)。


image.png

傳統(tǒng)的設(shè)備其實(shí)在物理結(jié)構(gòu)上是緊密耦合的,這樣做雖然能夠使得轉(zhuǎn)發(fā)效率更高,但會(huì)有其他的一些弊端,例如分布式的控制需要逐一配置、可能部分的設(shè)備數(shù)據(jù)流采樣會(huì)導(dǎo)致 CPU 的升高等問題。
這樣的對(duì)比并不是為了說 SDN 的體系結(jié)構(gòu)是完美無缺的,SDN 在發(fā)展時(shí)期也會(huì)有一定的弊端,或者不如意的地方,但是在整體結(jié)構(gòu)上是比傳統(tǒng)的結(jié)構(gòu)更加的靈活,更適合于當(dāng)前的大環(huán)境的使用,當(dāng)然 SDN 發(fā)展至今也有十個(gè)年頭,逐漸的被大部分的廠家所認(rèn)可,甚至實(shí)施了部署,例如 SDN 最為成功的案例 Google 利用 SDN 搭建的數(shù)據(jù)中心網(wǎng)絡(luò) B4,還有 Vmware、Juniper、Cisco、Dell 等等大巨頭紛紛投入 SDN 的懷抱,足以看出 SDN 的吸引力。

SDN 的相關(guān)術(shù)語

從上文我們得知 SDN 的網(wǎng)絡(luò)體系中主要分為 業(yè)務(wù)平面、控制平面、數(shù)據(jù)平面。
通常工作于業(yè)務(wù)平面的是一些 SDN 應(yīng)用,也就是一群 Application,針對(duì)用戶的一些需求;工作于控制平面是控制器(Controller),也就是控制數(shù)據(jù)實(shí)際走向的核心;工作于數(shù)據(jù)層的是各個(gè)網(wǎng)元設(shè)備,也就是一些交換器等,真正轉(zhuǎn)發(fā)數(shù)據(jù)的工具。
將這三個(gè)平面串起來的是 openflow 協(xié)議與 API,通過 API與 openflow 協(xié)議來相互通信,這其中控制平面與業(yè)務(wù)平面相互通信的接口通常稱為北面接口(Northbound Interfaces,與之對(duì)應(yīng)的控制平面與數(shù)據(jù)平面相互通信的接口通常稱為南面接口(Southbound Interfaces)。


image.png

openflow 協(xié)議可以看出是 SDN 的關(guān)鍵,SDN 發(fā)展初期、概念不明確時(shí),openflow 一度是 SDN 的代名詞。
當(dāng)然 openflow 也存在一些問題,所以不斷的推出新版本,為此創(chuàng)始人 Nick McKeown 教授等人提出了 P4(Programming Protocol-Independent Packet Processors),華為公司也提出了相應(yīng)的解決方案 POF(Protocol Oblivious Forwarding)。由此可以明白 openflow 不等于 SDN,他只是一個(gè)最典型的、被當(dāng)前所廣泛認(rèn)可的一個(gè)南向協(xié)議而已。

通過上文所述或許你對(duì) SDN 的印象還是朦朧的,但是至少我們知道了:
SDN 是一個(gè)新的體系結(jié)構(gòu);
SDN 是為解決管理復(fù)雜、封閉、不靈活而誕生;

SDN 的核心思想:
控制平面與數(shù)據(jù)平面的分離;
由控制平面核心控制器集中式控制,并可編程化;

SDN 工具

為了更深入的了解 SDN,我們需要更多的動(dòng)手實(shí)驗(yàn),而實(shí)驗(yàn)需要實(shí)驗(yàn)的環(huán)境,環(huán)境主要在于交換機(jī)的模擬與控制器上。

交換機(jī)

交換機(jī)的實(shí)驗(yàn)方式主要有這樣的幾種方式:
直接使用支持 openflow 真機(jī);
open vswitch;
mininet;

第一種方式便是直接使用支持 openflow 的真實(shí) switch:
優(yōu)點(diǎn):這樣的方式能夠直接見到效果,還能夠見到實(shí)物,研究的興趣更高,并且能夠避免一些模擬器所帶來的外界因素(如以前使用 GNS3 的時(shí)候,該模擬器雖然使用真機(jī)鏡像,但是很多功能是不支持的,因?yàn)橛行┕δ苁鞘褂糜布瓿傻模詴?huì)導(dǎo)致即使正確的配置也會(huì)出錯(cuò))。
缺點(diǎn):這樣的實(shí)驗(yàn)方式的成本很高。

第二種便是使用 open vswitch:
優(yōu)點(diǎn):只需要安裝軟件與一定配置就可以將一臺(tái)物理改造成一個(gè)交換機(jī),并且因?yàn)樘摂M化技術(shù)使得該設(shè)備上可以創(chuàng)建多個(gè)交換機(jī),不會(huì)因?yàn)樾枰嗯_(tái)交換機(jī)環(huán)境便增加多臺(tái)物理設(shè)備。
缺點(diǎn):在搭建與使用上有一定的門檻。


image.png

第三種便是使用 mininet 模擬器:
優(yōu)點(diǎn):使用簡(jiǎn)單;
缺點(diǎn):只是模擬的網(wǎng)絡(luò)拓?fù)洵h(huán)境,并不是真實(shí)的網(wǎng)絡(luò)。


image.png

其實(shí)還可以利用支持 openwrt 的路由器,通過 openwrt 給路由器刷 openflow,但這樣的方式較為麻煩,有興趣的同學(xué)可以嘗試一番。

在接下來的實(shí)驗(yàn)中我們將使用 mininet 模擬器來完成我們后續(xù)的學(xué)習(xí)。而 mininet 是什么?
mininet 是一個(gè)由 python 開發(fā)的一個(gè)輕量級(jí)的模擬工具;
mininet 虛擬節(jié)點(diǎn)的創(chuàng)建是通過 Linux Network Namespace 來實(shí)現(xiàn)。

控制器

選擇好了交換機(jī)的模擬工具,接下來我們需要選擇一款合適的控制器框架。

當(dāng)前有很多的控制器框架,被廣泛使用的主要有這樣幾種:
Floodlight:使用 Java 開發(fā),由 Big Switch Networks 設(shè)計(jì)的開源控制器;
Opendaylight:使用 Java 開發(fā),由 Linux 基金會(huì)推出的一個(gè)開源項(xiàng)目,其會(huì)員有 Cisco(很多項(xiàng)目的主導(dǎo)), Juniper, HP, IBM,Brocade,微軟,Huawei 等等知名供應(yīng)商,功能強(qiáng)大,但也十分龐大;
Open contrail:使用 Java 開發(fā),有 Juniper 主導(dǎo)設(shè)計(jì)、研發(fā)的開源控制器
onos:使用 Java 開發(fā),由 ON.Lab(由最早創(chuàng)造發(fā)明 SDN 的斯坦福與伯克利等大學(xué)聯(lián)合運(yùn)營(yíng)商與制造商發(fā)起的開源社區(qū))實(shí)現(xiàn)發(fā)布的首款開源的 SDN 網(wǎng)絡(luò)操作系統(tǒng),主要面向服務(wù)提供商、企業(yè)骨干網(wǎng)
Pox:使用 python 開發(fā),支持的協(xié)議不是太多;
Ryu:使用 python 開發(fā),由 NTT 公司設(shè)計(jì)研發(fā)的開源控制器,較于 pox 更新支持的 openflow 協(xié)議版本更多,支持的協(xié)議更多;


image.png

為了更容易上手我們選擇了 Ryu 控制器,在接下來的實(shí)驗(yàn)中我們都使用 Ryu 。

SDN 環(huán)境部署

工具安裝

我們可以通過 apt、pip 這樣的安裝包管理工具來裝我們所需的 mininet 與 Ryu 工具。
通過這樣的方式我們可以十分便捷的安裝 mininet:

#更新源
sudo apt-get update

#安裝 mininet
sudo apt-get install -y mininet

稍等片刻便安裝完成,我們可以通過這樣的方式來檢測(cè)我們是否安裝成功:

sudo mn

若是看到這樣的輸出則表示成功安裝:


image.png

正常啟動(dòng)不會(huì)有 error 信息,上面的 error 信息是環(huán)境所導(dǎo)致的,出現(xiàn)這樣的情況一般有兩種
若是在 ubuntu 中部署則可能是因?yàn)槟愕膬?nèi)核版本在 3.13.0-96 到 3.13.0-100 左右,因?yàn)樵谶@個(gè)版本之間無法使用 sudo sysctl -w net.ipv4.neigh.default.gc_thresh1=4096 命令來修改 ARP 的緩存大小。
若是在 docker 中部署則可能是因?yàn)闆]有給予 privilege 權(quán)限)。

沒有參數(shù),直接運(yùn)行 sudo mn 默認(rèn)會(huì)創(chuàng)建一個(gè)簡(jiǎn)單的拓?fù)洌梢粋€(gè)控制器、一個(gè)交換機(jī)與兩個(gè)節(jié)點(diǎn)構(gòu)成,并進(jìn)入 mininet 的命令行界面。
輸入 exit 我們便能退出 mininet 的命令行界面。
在成功安裝 mininet 之后我們只需要一行簡(jiǎn)單的命令即可安裝 ryu:

sudo pip install ryu

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

ryu-manager

若是看到這樣的命令輸入,說明安裝成功能夠正常使用:


image.png

鏡像安裝

mininet 是一個(gè)開源的模擬工具,我們可以直接訪問 github 中的該項(xiàng)目可以看到其源碼與相關(guān)的文檔,在 wiki 中我們看到官方還為我們提供了鏡像,使我們安裝更便捷。
通過該鏈接我們可以下載到 VMware 與 VituralBox 的鏡像,直接導(dǎo)入鏡像我們即可使用。

源碼安裝

最后一種方式便是通過源碼安裝,這樣的方式可以獲得最新版本的 mininet。
首先通過 git 命令下載最新的源碼:

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

下載成功之后進(jìn)入項(xiàng)目目錄中:

cd mininet

因?yàn)槭侵苯酉螺d的源碼,我們可以選擇我們想要安裝的版本,可以通過 git tag 看到:


image.png

我們通過這樣的命令切換到相關(guān)版本的源碼下:

git checkout -b 2.2.2 2.2.2

然后通過這樣的命令來安裝:

util/install.sh -a

-a 參數(shù)會(huì)幫我們裝所有我們需要的相關(guān)工具如 openflow、wireshark、dissector、pox。我們也可以使用 -nfv 參數(shù)來精簡(jiǎn)安裝。


image.png

看到 Enjoy Mininet! 這樣的標(biāo)題說明我們安裝成功,同樣我們可以用上述方式來檢驗(yàn) mininet 是否成功安裝(在最新的 mininet 源碼中提供了 ryu 的安裝,只是其腳本有問題所以會(huì)安裝失敗,有興趣的同學(xué)可以修改一下 install.sh 腳本,在 462 行左右)。
同樣我們通過源碼來安裝 ryu。
若是為了使得 python 的運(yùn)行環(huán)境不被干擾我們可以使用 virtualenv:

#安裝 virtualenv
sudo pip install virtualenv

#創(chuàng)建文件夾
mkdir SDN

#進(jìn)入該文件夾
cd SDN

#創(chuàng)建隔離環(huán)境
virtualenv env

#使用該隔離環(huán)境
source env/bin/activate

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

#進(jìn)入該目錄
cd ryu

#安裝 ryu
python ./setup.py install

#安裝 ryu 的相關(guān)依賴
pip install -r tools/pip-requires

我們可以使用上述相同的辦法測(cè)試我們是否成功的安裝了 ryu。

作業(yè)

1.有條件的同學(xué)嘗試在本地源碼安裝 mininet 與 ryu

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容