SDN實(shí)驗(yàn)報(bào)告 (1) (5)_第1頁
SDN實(shí)驗(yàn)報(bào)告 (1) (5)_第2頁
SDN實(shí)驗(yàn)報(bào)告 (1) (5)_第3頁
SDN實(shí)驗(yàn)報(bào)告 (1) (5)_第4頁
SDN實(shí)驗(yàn)報(bào)告 (1) (5)_第5頁
已閱讀5頁,還剩22頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、 信息網(wǎng)絡(luò)基礎(chǔ)研討專題實(shí)驗(yàn)(SDN網(wǎng)絡(luò)部分)姓 名: 單赟吉學(xué) 號(hào): 11211105班 級(jí): 通信1109班指導(dǎo)教師: 趙永祥實(shí)驗(yàn)時(shí)間: 第十周周二(一) openflow交換機(jī)的手動(dòng)配置1、 實(shí)驗(yàn)?zāi)康?. 數(shù)據(jù)openflow交換機(jī)的手動(dòng)配置環(huán)境2. 配置openflow交換機(jī)初始信息3. 手動(dòng)配置轉(zhuǎn)發(fā)表,實(shí)現(xiàn)主機(jī)之間通信2、 實(shí)驗(yàn)原理關(guān)于openflow交換機(jī)的實(shí)驗(yàn)系列由五個(gè)實(shí)驗(yàn)構(gòu)成,這前四個(gè)實(shí)驗(yàn)須按順序進(jìn)行,因?yàn)楹竺娴膶?shí)驗(yàn)需要應(yīng)用前面實(shí)驗(yàn)搭建的軟件和硬件環(huán)境。第一個(gè)實(shí)驗(yàn)“openflow交換機(jī)的手動(dòng)配置”熟悉交換機(jī)的手工配置環(huán)境,實(shí)現(xiàn)轉(zhuǎn)發(fā)表的手工配置,配置交換機(jī)控制端口的地址;第二個(gè)實(shí)

2、驗(yàn)搭建控制器的軟件環(huán)境,實(shí)現(xiàn)控制器和交換機(jī)的互聯(lián),運(yùn)行控制器應(yīng)用程序,把openflow交換機(jī)的功能通過程序?qū)崿F(xiàn)為一個(gè)二層交換機(jī);第三個(gè)實(shí)驗(yàn)編寫一個(gè)簡(jiǎn)單的控制器軟件,實(shí)現(xiàn)一個(gè)簡(jiǎn)單的廣播交換機(jī)功能;第四個(gè)實(shí)驗(yàn)編寫一個(gè)控制器軟件,實(shí)現(xiàn)流表的下發(fā)和刪除,通過這個(gè)實(shí)驗(yàn)測(cè)試控制器提供的編程接口。第五個(gè)實(shí)驗(yàn)研究在仿真軟件中測(cè)試控制器程序和功能,同學(xué)們可以在自己計(jì)算機(jī)上調(diào)試好程序以后,再到真實(shí)的物理機(jī)器上實(shí)驗(yàn),以提高實(shí)驗(yàn)設(shè)備的使用效率。分組交換機(jī)按照轉(zhuǎn)發(fā)表把某一個(gè)輸入端口的分組搬移到另外一個(gè)輸出端口上輸出。轉(zhuǎn)發(fā)表實(shí)現(xiàn)分組目的地址和交換機(jī)輸出端口之間的映射。轉(zhuǎn)發(fā)表決定了交換機(jī)的行為。傳統(tǒng)的交換機(jī)根據(jù)標(biāo)準(zhǔn)協(xié)議形

3、成轉(zhuǎn)發(fā)表,這部分代碼封裝在交換機(jī)的操作系統(tǒng)中,交換機(jī)的運(yùn)營(yíng)者不能對(duì)轉(zhuǎn)發(fā)表的形成繼續(xù)修改,這樣做的好處是保證了交換機(jī)的速率和可靠性。但是,運(yùn)營(yíng)者不能根據(jù)網(wǎng)絡(luò)的具體特點(diǎn)和業(yè)務(wù)特性對(duì)交換機(jī)的轉(zhuǎn)發(fā)行為進(jìn)行專門的定制和設(shè)計(jì),影響新業(yè)務(wù)的提供和增加網(wǎng)絡(luò)運(yùn)營(yíng)成本。OpenFlow交換機(jī)把控制層面和轉(zhuǎn)發(fā)層面分離,交換機(jī)的轉(zhuǎn)發(fā)表可以由運(yùn)營(yíng)者手工本地配置,或者通過控制器遠(yuǎn)程修改和控制。在實(shí)際使用環(huán)境中,通過控制器遠(yuǎn)程修改和控制交換機(jī)流表。一個(gè)控制器就可以控制全網(wǎng)的交換機(jī),控制器可以從全網(wǎng)的角度對(duì)每一個(gè)交換機(jī)的流表進(jìn)行配置,從而實(shí)現(xiàn)全局優(yōu)化和快速提供新的業(yè)務(wù),極大降低了人工運(yùn)營(yíng)成本。國家標(biāo)準(zhǔn)化組織已經(jīng)制定了交換機(jī)和

