• Mininet玩转流表


    Mininet玩转流表

    一、构建拓扑

    首先构建一个拓扑,可以使用mininet的可视化界面构建,也可以直接使用代码构建,拓扑及代码如下所示:
    在这里插入图片描述

    #!/usr/bin/env python
    
    from mininet.net import Mininet
    from mininet.node import Controller, RemoteController, OVSController
    from mininet.node import CPULimitedHost, Host, Node
    from mininet.node import OVSKernelSwitch, UserSwitch
    from mininet.node import IVSSwitch
    from mininet.cli import CLI
    from mininet.log import setLogLevel, info
    from mininet.link import TCLink, Intf
    from subprocess import call
    
    def myNetwork():
    
        net = Mininet( topo=None,
                       build=False,
                       ipBase='10.0.0.0/8')
    
        info( '*** Adding controller\n' )
        c0=net.addController(name='c0',
                          controller=RemoteController,
                          ip='127.0.0.1',
                          protocol='tcp',
                          port=6633)
    
        info( '*** Add switches\n')
        s1 = net.addSwitch('s1', cls=OVSKernelSwitch, dpid='0000000000000001')
        s2 = net.addSwitch('s2', cls=OVSKernelSwitch, dpid='0000000000000002')
    
        info( '*** Add hosts\n')
        h1 = net.addHost('h1', cls=Host, ip='10.0.0.1', defaultRoute=None)
        h2 = net.addHost('h2', cls=Host, ip='10.0.0.2', defaultRoute=None)
        h3 = net.addHost('h3', cls=Host, ip='10.0.0.3', defaultRoute=None)
        h4 = net.addHost('h4', cls=Host, ip='10.0.0.4', defaultRoute=None)
    
        info( '*** Add links\n')
        net.addLink(s1, h1)
        net.addLink(s1, h2)
        net.addLink(s2, h3)
        net.addLink(s2, h4)
        net.addLink(s1, s2)
    
        info( '*** Starting network\n')
        net.build()
        info( '*** Starting controllers\n')
        for controller in net.controllers:
            controller.start()
    
        info( '*** Starting switches\n')
        net.get('s1').start([c0])
        net.get('s2').start([c0])
    
        info( '*** Post configure switches and hosts\n')
    
        CLI(net)
        net.stop()
    
    if __name__ == '__main__':
        setLogLevel( 'info' )
        myNetwork()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60

    关于拓扑和代码配置及描述,这里就不一一阐述了。

    二、启动Ryu

    配置好代码后,首先需要启动一个ryu控制器,这里以simple_switch.py为例:

    cd ryu/ryu/app
    ryu-manager simple_switch.py
    
    • 1
    • 2

    在这里插入图片描述

    三、运行代码

    启动完Ryu控制器后,运行上述代码:

    sudo python3 flowtable01.py
    
    • 1

    在这里插入图片描述

    四、流表操作

    • 查看所有流表
    dpctl dump-flows
    
    • 1

    在这里插入图片描述

    • 删除现有所有流表
    dpctl del-flows
    
    • 1

    在这里插入图片描述

    • 添加流表
    1. 添加普通流表
    dpctl add-flow in_port=1,actions=output:2
    dpctl add-flow in_port=2,actions=output:1
    
    • 1
    • 2

    为什么要添加两条流表呢?(此处可以回忆一下TCP/IP的三次握手)
    在这里插入图片描述
    2. 添加丢弃数据包流表

    dpctl add-flow in_port=2,actions=drop
    
    • 1

    增加这条流表后,mininet中主机之间将无法通信。
    在这里插入图片描述

    • 删除流表
      删除条件字段中包含in_port=1及in_port=2的所有流表
    sh ovs-ofctl del-flows s1 in_port=2
    
    • 1

    或者是:

    dpctl del-flows in_port=1
    dpctl del-flows in_port=2
    
    • 1
    • 2

    在这里插入图片描述

  • 相关阅读:
    氧化石墨烯(GO)掺杂多壁碳纳米管-离子液体(MWCNTs-IL)复合物偶联金纳米粒子(AuNPs)|MWCNTs-IL-GO/AuNPs复合纳米材料
    软件系统设计方法和工具介绍
    【Linux进阶】windows和linux文件互传的两种方式
    利用445 端口渗透
    超融合兼顾医疗信创及 IT 云化转型的可行性分析
    Prime Sample
    表单设计器附件的上传、显示和下载
    【云原生】Docker镜像的创建,Dockerfile
    MySQL主从复制-读写分离
    SpringBoot Actuator未授权访问漏洞修复
  • 原文地址:https://blog.csdn.net/qq_41422448/article/details/126587476