2019 SDN上机第6次作业

1.实验拓扑

要求达成如下拓扑

2019 SDN上机第6次作业_第1张图片

使用Python脚本完成拓扑搭建,并连接ryu控制器。

#!/usr/bin/python

from mininet.topo import Topo

class MyTopo(Topo):

    def __init__(self):
        Topo.__init__(self)
        switchs = []
        for i in range(2):
            sw = self.addSwitch("s{}".format(i + 1))
            switchs.append(sw)

        count = 1
        for sw in switchs:
            for i in range(3):
                h = self.addHost("h{}".format(count))
                self.addLink(sw, h)
                count += 1

    self.addLink(switchs[0], switchs[1])

topos = {"mytopo": (lambda : MyTopo()) }

2019 SDN上机第6次作业_第2张图片

2.使用Ryu的REST API下发流表实现和第2次实验同样的VLAN

参考RYU官方的API文档和助教博客内容,结合第二次上机实验的流表信息可得出如下代码片段

#对要从s1分发出去的数据进行流表约束
#本例给出h1经由s1受到的约束
curl -X POST -d '{
    "dpid": 1,                      #data path id -> switch
    "priority":1,
    "match":{
        "in_port":1
    },
    "actions":[
        {
            "type": "PUSH_VLAN",
                    # Push a new VLAN tag if a input frame is non-VLAN-tagged
            "ethertype": 33024      
                    # Ethertype 0x8100(=33024): IEEE 802.1Q VLAN-tagged frame
        },
        {
            "type" : "SET_FIELD",
            "field": "vlan_vid",     # Set VLAN ID
            "value": 4096     
                    # Describe sum of vlan_id(e.g. 6) | OFPVID_PRESENT(0x1000=4096)
        },
        {
            "type": "OUTPUT",
            "port": 4
        }
    ]
}' http://127.0.0.1:8080/stats/flowentry/add
#对s1从外部交换机收到的数据进行标签识别与分发
#以s1对发至h1的信息筛选为例
curl -X POST -d '{
    "dpid": 1,
    "priority":1,
    "match":{
        "dl_vlan": "0",
        "in_port": 4
    },
    "actions":[
        {
            "type": "POP_VLAN",     # Discard vlan_tag
        },
        {
            "type": "OUTPUT",       #Divide into port 1
            "port": 1
        }
    ]
}' http://127.0.0.1:8080/stats/flowentry/add

依此类推,写出十二个将要分发的流表项


开启控制器及其可视化图形界面
2019 SDN上机第6次作业_第3张图片
2019 SDN上机第6次作业_第4张图片
交换机初始状态尚无任何流表项,执行写好的脚本文件进行流表的下发,交换机终端页面显示成功接收

2019 SDN上机第6次作业_第5张图片
此时在网页端也可看到所下发的流表
2019 SDN上机第6次作业_第6张图片
2019 SDN上机第6次作业_第7张图片
对网络拓扑进行pingall操作,得到预期结果
2019 SDN上机第6次作业_第8张图片

3.对比两种方法,写出你的实验体会

两者的实现皆带有一定的工作量,但RYU作为控制器在使用过程中让人感到更为顺畅,条理、逻辑、结果的判断都有迹可循。

你可能感兴趣的:(2019 SDN上机第6次作业)