4、控制器之間的消息格式和交互過程,基于OpenFlow交換機(jī)的網(wǎng)絡(luò)又稱為軟件定義網(wǎng)絡(luò),在大的數(shù)據(jù)中心已經(jīng)實(shí)用。在OpenFlow網(wǎng)絡(luò)中,所有的轉(zhuǎn)發(fā)決策從各個(gè)交換機(jī)轉(zhuǎn)移到控制器上,由控制器集中管理數(shù)據(jù)包的轉(zhuǎn)發(fā)策略,通過OpenFlow協(xié)議負(fù)責(zé)與所有網(wǎng)絡(luò)交換機(jī)進(jìn)行交互,配置數(shù)據(jù)轉(zhuǎn)發(fā)路徑。OpenFlow網(wǎng)絡(luò)示意圖如上圖所示,所有的數(shù)據(jù)包在網(wǎng)絡(luò)中的傳輸路徑由控制器(Controller)統(tǒng)一控制決定,OpenFlow交換機(jī)只負(fù)責(zé)轉(zhuǎn)發(fā)數(shù)據(jù)包??刂破魍ㄟ^對(duì)交換機(jī)下發(fā)流(flow)來實(shí)現(xiàn)上述控制流程。一個(gè)OpenFlow交換機(jī)通常包含多個(gè)流表,每個(gè)流表含有多條流表?xiàng)l目(flow entries),每條條目由

5、匹配域(match fields),計(jì)數(shù)器(counters)和指令(instructions)組成。匹配域定義待匹配的數(shù)據(jù)包特征,如數(shù)據(jù)包到達(dá)的交換機(jī)入端口、源以太網(wǎng)地址、目的以太網(wǎng)地址、源IP地址、目標(biāo)IP地址、VLAN標(biāo)簽。計(jì)數(shù)器用于對(duì)匹配流表的流量統(tǒng)計(jì),更新進(jìn)入OpenFlow與流匹配的數(shù)據(jù)包個(gè)數(shù)以及總字節(jié)數(shù)。指令用于修改匹配報(bào)文的動(dòng)作集合,決定報(bào)文的轉(zhuǎn)發(fā)操作,通常的操作有輸出數(shù)據(jù)包到某端口、修改數(shù)據(jù)包首部信息等??刂破骱蚈penFlow交換機(jī)之間通過OpenFlow消息實(shí)現(xiàn)信息交互。 當(dāng)一個(gè)數(shù)據(jù)包到達(dá)交換機(jī)時(shí),如果與流表中的某一條流相匹配,便順序執(zhí)行該條流指令的操作。如果沒有匹配的流

6、,則把整個(gè)數(shù)據(jù)包緩存在交換機(jī)中,并為該數(shù)據(jù)包配一個(gè)Buffer ID,隨數(shù)據(jù)包一起作為Packet In消息發(fā)往控制器,控制器根據(jù)數(shù)據(jù)包的首部定義一條新的流決定該類數(shù)據(jù)包的處理策略,下發(fā)Flow Mod信息給交換機(jī),F(xiàn)low Mod消息用于在交換機(jī)中添加或刪除流表?xiàng)l目,同時(shí)控制器以Packet Out消息作為載體將數(shù)據(jù)包返回交換機(jī),Packet Out消息用于控制報(bào)文從指定端口發(fā)出,交換機(jī)依據(jù)隨包的Buffer ID取出數(shù)據(jù)包,再根據(jù)新定義的流進(jìn)行交換處理。本實(shí)驗(yàn)實(shí)現(xiàn)手動(dòng)配置交換機(jī)轉(zhuǎn)發(fā)表。為后續(xù)的實(shí)驗(yàn)準(zhǔn)備實(shí)驗(yàn)環(huán)境和交換機(jī)基本配置。3、 實(shí)驗(yàn)器材1. 盛科V330 openflow交換機(jī) 2.

