zoukankan      html  css  js  c++  java
  • 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作为控制器在使用过程中让人感到更为顺畅,条理、逻辑、结果的判断都有迹可循。

  • 相关阅读:
    volatile关键字,使一个变量在多个线程间可见。
    grep sed awk
    mysql高级聚合
    Hive高级聚合GROUPING SETS,ROLLUP以及CUBE
    用SecureCRT来上传和下载文件
    mysql导出导入数据
    redis入门
    spark 常用技巧总结2
    生成数据库字典
    spark 常用技巧总结
  • 原文地址:https://www.cnblogs.com/NiftyChen/p/11985468.html
Copyright © 2011-2022 走看看