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

    1.实验拓扑
    • python代码
    from mininet.topo import Topo
    class MyTopo(Topo):
    
        def __init__(self):
    
            # initilaize topology
            Topo.__init__(self)
    
            # add hosts and switches
            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')
    
            # add links
            self.addLink(h1, s1, 1, 1)
            self.addLink(h2, s1, 1, 2)
            self.addLink(h3, s1, 1, 3)
            self.addLink(s1, s2, 4, 4)
            self.addLink(h4, s2, 1, 1)
            self.addLink(h5, s2, 1, 2)
            self.addLink(h6, s2, 1, 3)
            
            topos = {'mytopo': (lambda: MyTopo())}
    
    • 运行命令创建拓扑
      Q7JZxe.png
    • pingall测试连通性
      Q7JV2D.png
    • 连接ryu控制器
      Q7JlIP.png
    2.使用Ryu的REST API下发流表实现和第2次实验同样的VLAN
    • sh格式脚本下发流表(以s1为例,s2将"dpid"改为2)

        #端口号1发来数据
        curl -X POST -d '{
        "dpid": 1,
        "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
      
        #端口号2发来数据
        curl -X POST -d '{
        "dpid": 1,
        "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
        #端口号3发来数据
        curl -X POST -d '{
        "dpid": 1,
        "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
        #向端口1转发
        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
      
        #向端口2转发
        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
      
        #向端口3转发
        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
      
    • 执行sh格式文件
      Q7JE8O.png

    • 控制器端显示下发的流表已被接收
      Q7JQat.png
      Q7J8G8.png

    • 使用命令查看流表
      Q7JGRS.png
      Q7JJxg.png

    • pingall查看连通性
      Q7JtMQ.png

    3.对比两种方法,写出你的实验体会
    • 相比第二次作业中手动下发流表,使用脚本更加直观,可一次性操作,但所需要求也更多,注意事项比较复杂;而手动下发流表更为简洁
  • 相关阅读:
    hive表链接
    hive聚合函数和表生成函数
    hive条件函数
    hive日期函数
    hive之size函数和cast转换函数
    hive数学函数
    hive排序
    5G基站概述
    MEC边缘云平台
    ELK日志系统的架构
  • 原文地址:https://www.cnblogs.com/caoyuanfeifeixiong/p/12059904.html
Copyright © 2011-2022 走看看