7、臺(tái)式電腦 (一臺(tái))3. 普通交換機(jī)一臺(tái)4、 實(shí)驗(yàn)內(nèi)容1. 連接交換機(jī)的控制端口和計(jì)算機(jī)以太網(wǎng)卡。l 交換機(jī)的控制端口位于交換機(jī)右上角,交換機(jī)的控制端口的地址已經(jīng)初始化為192.168.1.233,一般不允許學(xué)生再進(jìn)行修改。l 配置計(jì)算機(jī)的以太網(wǎng)卡的地址也要設(shè)為192.168.1.0 網(wǎng)段,如192.168.1.230。l 把交換機(jī)的控制端口和計(jì)算機(jī)都連接到一臺(tái)普通交換機(jī)如下圖所示內(nèi)網(wǎng)交換機(jī) 192.168.1.1openflow交換機(jī)配置計(jì)算機(jī)192.168.1.230計(jì)算機(jī)終端 192.168.1.220控制端口192.168.1.233數(shù)據(jù)端口2. 登陸交換機(jī)并熟悉交換局配置環(huán)境l 在計(jì)算

8、機(jī)上面打開命令行終端,輸入telnet 192.168.1.233l 輸入?獲取交換機(jī)配置的幫助。如下圖所示,可以獲得交換機(jī)的各種命令的列表l 在命令的名字后面輸入?可以獲得這個(gè)命令的功能和使用說明。例如congfigure ?, 就會(huì)顯示這個(gè)命令是配置終端所用3. 常用交換機(jī)命令l Show命令顯示交換機(jī)的工作狀態(tài)。輸入以下命令: show interface status; show openflow controller status; show openflow ovsdb。觀察結(jié)果,并根據(jù)幫助對(duì)這些命令進(jìn)行解釋l 配置控制器地址1. 輸入configure terminal, 進(jìn)入配

9、置狀態(tài)。2. 輸入: openflow set controller tcp 192.168.1.230 6633。在交換機(jī)上面設(shè)置控制器的地址。這里假設(shè)控制器的地址為192.168.1.230,默認(rèn)端口6633。后面的實(shí)驗(yàn)中,需要按照控制器的實(shí)際地址在交換機(jī)上設(shè)置。3. 輸入end,推出配置狀態(tài)4. 手動(dòng)配置流表。Ovs-ofctl 指令實(shí)現(xiàn)openflow交換機(jī)上流表的添加、刪除和查詢等動(dòng)作。Ovs-ofctl指令集合的詳細(xì)介紹見附錄l 把測(cè)試計(jì)算機(jī)連接到openflow交換機(jī)的端口2,把openflow交換機(jī)的端口8連接到內(nèi)網(wǎng)交換機(jī)。openflow交換機(jī)的端口號(hào)在交換機(jī)的面板上有數(shù)字標(biāo)

10、明。內(nèi)網(wǎng)交換機(jī)地址設(shè)為192.168.1.1。l telnet登陸交換機(jī),執(zhí)行如下命令ovs-ofctl add-flow ovs-switch "in_port=2,actions=output:8" 這個(gè)命令把openflow 交換機(jī)第2個(gè)端口接收到的分組轉(zhuǎn)發(fā)到第8個(gè)端口。ovs-ofctl add-flow ovs-switch "in_port=8,actions=output:2" 這個(gè)命令把openflow 交換機(jī)第8個(gè)端口接收到的分組轉(zhuǎn)發(fā)到第2個(gè)端口。5. 驗(yàn)證流表配置輸入如下命令觀察配置的流表:ovs-ofctl dump-flows b

11、r0在測(cè)試計(jì)算機(jī)終端上面運(yùn)行如下命令: ping 192.168.1.1,觀察是否連通。上述命令的實(shí)際執(zhí)行過程如下圖所示其中,第一個(gè)“ovs-ofctl dump-flows br0”是在配置了流表,但是沒有連接測(cè)試計(jì)算機(jī)時(shí)候得到的結(jié)果。第二個(gè)顯示流表的命令是在連接了測(cè)試計(jì)算機(jī)以后觀察到結(jié)果??梢娏鞅泶_實(shí)實(shí)現(xiàn)了端口2和端口8之間的分組交換。測(cè)試計(jì)算機(jī)上也能觀察到ping確實(shí)有反映,如果把測(cè)試計(jì)算機(jī)連接到其它物理端口,這ping沒有響應(yīng)。 (二)Openflow交換機(jī)和控制軟件的互聯(lián)及控制軟件加載1、 實(shí)驗(yàn)?zāi)康膌 Controller控制器的軟件安裝l 控制器和Openflow交換機(jī)的互聯(lián)l 加

