2019 SDN上機第4次做業

1.做業要求:

  • 解壓安裝OpenDayLight控制器(本次實驗統一使用Beryllium版本)
  • 啓動並安裝插件
  • 用Python腳本搭建給定的拓撲,並鏈接OpenDayLight控制器
  • 在控制器提供的WEB UI中下發流表使h2 在20s內ping不通h3,20s後恢復
  • 藉助Postman經過OpenDayLight的北向接口下發流表,再利用OpenDayLight北向接口查看已下發的流表
  • 做業博客連接:http://edu.cnblogs.com/campus/fzu/fzusdn2019/homework/10017

2.具體操做步驟與截圖說明:

實驗環境:VMware Workstation Pro14.一、ubuntu-16.04html

(1)解壓安裝OpenDayLight控制器(本次實驗統一使用Beryllium版本)

a.先下載OpenDayLight、Postman的安裝包,因爲OpenDayLight是java實現的,須要配置java環境,所以要去下載jdk軟件開發工具包,相應的下載連接以下:java

OpenDayLightBeryllium版本下載連接:https://nexus.opendaylight.org/content/repositories/public/org/opendaylight/integration/distribution-karaf/node

Postman下載連接:https://www.getpostman.com/
python

b.下載好安裝包並解壓後,要先配置Java環境,具體步驟以下:web

  • 打開終端,輸入如下命令:
sudo gedit ~/.bashrc

  • 對bashrc文件進行修改,在文件底部添加如下語句(Java_HOME的路徑爲安裝的jdk所在的位置):
export JAVA_HOME=/home/cyk/jdk1.8.0_211
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

(2)啓動並安裝插件

a.進入OpenDayLigh的文件夾,運行./karaf (注意不能用sudo運行):
json

b.安裝feature( odl-l2switch-switch-ui安裝時間較長,需耐心等待一段時間):ubuntu

feature:install odl-restconf odl-l2switch-switch-ui odl-openflowplugin-all odl-mdsal-apidocs odl-dlux-core odl-dlux-node odl-dlux-yangui

(3)用Python腳本搭建給定的拓撲,並鏈接OpenDayLight控制器

給定的拓撲結構以下所示:
api

a.建立Python腳本a.py,代碼以下所示:瀏覽器

from mininet.topo import Topo
class Mytopo(Topo):
    def __init__(self):
        Topo.__init__(self)
        sw=self.addSwitch('s1')
        count=1
        for i in range(3):
                host = self.addHost('h{}'.format(count))
                self.addLink(host,sw,1,count)
                count = count + 1
topos = {'mytopo': (lambda:Mytopo())}

b.打開OpenDayLigh,並運行:bash

sudo mn --custom /home/cyk/a.py --topo mytopo --controller=remote,ip=127.0.0.1,port=6633 --switch ovsk,protocols=OpenFlow13

c.利用pingall來測試主機之間的連通性,結果以下所示:

d.打開火狐瀏覽器訪問http://127.0.0.1:8181/index.html,進入ODL圖形化界面,以後點擊reload,能夠獲得以下圖所示的結果:

(4)在控制器提供的WEB UI中下發流表使h2 在20s內ping不通h3,20s後恢復

a.依次點擊Yang UI>Opendaylight-inventory>config>nodes>table>flow:

b.分別設置nod、table、flow的值,以下圖所示(其中node/openflow:1 交換機編號;table/0 流表編號;flow/不超過1024,不衝突便可流表項編號;GET爲查詢流表,下發流表要修改成PUT;點擊加號添加流表項):

c.使h2在20s內ping不通h3首先要知道h2和h3分別鏈接ovs的哪一個端口,在mininet中用links查詢鏈路鏈接狀況:

從鏈路鏈接狀況能夠看出,h2鏈接s1的2號端口,h3鏈接s1的3號端口

d.在Opendaylight下設置相關值,以下圖所示:

  • id:流表項id,爲任意值,不衝突便可
    in-port:流表項匹配的進入端口,這裏需填h2對應的port號
    ethernet-type:以太網類型0x0800

  • layer-3-match:ipv4-match 三層匹配爲ipv4匹配
    ipv4-source:數據包源ip匹配項(這裏因爲port1進入的數據包只多是h2發送的因此能夠不填)
    ipv4-destination:數據包目的ip匹配項

  • 新增instruction list這是流表項匹配到數據報後要執行的指令
    instruction:apply-actions-case 執行動做
    action drop-action-case 丟包動做(轉發動做爲output-action 並要在output-node-connector填寫轉發端口)

  • priority 流表項優先級,要大於odl下發的默認流表,這裏設置成最大65535
    hard-timeout 硬超時,流表項下發後生效時長
    table_id 流表id 默認爲0

e.在設置好以後,先在mininet中進行h2 ping h3,而後在WEB UI中選擇PUT,並點擊旁邊的send,結果以下圖所示,icmp_seq會延遲20:

(5)藉助Postman經過OpenDayLight的北向接口下發流表,再利用OpenDayLight北向接口查看已下發的流表

a.經過preview查看剛剛下發的流表項的json格式:

http://127.0.0.1:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:1/flow-node-inventory:table/0/flow/5

{
    "flow": [
        {
            "id": "5",
            "match": {
                "in-port": "2",
                "ethernet-match": {
                    "ethernet-type": {
                        "type": "0x0800"
                    }
                },
                "ipv4-destination": "10.0.0.3/32"
            },
            "instructions": {
                "instruction": [
                    {
                        "order": "0",
                        "apply-actions": {
                            "action": [
                                {
                                    "order": "0",
                                    "drop-action": {}
                                }
                            ]
                        }
                    }
                ]
            },
            "hard-timeout": "20",
            "table_id": "0"
        }
    ]
}

b.把preview裏的url複製到地址欄,消息方式選擇PUT,type設置爲Basic Auth,並填寫帳戶和密碼:

c.把Body中將消息格式設置成json,上傳方式設置爲raw,並將preview的消息粘貼在文本框中,修改id和url裏的flow爲2,防止與以前的流表重合,點擊send後下發成功:

d.發送成功後改成GET並send查看剛剛下發的流表項:

3.實驗總結:

​ 在本次實驗中,我學到了不少新的東西,經過利用Python腳本搭建拓撲,鏈接到OpenDayLight控制器而且在控制器提供的WEB UI中下發流表實現具體功能,以及藉助Postman經過OpenDayLight的北向接口下發流表,再利用OpenDayLight北向接口查看已下發的流表,我掌握了OpenDayLight、Postman的基本使用方法與操做命令,在本次控制平面的學習實踐中,我對控制器在SDN的角色有了一個更深的理解和體會!

相關文章
相關標籤/搜索