zoukankan      html  css  js  c++  java
  • 2019 SDN上机第6次作业

    1.  实验拓扑

    • 实验拓扑图:

    • 要求:使用python脚本生成拓扑,并连接ryu

    from mininet.topo import Topo
    class Mytopo(Topo):
        def __init__(self):
            Topo.__init__(self)
            s=[]
            for i in range(2):
             sw = self.addSwitch('s{}'.format(i+1))
             s.append(sw)
            self.addLink(s[0],s[1])
            count=1
            for two in s:
             for i in range(3):
              host = self.addHost('h{}'.format(count))
              self.addLink(two,host)
              count += 1
    topos = {'mytopo': (lambda:Mytopo())}
    
    sudo mn --custom MyTopo.py --topo mytopo --controller=remote,ip=127.0.0.1,port=6633 --switch ovsk,protocols=OpenFlow13
    

    使用pingall命令测试连通性

    打开ryu rest服务器

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

    # flow.sh
    # flow.sh
    curl -X POST -d '{
        "dpid":1, # 交换机s1
        "match":{
            "in_port":1 # 端口1
        },
        "actions":[
            {
                "type": "PUSH_VLAN",
                "ethertype": 33024
            },
            {
                "type": "SET_FIELD", # 打tag
                "field": "vlan_vid",
                "value": 4097 # value = 4096 + dl_vlan
            },
            {
                "type": "OUTPUT",
                "port": 4 # 转发端口
            }
        ]
    }' http://localhost:8080/stats/flowentry/add
    
    curl -X POST -d '{
        "dpid": 1,
        "match":{
            "in_port":2
        },
        "actions":[
            {
                "type": "PUSH_VLAN",
                "ethertype": 33024
            },
            {
                "type": "SET_FIELD",
                "field": "vlan_vid",
                "value": 4098
            },
            {
                "type": "OUTPUT",
                "port": 4
            }
        ]
    }' http://localhost:8080/stats/flowentry/add
    
    curl -X POST -d '{
        "dpid": 1,
        "match":{
            "in_port":3
        },
        "actions":[
            {
                "type": "PUSH_VLAN",
                "ethertype": 33024
            },
            {
                "type": "SET_FIELD",
                "field": "vlan_vid",
                "value": 4099
            },
            {
                "type": "OUTPUT",
                "port": 4
            }
        ]
    }' http://localhost:8080/stats/flowentry/add
    
    
    curl -X POST -d '{
        "dpid": 1,
        "match":{
            "dl_vlan": "1" # tag
        },
        "actions":[
            {
                "type": "POP_VLAN", # 去除tag
            },
            {
                "type": "OUTPUT",
                "port": 1
            }
        ] 
    }' http://localhost:8080/stats/flowentry/add
    
    
    curl -X POST -d '{
        "dpid": 1,
        "match":{
            "dl_vlan": "2"
        },
        "actions":[
            {
                "type": "POP_VLAN",
            },
            {
                "type": "OUTPUT",
                "port": 2
            }
        ]
    }' http://localhost:8080/stats/flowentry/add
    
    
    curl -X POST -d '{
        "dpid": 1,
        "match":{
            "dl_vlan": "3"
        },
        "actions":[
            {
                "type": "POP_VLAN",
            },
            {
                "type": "OUTPUT",
                "port": 3
            }
        ]
    }' http://localhost:8080/stats/flowentry/add
    
    
    curl -X POST -d '{
        "dpid":2,
        "match":{
            "in_port":1
        },
        "actions":[
            {
                "type": "PUSH_VLAN",
                "ethertype": 33024
            },
            {
                "type": "SET_FIELD",
                "field": "vlan_vid",
                "value": 4097
            },
            {
                "type": "OUTPUT",
                "port": 4
            }
        ]
    }' http://localhost:8080/stats/flowentry/add
    
    curl -X POST -d '{
        "dpid": 2,
        "match":{
            "in_port":2
        },
        "actions":[
            {
                "type": "PUSH_VLAN",
                "ethertype": 33024
            },
            {
                "type": "SET_FIELD",
                "field": "vlan_vid",
                "value": 4098
            },
            {
                "type": "OUTPUT",
                "port": 4
            }
        ]
    }' http://localhost:8080/stats/flowentry/add
    
    curl -X POST -d '{
        "dpid": 2,
        "match":{
            "in_port":3
        },
        "actions":[
            {
                "type": "PUSH_VLAN",
                "ethertype": 33024
            },
            {
                "type": "SET_FIELD",
                "field": "vlan_vid",
                "value": 4099
            },
            {
                "type": "OUTPUT",
                "port": 4
            }
        ]
    }' http://localhost:8080/stats/flowentry/add
    
    
    curl -X POST -d '{
        "dpid": 2,
        "match":{
            "dl_vlan": "1"
        },
        "actions":[
            {
                "type": "POP_VLAN",
            },
            {
                "type": "OUTPUT",
                "port": 1
            }
        ]
    }' http://localhost:8080/stats/flowentry/add
    
    
    curl -X POST -d '{
        "dpid": 2,
        "match":{
            "dl_vlan": "2"
        },
        "actions":[
            {
                "type": "POP_VLAN",
            },
            {
                "type": "OUTPUT",
                "port": 2
            }
        ]
    }' http://localhost:8080/stats/flowentry/add
    
    
    curl -X POST -d '{
        "dpid": 2,
        "match":{
            "dl_vlan": "3"
        },
        "actions":[
            {
                "type": "POP_VLAN",
            },
            {
                "type": "OUTPUT",
                "port": 3
            }
        ]
    }' http://localhost:8080/stats/flowentry/add
    

    使用命令安装curl

    $ sudo apt install curl
    
    

    使用命令

    $ sudo sh ./flow.sh
    

    ovs查看流表

    测试连通性:

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

    两种方法虽然目的一样,但使用Ryu的REST API下发流表来实现的话相对来说更加灵活容易修改,且直接查看代码也更加直观清晰,易于理解,操作也更为简单。

  • 相关阅读:
    Linux下编译LibCURL
    Linux下编译OpenSSL
    Linux下编译UnixODBC
    Linux下编译Boost
    MySQL存储引擎【InnoDB、MyISAM、Memory】
    MySQL数据库MyISAM和InnoDB存储引擎的比较
    MySQL存储引擎MyISAM与InnoDB的优劣
    14款经典的MySQL客户端软件
    MySQL 数据类型
    MySQL数据库的基本数据类型
  • 原文地址:https://www.cnblogs.com/Jamwong/p/11984774.html
Copyright © 2011-2022 走看看