12、載控制軟件到Openflow交換機(jī)l 驗(yàn)證交換機(jī)預(yù)期功能2、 實(shí)驗(yàn)原理把RYU控制器連接到Openflow交換機(jī),把一個(gè)控制器軟件加載到Openflow交換機(jī),這個(gè)控制器軟件的原理是: 交換機(jī)接收到一個(gè)分組后,把這個(gè)分組報(bào)告給控制器終端,控制器終端顯示;交換機(jī)把分組的源地址和接收到分組的物理端口關(guān)聯(lián)起來;交換機(jī)查找目的地址對(duì)應(yīng)的端口號(hào),如果找到,把該分組轉(zhuǎn)發(fā)到目的端口,否則在交換機(jī)的所有端口廣播該分組。控制器軟件加載到交換機(jī)以后,將實(shí)現(xiàn)一個(gè)普通交換機(jī)的功能,通過一個(gè)普通計(jì)算機(jī)終端驗(yàn)證這個(gè)功能。. 3、 實(shí)驗(yàn)器材1 盛科V330 openflow交換機(jī)一臺(tái)2 普通交換機(jī)一臺(tái)臺(tái)3 普通計(jì)算機(jī)2臺(tái)4

13、、 實(shí)驗(yàn)內(nèi)容和步驟1) 連接網(wǎng)絡(luò)拓?fù)渚W(wǎng)絡(luò)連接如下圖所示。Openflow交換機(jī)的控制端口的地址設(shè)為192.168.1.233,Openflow交換機(jī)控制端口和一個(gè)數(shù)據(jù)端口連接到內(nèi)網(wǎng)交換機(jī)。RYU控制器連接到內(nèi)網(wǎng)交換機(jī)。計(jì)算機(jī)終端連接到openflow交換機(jī)。通過控制器實(shí)現(xiàn)對(duì)openflow交換機(jī)的控制,使openflow交換機(jī)實(shí)現(xiàn)一個(gè)普通交換機(jī)功能。內(nèi)網(wǎng)交換機(jī) 192.168.1.1openflow交換機(jī) Ryu 控制器192.168.1.230計(jì)算機(jī)終端 192.168.1.220控制端口192.168.1.233數(shù)據(jù)端口數(shù)據(jù)端口2) 安裝控制器軟件Ryu控制器由一個(gè)普通計(jì)算機(jī)實(shí)現(xiàn)。由于目前

14、多數(shù)計(jì)算機(jī)采用windows操作系統(tǒng),而Ryu控制器是有一個(gè)linux鏡像實(shí)現(xiàn),因此采用虛擬機(jī)的方法實(shí)現(xiàn)linux操作系統(tǒng)。l 安裝Vmware軟件l 導(dǎo)入Ryu操作系統(tǒng)鏡像l 配置虛擬機(jī)的網(wǎng)絡(luò)為橋接模式,實(shí)現(xiàn)虛擬機(jī)直接訪問物理網(wǎng)絡(luò)l 驗(yàn)證控制器與交換機(jī)控制端口的互通性:ping 192.168.1.2333) telnet 登陸交換機(jī),配置模式控制器地址l 在命令行輸入 telnet 192.168.1.233, 登陸交換機(jī)控制臺(tái)l 獲取configure 幫助: configure ?l 進(jìn)入配置終端狀態(tài):configure terminall 在交換機(jī)控制臺(tái)輸入:openflow set

