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

    1.实验拓扑

    (1)实验拓扑图

    (2)构建拓建拓扑

    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)
            count=1
            for two in s:
             for i in range(3):
              host = self.addHost('h{}'.format(count))
              self.addLink(two,host)
              count += 1
    	self.addLink(s[0],s[1])
    topos = {'mytopo': (lambda:Mytopo())}
    

    (3)用以下命令构建拓扑

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

    (4)使用net命令查看端口情况

    (5)使用pingall测试主机连通性

    (6)进入文件夹的ryu文件夹下的app,通过以下的命令连接ryu控制器

    ryu-manager ofctl_rest.py
    

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

    根据实验二下发流表的命令编写脚本,以两个脚本举例:

    (1)将主机h1进入s1的包打上vlan tag,转发到s1的端口4。

    curl -X POST -d '{
        "dpid": 1,
        "priority":1,
        "match":{
            "in_port":1
        },
        "actions":[
            {
                "type": "PUSH_VLAN",     # 给进入交换机的包打上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)将从s1的端口4的包去除vlan tag, 并根据tag进行转发.

    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
    

    其它脚本以前两者为基础,根据实验二的流表更改匹配项与动作

    (1)可以用以下两种方式运行脚本

    1、逐个执行脚本

    2、全部curl命令放到一个sh文件中,然后执行这个文件

    (2)用以下命令查看s1下发的流表

    sudo ovs-ofctl -O OpenFlow13 dump-flows s1
    

    (3)用以下命令查看s2下发的流表

    sudo ovs-ofctl -O OpenFlow13 dump-flows s2
    

    (4)可以看到控制器端显示下发的流表已被接收

    (5)用pingall命令测试主机的连通性

    (6)查看图形界面

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

    相比于第二次试验逐个的去设置流表的参数,然后在终端逐个地去下发流表,通过编写shell脚本进行一次性地下发流表减少了很多的工作量,脚本采用的是json格式,在对不同流表进行参数的修改的时候,比较直观、方便,同时更加方便地去理解流表的参数代表什么含义。总体实验起来还是比较顺利的!

  • 相关阅读:
    HTML DOM 06 节点关系
    HTML DOM 05 事件(三)
    HTML DOM 05 事件(二)
    HTML DOM 05 事件(一)
    html DOM 04 样式
    html DOM 03 节点的属性
    html DOM 02 获取节点
    html DOM 01 节点概念
    JavaScript 29 计时器
    JavaScript 28 弹出框
  • 原文地址:https://www.cnblogs.com/ss333/p/11985123.html
Copyright © 2011-2022 走看看