• 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()) }
    

    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
    

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


    开启控制器及其可视化图形界面


    交换机初始状态尚无任何流表项,执行写好的脚本文件进行流表的下发,交换机终端页面显示成功接收


    此时在网页端也可看到所下发的流表


    对网络拓扑进行pingall操作,得到预期结果

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

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

  • 相关阅读:
    02_java基础学习_基础语法(上)01_day02总结
    EditPlus如何设置保存时不产生.bak备份文件?
    UltraEdit(UE)如何设置去掉.bak备份文件?
    如何在win10上连接苹果无线键盘
    01_java基础学习_Java概述_day01总结
    Python 提取Twitter tweets中的元素(包括text, screen names, hashtags)
    #leetcode#Path Sum II
    怎样实现广度优先遍历(BFS)
    GCD编程-串行队列与并发队列
    在对方电脑建立IPC连接, 利用IPC$入侵 运行木马
  • 原文地址:https://www.cnblogs.com/NiftyChen/p/11985468.html
Copyright © 2020-2023  润新知