15、 controller tcp 192.168.1.230 6633l 退出配置狀態(tài):輸入 end 命令4) 驗(yàn)證已經(jīng)在交換機(jī)上面配置好控制器地址5) 加載控制器應(yīng)用軟件,通過控制器實(shí)現(xiàn)對(duì)交換機(jī)的控制。Simple_switch.py 控制器軟件采用反向路徑學(xué)習(xí)的方法實(shí)現(xiàn)mac地址的學(xué)習(xí),在控制器上面實(shí)現(xiàn)簡(jiǎn)單交換機(jī)的功能。該軟件在ryu/app路徑下面l 把交換機(jī)的一個(gè)數(shù)據(jù)端口接入到一個(gè)內(nèi)網(wǎng)或者校園網(wǎng)(下面的實(shí)驗(yàn)假設(shè)交換機(jī)數(shù)據(jù)端口連接到192.168.1.1的交換機(jī)l 在控制器的命令行終端執(zhí)行如下命令:ryu-manager simple_switch.pyl 控制臺(tái)出現(xiàn)如下結(jié)果: 交換機(jī)把接

16、收到的分組發(fā)送到控制器,在控制臺(tái)顯示出相關(guān)信息: 第一個(gè)數(shù)字是交換機(jī)編號(hào),第二個(gè)數(shù)字是源mac地址,第三個(gè)數(shù)字是目的mac地址,第四個(gè)地址是交換機(jī)接收該分組的物理端口。l 改變內(nèi)網(wǎng)連接到交換機(jī)的物理端口,觀察最后一個(gè)數(shù)據(jù)域26變?yōu)槠渌麛?shù)字l 檢查流表的學(xué)習(xí)情況。從控制器遠(yuǎn)程登陸到交換機(jī): telnet 192.168.1.233執(zhí)行命令: ovs-ofctl dump-flows br06) 驗(yàn)證交換機(jī)功能使用一臺(tái)普通計(jì)算機(jī)發(fā)送命令: ping 192.168.1.1, 證明該交換機(jī)完成轉(zhuǎn)發(fā)功能最后另一臺(tái)交換機(jī)確實(shí)ping 通了。(三)Openflow交換機(jī)控制軟件的編寫1、 實(shí)驗(yàn)?zāi)康膌 編寫

17、一個(gè)廣播型二層交換機(jī)l 加載控制軟件到Openflow交換機(jī)并驗(yàn)證預(yù)期功能2、 實(shí)驗(yàn)原理本實(shí)驗(yàn)由兩個(gè)不同的任務(wù)構(gòu)成:編制程序,把openflow交換機(jī)接收到的分組廣播到所有的端口。3、 實(shí)驗(yàn)器材l 盛科V330 openflow交換機(jī)一臺(tái)l 普通交換機(jī)一臺(tái)臺(tái)l 安裝有winshark的普通計(jì)算機(jī)3臺(tái),一臺(tái)作為控制器,兩臺(tái)作為測(cè)試終端。4、 實(shí)驗(yàn)內(nèi)容和步驟1) 連接網(wǎng)絡(luò)拓?fù)渚W(wǎng)絡(luò)連接如下圖所示。Openflow交換機(jī)的控制端口的地址設(shè)為192.168.1.233,Openflow交換機(jī)控制端口和一個(gè)數(shù)據(jù)端口連接到內(nèi)網(wǎng)交換機(jī)。RYU控制器連接到內(nèi)網(wǎng)交換機(jī)。兩個(gè)安裝有winshark的計(jì)算機(jī)終端連接到

18、openflow交換機(jī)。驗(yàn)證winshark能夠?qū)崿F(xiàn)正確的分組偵聽。內(nèi)網(wǎng)交換機(jī) 192.168.1.1openflow交換機(jī) Ryu 控制器192.168.1.230計(jì)算機(jī)終端 192.168.1.220控制端口192.168.1.233數(shù)據(jù)端口計(jì)算機(jī)終端 192.168.1.221數(shù)據(jù)端口2) 編寫廣播程序使用文本編輯器,輸入如下程序,把這個(gè)文件保存為l2.py。/* 引入控制器提供的功能*/from ryu.base import app_managerfrom ryu.controller import ofp_eventfrom ryu.controller.handler impor

19、t MAIN_DISPATCHERfrom ryu.controller.handler import set_ev_cls/* 建立一個(gè)廣播交換機(jī)的類 */class L2Switch(app_manager.RyuApp): def _init_(self, *args, *kwargs): super(L2Switch, self)._init_(*args, *kwargs)set_ev_cls(ofp_event.EventOFPPacketIn, MAIN_DISPATCHER)/* 交換機(jī)接收到一個(gè)分組的處理函數(shù) */ def packet_in_handler(self, ev

20、): msg = ev.msg /* 獲取接收的分組 */ dp = msg.datapath /* 獲取接收的分組的數(shù)據(jù)通路 */ ofp = dp.ofproto /* 獲取接收到的分組的協(xié)議 */ ofp_parser = dp.ofproto_parser /* 解析接收的分組的協(xié)議 */ actions = ofp_parser.OFPActionOutput(ofp.OFPP_FLOOD) /* 定義接收的分組的處理動(dòng)作為廣播 */ out = ofp_parser.OFPPacketOut( datapath=dp, buffer_id=msg.buffer_id, in_por

21、t=msg.in_port, actions=actions)/* 生成發(fā)往交換機(jī)的openflow消息 */ dp.send_msg(out)/* 把這個(gè)消息發(fā)往交換機(jī) */3) 加載程序到控制器在控制器的終端,進(jìn)入到保存l2.py的目錄,輸入如下命令: ryu-manager l2.py4) 驗(yàn)證交換機(jī)功能l 使用一臺(tái)普通計(jì)算機(jī)發(fā)送命令: ping 192.168.1.1-t, l 另外一臺(tái)安裝有winshark的計(jì)算機(jī)啟動(dòng)抓包,分析接收到的分組。l 改變端口,抓包分析由于沒有第三臺(tái)具有抓包軟件的計(jì)算機(jī),所以只能大致的進(jìn)行分析。 (四)Openflow控制器的接口函數(shù)的實(shí)驗(yàn)1、 實(shí)驗(yàn)?zāi)康膌

