• 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格式,在对不同流表进行参数的修改的时候,比较直观、方便,同时更加方便地去理解流表的参数代表什么含义。总体实验起来还是比较顺利的!

  • 相关阅读:
    Hash表的查找-C语言
    二叉排序树-C语言
    线性表的查找算法-C语言
    拓扑排序和关键路径
    图结构的创建与遍历-C语言
    MySQL数据库基本脚本命令
    哈夫曼树编码-C语言
    协程简述
    Python多线程编程-Threading库
    Python多进程编程-multiprocessing库
  • 原文地址:https://www.cnblogs.com/ss333/p/11985123.html
Copyright © 2020-2023  润新知