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

  • 相关阅读:
    记一次Postgres CPU爆满故障
    Bug 28450914 : ORA-600: [KDLRCI_GET_INLINE_DATA] SELECTING FROM CDB_FEATURE_USAGE_STATISTICS
    获取数据表中列的描述值
    【自考】数据结构第四章树和二叉树,期末不挂科指南,第6篇
    SqlServer视图查询效率测试
    MySQL中使用group by 是总是出现1055的错误
    redis中key键操作
    SQL Server等待事件—PAGEIOLATCH_EX
    MySQL 什么是索引?
    计算经历的时间
  • 原文地址:https://www.cnblogs.com/NiftyChen/p/11985468.html
Copyright © 2011-2022 走看看