22、 編寫程序,驗(yàn)證控制器軟件的常見接口函數(shù),體驗(yàn)軟件定義網(wǎng)絡(luò)的消息類型2、 實(shí)驗(yàn)原理通過編程,向交換機(jī)下發(fā)一個(gè)流轉(zhuǎn)發(fā)表,刪除流轉(zhuǎn)發(fā)表,驗(yàn)證轉(zhuǎn)發(fā)表的生存時(shí)間,關(guān)閉和啟動(dòng)交換機(jī)的物理端口,獲取交換機(jī)各個(gè)顆粒度的統(tǒng)計(jì)值。3、 實(shí)驗(yàn)器材l 盛科V330 openflow交換機(jī)一臺(tái)l 普通交換機(jī)一臺(tái)臺(tái)l 安裝有winshark的普通計(jì)算機(jī)3臺(tái),一臺(tái)作為控制器,兩臺(tái)作為測(cè)試終端。4、 實(shí)驗(yàn)內(nèi)容和步驟1) 連接網(wǎng)絡(luò)拓?fù)?,如?shí)驗(yàn)三所示2) 編寫接口函數(shù)的測(cè)試程序完整的測(cè)試程序如附錄所示,下面的測(cè)試步驟需要按照測(cè)試的需要對(duì)測(cè)試程序進(jìn)行修改,刪除不相關(guān)的程序。下面介紹程序的框架結(jié)構(gòu)class Tester(app_

23、manager.RyuApp): def _init_(self, *args, *kwargs): / 初始化函數(shù)def stats_reply_handler(self, ev):/統(tǒng)計(jì)信息處理函數(shù)set_ev_cls(ofp_event.EventOFPSwitchFeatures, CONFIG_DISPATCHER)/注冊(cè)交換機(jī)特征處理消息def switch_features_handler(self, ev):/交換機(jī)特征消息的處理函數(shù) set_ev_cls(ofp_event.EventOFPPortStatsReply, MAIN_DISPATCHER)/注冊(cè)交換機(jī)物理端口處

24、理消息def port_stats_reply_handler(self, ev): self.stats_reply_handler(ev)/交換機(jī)物理端口消息的處理函數(shù)def run_test(): /測(cè)試1:流表的增加和刪除代碼def test_driver(): /測(cè)試程序的主程序 """Will be scheduled by gevent""" print 'Let' go !' global datapath while True: if datapath is None: gevent.slee

25、p(1) else: Tester.run_test() break;3) 流表的下發(fā)和刪除在上述程序的測(cè)試1部分加入如下代碼,實(shí)現(xiàn)流表的下發(fā)和刪除l 下面給出了下發(fā)一個(gè)流表到交換機(jī)的程序,這個(gè)流表把端口2的分組轉(zhuǎn)發(fā)到端口三l 學(xué)生自行添加代碼,實(shí)現(xiàn)把端口三的分組轉(zhuǎn)發(fā)到端口2l 把測(cè)試計(jì)算機(jī)連接到openflow交換機(jī)的端口2,把openflow交換機(jī)的端口3連接到內(nèi)網(wǎng)交換機(jī)192.168.1.1l 從測(cè)試計(jì)算機(jī)上檢測(cè)到內(nèi)網(wǎng)交換機(jī)的連通性。Ping 192.168.1.1l 采用類似下面的代碼,實(shí)現(xiàn)交換機(jī)流表的刪除,并進(jìn)行驗(yàn)證l 設(shè)置轉(zhuǎn)發(fā)表的生存時(shí)間,并進(jìn)行驗(yàn)證match = ofproto_

