栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

OpenFlow组表计量表

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

OpenFlow组表计量表

实验环境:Ubuntu 20.04 + mininet + OpenDayLight(li) + wireshark

概述: 组表: 计量表: 实验准备: 实验拓扑结构如下: 构建自定义拓扑结构
# my_topo.py
# mn --custom  /my_topo.py --topo mytopo --mac --controller=remote,ip=127.0.0.1 --switch ovs,protocols=OpenFlow13


from mininet.topo import Topo

class MyTopo( Topo ):
    def build( self ):
        # Add hosts and switches
        h1 = self.addHost( 'h1' )
        h2 = self.addHost( 'h2' )
   
        s1 = self.addSwitch( 's1' )
        s2 = self.addSwitch( 's2' )
        s3 = self.addSwitch( 's3' )
        s4 = self.addSwitch( 's4' )

        # Add links
        self.addlink( h1, s1 )
        self.addlink( h2, s4 )

        self.addlink( s1, s2 )
        self.addlink( s1, s3 )
        self.addlink( s2, s4 )
        self.addlink( s3, s4 )


topos = { 'mytopo': ( lambda: MyTopo() ) }
mininet连接自定义拓扑:
mn --custom my_topo.py --topo mytopo --mac --controller=remote,ip=127.0.0.1 --switch ovsk,protocols=OpenFlow13
链路负载均衡: 查看表信息
ovs-ofctl dump-flows s1 -O OpenFlow13
ovs-ofctl dump-groups s1 -O OpenFlow13
对S1下发组表和流表
ovs-ofctl -O OpenFlow13 add-group s1 group_id=1,type=select,bucket=actions=output:2,bucket=actions=output:3
ovs-ofctl -O OpenFlow13 add-flow s1 table=0,priority=1000,in_port=1,nw_dst=10.0.0.1,actions=group:1
对S2,S3下发流表
ovs-ofctl -O OpenFlow13 add-flow s2 table=0,priority=1001,in_port=1,actions=output:2
ovs-ofctl -O OpenFlow13 add-flow s2 table=0,priority=1001,in_port=2,actions=output:1

ovs-ofctl -O OpenFlow13 add-flow s3 table=0,priority=1001,in_port=1,actions=output:2
ovs-ofctl -O OpenFlow13 add-flow s3 table=0,priority=1001,in_port=2,actions=output:1
对S4下发流表
ovs-ofctl -O OpenFlow13 add-flow s4 table=0,priority=1001,in_port=2,dl_dst=00:00:00:00:00:02,actions=output:1
ovs-ofctl -O OpenFlow13 add-flow s4 table=0,priority=1001,in_port=3,dl_dst=00:00:00:00:00:02,actions=output:1
验证 容灾备份: 对S1下发组表

ovs-ofctl -O OpenFlow13 add-group s1 group_id=1,type=ff,bucket=watch_port:2,output:2,bucket=watch_port:3,output:3

对S1下发流表

ovs-ofctl -O OpenFlow13 add-flow s1 priority=1000,in_port=1,actions=group:1

看组表信息

ovs-ofctl -O OpenFlow13 dump-group-stats s1

断开链路、制造故障

ovs-ofctl -O OpenFlow13 mod-port s1 2 down

验证: Qos 连接mininet,构建拓扑。
mn --controller=remote,ip=127.0.0.1 --mac --nat --topo=tree,depth=2,fanout=3 --switch ovsk,protocols=OpenFlow13
设置datapath

设置datapath为用户态。datapath一般来说是运行在内核态,如果想实现限速功能,就需要将其设置成用户态。

ovs-vsctl set bridge s2 datapath_type=netdev
ovs-vsctl set bridge s2 protocols=OpenFlow13
下发限速的meter表。

交换机:s2;速度:5M;动作:丢弃;id:1

# 下发
ovs-ofctl add-meter s2 meter=1,kbps,band=type=drop,rate=5000 -O OpenFlow13
# 查看是否下发成功
ovs-ofctl dump-meter s2 -O openflow13
下发转发的流表。

匹配进端口为1,转发动作为meter:1,output:2。meter:1表示匹配到的流表首先交给meter表处理,就是超过5M的数据包丢弃掉,然后在交给output:2,从2端口转发出去。

# 对port1即h1限速
ovs-ofctl add-flow -O OpenFlow13 s2 priority=200,in_port=1,action=meter:1,output:2 
# 对port2即h2不限速
ovs-ofctl add-flow -O OpenFlow13 s2 priority=200,in_port=2,actions=output:1
关闭主机的网卡的tx校验
# 这里主机的网卡ens33mininet的网卡s2-eth2需依据实际情况替换
ethtool -K ens33 tx off
ethtool -K s2-eth2 tx off
验证

通过iperf验证速度可以得到此时的带宽为5M。
客户端以10M的速度发包,客户端接收到的速率为5M,可见限速成功。

iperf 参数:
-c 指定为iperf客户端
-s 指定为iperf服务器
-p 设置端口
-i 每隔一秒监视结果
-u 使用UDP而不是TCP
& 在后台运行

开启服务端h2接收并验证。

h2 xterm &
iperf -u -s -p 12888

客户端h1发送数据

h1 xterm &
iperf -u -c 10.0.0.2 -b 10M -i 1 -t 5 -p 12888

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/599802.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号