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

    1.实验拓扑

    用Python脚本创建:

    from mininet.topo import Topo
    
    class MyTopo(Topo):
    
    	def __init__(self):
    
    	Topo.__init__(self)
    
            	h1 = self.addHost('h1')
            	h2 = self.addHost('h2')
    		h3 = self.addHost('h3')
            	h4 = self.addHost('h4')
    		h5 = self.addHost('h5')
            	h6 = self.addHost('h6')
    
            	s1 = self.addSwitch('s1')
    		s2 = self.addSwitch('s2')
    
    		self.addLink(h1, s1, 1, 1)
    		self.addLink(h2, s1, 1, 2)
    	    	self.addLink(h3, s1, 1, 3)
    		self.addLink(h4, s2, 1, 1)
    		self.addLink(h5, s2, 1, 2)
    	    	self.addLink(h6, s2, 1, 3)
    	    	self.addLink(s1, s2, 4, 4)   
            
    topos = {'mytopo': (lambda: MyTopo())}
    

    运行脚本

    sudo mn --custom ./2.py --topo mytopo --controller=remote,ip=127.0.0.1,port=6633 --switch ovsk,protocols=OpenFlow13
    

    连接Ryu控制器

    ryu-manager ofctl_rest.py
    

    输入net,查看各主机与交换机之间的端口情况

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

    安装curl

    sudo apt-get install curl
    

    编写sh脚本

    curl -X POST -d '{
        "dpid": 1,
        "priority":1,
        "match":{
            "in_port":1
        },
        "actions":[
            {
                "type": "PUSH_VLAN",     # 将从主机发来的数据包打上vlan_tag
                "ethertype": 33024       # 表示IEEE 802.1Q的VLAN数据帧
            },
            {
                "type": "SET_FIELD",
                "field": "vlan_vid",     # 设置VLAN ID
                "value": 4096            # 设置vlan_id的值
            },
            {
                "type": "OUTPUT",
                "port": 4
            }
        ]
    
    }' http://127.0.0.1:8080/stats/flowentry/add
    
    
    
    
    
    curl -X POST -d '{
        "dpid": 1,
        "priority":1,
        "match":{
            "in_port":2
        },
        "actions":[
            {
                "type": "PUSH_VLAN",     # 将从主机发来的数据包打上vlan_tag
                "ethertype": 33024       # 表示IEEE 802.1Q的VLAN数据帧
            },
    
            {
                "type": "SET_FIELD",
                "field": "vlan_vid",     # 设置VLAN ID
                "value": 4097            # 设置vlan_id的值
            },
            {
                "type": "OUTPUT",
                "port": 4
            }
        ]
    }' http://127.0.0.1:8080/stats/flowentry/add
    
    
    curl -X POST -d '{
        "dpid": 1,
        "priority":1,
        "match":{
            "in_port":3
        },
        "actions":[
            {
                "type": "PUSH_VLAN",     # 将从主机发来的数据包打上vlan_tag
                "ethertype": 33024       # 表示IEEE 802.1Q的VLAN数据帧
            },
            {
                "type": "SET_FIELD",
                "field": "vlan_vid",     # 设置VLAN ID
                "value": 4098            # 设置vlan_id的值
            },
            {
                "type": "OUTPUT",
                "port": 4
            }
        ]
    }' http://127.0.0.1:8080/stats/flowentry/add
    
    
    curl -X POST -d '{
        "dpid": 1,
        "priority":1,
        "match":{
            "dl_vlan": "0"
        },
        "actions":[
            {
                "type": "POP_VLAN",     # 给进入交换机的包去除 vlan_tag
            },
            {
                "type": "OUTPUT",
                "port": 1
            }
        ]
    }' http://localhost:8080/stats/flowentry/add
    
    
    curl -X POST -d '{
        "dpid": 1,
        "priority":1,
        "match":{
            "dl_vlan": "1"
        },
    
        "actions":[
            {
                "type": "POP_VLAN",     # 给进入交换机的包去除 vlan_tag
            },
            {
                "type": "OUTPUT",
                "port": 2
            }
        ]
    }' http://localhost:8080/stats/flowentry/add
    
    curl -X POST -d '{
        "dpid": 1,
        "priority":1,
        "match":{
            "dl_vlan": "2"
        },
        "actions":[
            {
                "type": "POP_VLAN",     # 给进入交换机的包去除 vlan_tag
            },
            {
                "type": "OUTPUT",
                "port": 3
            }
        ]
    }' http://localhost:8080/stats/flowentry/add
    
    
    
    curl -X POST -d '{
        "dpid": 2,
        "priority":1,
        "match":{
            "in_port":1
        },
        "actions":[
            {
                "type": "PUSH_VLAN",     # s1将从主机发来的数据包打上vlan_tag
                "ethertype": 33024       # 帧类型0x8100(=33024): 表示IEEE 802.1Q的VLAN数据帧
            },
            {
                "type": "SET_FIELD",
                "field": "vlan_vid",     # 设置VLAN ID
                "value": 4096            # 设置vlan_id的值
            },
            {
                "type": "OUTPUT",
                "port": 4
            }
        ]
    
    }' http://127.0.0.1:8080/stats/flowentry/add
    
    
    curl -X POST -d '{
        "dpid": 2,
        "priority":1,
        "match":{
            "in_port":2
        },
    
        "actions":[
            {
                "type": "PUSH_VLAN",     # s1将从主机发来的数据包打上vlan_tag
                "ethertype": 33024       # 帧类型0x8100(=33024): 表示IEEE 802.1Q的VLAN数据帧
            },
            {
                "type": "SET_FIELD",
                "field": "vlan_vid",     # 设置VLAN ID
                "value": 4097            # 设置vlan_id的值
            },
            {
                "type": "OUTPUT",
                "port": 4
            }
        ]
    }' http://127.0.0.1:8080/stats/flowentry/add
    
    
    curl -X POST -d '{
        "dpid": 2,
        "priority":1,
        "match":{
            "in_port":3
        },
        "actions":[
            {
                "type": "PUSH_VLAN",     # s1将从主机发来的数据包打上vlan_tag
                "ethertype": 33024       # 帧类型0x8100(=33024): 表示IEEE 802.1Q的VLAN数据帧
            },
            {
                "type": "SET_FIELD",
                "field": "vlan_vid",     # 设置VLAN ID
                "value": 4098            # 设置vlan_id的值
            },
    
            {
                "type": "OUTPUT",
                "port": 4
            }
        ]
    
    }' http://127.0.0.1:8080/stats/flowentry/add
    
    
    
    curl -X POST -d '{
        "dpid": 2,
        "priority":1,
        "match":{
            "dl_vlan": "0"
        },
        "actions":[
            {
                "type": "POP_VLAN",     # 给进入交换机的包去除 vlan_tag
            },
            {
                "type": "OUTPUT",
                "port": 1
            }
        ]
    }' http://localhost:8080/stats/flowentry/add
    
    
    curl -X POST -d '{
        "dpid": 2,
        "priority":1,
        "match":{
            "dl_vlan": "1"
        },
        "actions":[
            {
                "type": "POP_VLAN",     # 给进入交换机的包去除 vlan_tag
            },
            {
                "type": "OUTPUT",
                "port": 2
            }
        ]
    
    }' http://localhost:8080/stats/flowentry/add
    
    curl -X POST -d '{
        "dpid": 2,
        "priority":1,
        "match":{
            "dl_vlan": "2"
        },
        "actions":[
            {
                "type": "POP_VLAN",     # 给进入交换机的包去除 vlan_tag
            },
            {
                "type": "OUTPUT",
                "port": 3
            }
    
        ]
    
    }' http://localhost:8080/stats/flowentry/add
    

    执行脚本

    查看s1流表

    sudo ovs-ofctl -O OpenFlow13 dump-flows s1
    

    查看s2流表

    sudo ovs-ofctl -O OpenFlow13 dump-flows s2
    

    用pingall命令检测主机之间的连通性

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

    相比于第二次实验,这次实验使用Ryu的REST API下发流表实现VLAN,代码采用JSON格式,将要设置的属性以字典的形式表现出来,可读性极佳。而且运行起来也很方便,将要下发的流表写入脚本,在终端直接运行即可。

  • 相关阅读:
    JAVASCRIPT 中用作真假值作为判断的总结
    JSON.stringify(),JSON.parse(),toJSON()使用方法总结
    ES6中Number中的扩展
    浏览器同源政策及其规避方法
    HTML常用全部代码--第二部分--JAVASCRIPT( 小伙伴要牢记😁😁😁😁 )
    HTML常用全部代码--第一部分--HTML/CSS( 小伙伴要牢记😁😁😁😁 )
    CSS选择器知识梳理
    javascript中 typeof和instanceof的区别
    VUE--404页面
    二级数组省市表(二维数组json)
  • 原文地址:https://www.cnblogs.com/tinygod/p/11990246.html
Copyright © 2011-2022 走看看