26、v1_3_parser.OFPMatch()/獲取一個(gè)匹配對(duì)象match.set_in_port(1)/規(guī)定從端口1輸入的分組滿足匹配規(guī)則oa = ofproto_v1_3_parser.OFPActionOutput(2, ofproto_v1_3.OFPCML_MAX)oas = oas.append(oa)inst = ofproto_v1_3_parser.OFPInstructionActions(ofproto_v1_3.OFPIT_APPLY_ACTIONS, oas)insts = insts.append(inst)定義對(duì)滿足匹配規(guī)則的分組需要執(zhí)行的動(dòng)作:轉(zhuǎn)發(fā)到輸出端口3,動(dòng)

27、作可以是一個(gè)鏈表,這里只有一個(gè)動(dòng)作。fm = ofproto_v1_3_parser.OFPFlowMod(datapath, 0, 0, 0, # table 0 ofproto_v1_3.OFPFC_ADD, 0, 0, 0, 0xffffffff, ofproto_v1_3.OFPP_ANY, 0xffffffff, 0, match, insts)openflow消息格式化datapath.send_msg(fm)發(fā)送這個(gè)消息4) 學(xué)生自選探索的部分l 獲取端口信息l 獲取流統(tǒng)計(jì)信息l 控制交換機(jī)發(fā)送分組附錄一 OVS Open vSwitch 基本操作命

28、令1. 顯示bridge的信息,連接到bridge上的interface,tap和端口號(hào)(port)ovs-ofctl show ovs-switch (注:在本實(shí)驗(yàn)環(huán)境中,ovs-switch均由br0代替)2. 顯示flow entriesovs-ofctl dump-flows ovs-switch。3. 添加flowovs-ofctl add-flow ovs-switch "in_port=2,actions=output:8"。該命令有很多參數(shù), 一般來說actions之前都是流匹配條件的部分,常用的流匹配條件是 l in_port: switch的端

29、口l dl_src: 源mac地址l dl_dst:目的mac地址l dl_type:以太網(wǎng)協(xié)議類型, 0x0806是arp packet, 0x0800是ip packetl nw_src:源IPl nw_dst:目的ipl nw_proto:網(wǎng)絡(luò)層協(xié)議類型 ,注意和dl_type區(qū)分,同時(shí)也需要和dl_type一起使用,比如dl_type是ip(0x0800),nw_proto=1就表示icmp packetl tp_src: tcp udp源端口l tp_dst: tcp udp目的端口ipSame as dl_type=0x0800.icmpSame as dl_t

30、ype=0x0800,nw_proto=1.tcpSame as dl_type=0x0800,nw_proto=6.udpSame as dl_type=0x0800,nw_proto=17.arpSame as dl_type=0x0806.rarpSame as dl_type=0x8035.actions:滿足匹配條件的處理方法,有如下三種可能l 轉(zhuǎn)發(fā)到某個(gè)物理輸出端口:output:portl 轉(zhuǎn)發(fā)到控制器:controller(key=value)l 丟棄l 還可能包括如下動(dòng)作:修改目的mac地址、源mac地址、目的ip地址、源ip地址、目的

31、端口號(hào)、源端口號(hào)等4. 刪除所有flowovs-ofctl del-flows ovs-switch附錄二 控制器接口函數(shù)實(shí)驗(yàn)的完整代碼(實(shí)驗(yàn)四的實(shí)驗(yàn))import loggingimport structimport geventfrom ryu.base import app_managerfrom ryu.controller import ofp_eventfrom ryu.controller.handler import MAIN_DISPATCHER, CONFIG_DISPATCHERfrom ryu.controller.handler import set_ev_clsfr

32、om ryu.ofproto import ofproto_v1_3from ryu.ofproto import ofproto_v1_3_parserfrom ryu.lib import mac#mac.haddr_to_binLOG = logging.getLogger('ryu.app.Tester')datapath = Nonetester = Noneclass Tester(app_manager.RyuApp): def _init_(self, *args, *kwargs): super(Tester, self)._init_(*args, *kwa

33、rgs) self.waiters = global tester tester = self def stats_reply_handler(self, ev): msg = ev.msg dp = msg.datapath if dp.id not in self.waiters: print 'dp id is not in the waiters, maybe the request is timeout' return if msg.xid not in self.waitersdp.id: print 'msg xid is not in the waite

34、rs, maybe the request is timeout' return lock, msgs = self.waitersdp.idmsg.xid msgs.append(msg) print 'stats_reply_handler:', msgs if msg.flags & dp.ofproto.OFPSF_REPLY_MORE: print 'more flag present, wait for the continued reply' return del self.waitersdp.idmsg.xid lock.set(

35、) set_ev_cls(ofp_event.EventOFPSwitchFeatures, CONFIG_DISPATCHER) def switch_features_handler(self, ev): msg = ev.msg datapath = msg.datapath ev.msg.datapath.ev_q.set_dispatcher(MAIN_DISPATCHER) set_ev_cls(ofp_event.EventOFPPortStatsReply, MAIN_DISPATCHER) def port_stats_reply_handler(self, ev): sel

36、f.stats_reply_handler(ev) set_ev_cls(ofp_event.EventOFPSwitchFeatures, CONFIG_DISPATCHER) def switch_features_handler(self, ev): msg = ev.msg global datapath datapath = msg.datapath staticmethod def run_test(): global datapath print 'Test begins.' print 'Test0: test switch config.' s

37、c = ofproto_v1_3_parser.OFPSetConfig(datapath, ofproto_v1_3.OFPC_FRAG_NORMAL, 1518) datapath.send_msg(sc) gcr = ofproto_v1_3_parser.OFPGetConfigRequest(datapath) datapath.send_msg(gcr) print 'Test1: test flow(in_port=1, instructions=apply_actions(actions=output 2) add/delete.' match = ofprot

38、o_v1_3_parser.OFPMatch() match.set_in_port(1) oa = ofproto_v1_3_parser.OFPActionOutput(2, ofproto_v1_3.OFPCML_MAX) oas = oas.append(oa) inst = ofproto_v1_3_parser.OFPInstructionActions(ofproto_v1_3.OFPIT_APPLY_ACTIONS, oas) insts = insts.append(inst) fm = ofproto_v1_3_parser.OFPFlowMod(datapath, 0,

39、0, 0, # table 0 ofproto_v1_3.OFPFC_ADD, 0, 0, 0, 0xffffffff, ofproto_v1_3.OFPP_ANY, 0xffffffff, 0, match, insts) datapath.send_msg(fm) # delete the just-installed flow. # NB: match can' be reused because ryu add some class data dynamically. match = ofproto_v1_3_parser.OFPMatch() match.set_in_por

40、t(1) fm = ofproto_v1_3_parser.OFPFlowMod(datapath, 0, 0, 0, # table 0 ofproto_v1_3.OFPFC_DELETE, 0, 0, 0, 0xffffffff, ofproto_v1_3.OFPP_ANY, 0xffffffff, 0, match, insts) datapath.send_msg(fm) # reinstall the flow with timeout match = ofproto_v1_3_parser.OFPMatch() match.set_in_port(1) oas = oao = of

41、proto_v1_3_parser.OFPActionOutput(2, ofproto_v1_3.OFPCML_MAX) oas.append(oao) mted = ofproto_v1_3_parser.MTEthDst(ofproto_v1_3.OXM_OF_ETH_DST, mac.haddr_to_bin("01:00:00:00:D4:8F") oasf = ofproto_v1_3_parser.OFPActionSetField(mted) oas.append(oasf) inst = ofproto_v1_3_parser.OFPInstruction

42、Actions(ofproto_v1_3.OFPIT_APPLY_ACTIONS, oas) insts = insts.append(inst) fm = ofproto_v1_3_parser.OFPFlowMod(datapath, 0, 0, 0, # table 0 ofproto_v1_3.OFPFC_ADD, 3, 3, 0, 0xffffffff, ofproto_v1_3.OFPP_ANY, 0xffffffff, ofproto_v1_3.OFPFF_SEND_FLOW_REM, # send flow removal. match, insts) datapath.sen

43、d_msg(fm) print 'Test2: test port config.' pm = ofproto_v1_3_parser.OFPPortMod(datapath, 1, mac.haddr_to_bin("01:00:00:00:D4:8F"), ofproto_v1_3.OFPPC_NO_RECV, ofproto_v1_3.OFPPC_NO_RECV, 0) datapath.send_msg(pm) # restore the config. pm = ofproto_v1_3_parser.OFPPortMod(datapath, 1, mac.haddr_to_bin("01:00:00:00:D4:8F"), 0, ofproto_v1_3.OFPPC_NO_RECV, 0) datapath.send_msg(pm) print 'Test3: test multipart message.' dr = ofproto_v1_3_parser.OFPDescStatsRequest(datapath,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論