Open vSwitch---流表控制主机数据转发实验(四)---meter表实践
一、meter表介绍
meter表是openflow协议的内容,meter表是openflow1.3版本以后才支持,所以所有命令需要指定OpenFlow1.3版本以上。此外,在openvswitch-v2.8之前的版本中,还不支持meter,在v2.8版本之后已经实现,要正常使用的话,需要注意的是datapath类型要指定为netdev(即将datapath从内核态转化到用户态,datapath一般来说是运行在内核态),而且band type暂时只支持drop。
meter表主要用来进行网络限速,网络限速有很多种方式,比如网卡限速,队列限速,meter表限速。其中meter表限速是颇具代表性的限速方式。因为网卡限速和队列限速都是传统网络的限速方式,而meter表是SDN架构下的限速方式,所以接下来主要针对meter表限速进行介绍。
meter表的常用命令如下:
- 查看当前设备对meter的支持
ovs-ofctl -O OpenFlow13 meter-features br0
- 查看meter表
ovs-ofctl -O OpenFlow13 dump-meters br0
- 查看meter统计
ovs-ofctl -O OpenFlow13 meter-stats br0
- 创建meter表
# 限速类型以kbps(kilobits per second)计算,超过20kb/s则丢弃
ovs-ofctl -O OpenFlow13 add-meter br0 meter=1,kbps,band=type=drop,rate=20
# 同上,增加burst size参数
ovs-ofctl -O OpenFlow13 add-meter br0 meter=2,kbps,burst,band=type=drop,rate=20,burst_size=256
# 同上,增加stats参数,对meter进行计数统计
ovs-ofctl -O OpenFlow13 add-meter br0 meter=3,kbps,burst,stats,band=type=drop,rate=20,burst_size=256
# 限速类型以pktps(packets per second)计算,超过1000pkt/s则丢弃
ovs-ofctl -O OpenFlow13 add-meter br0 meter=4,pktps,band=type=drop,rate=1000
- 删除meter表
# 删除全部meter表
ovs-ofctl -O OpenFlow13 del-meters br0
# 删除meter id=1
ovs-ofctl -O OpenFlow13 del-meter br0 meter=1
- 创建流表
ovs-ofctl -O OpenFlow13 add-flow br0 in_port=1,actions=meter:1,output:2
二、meter表限速原理
meter表限速的原理是丢弃多余数据包。首先创建一个转发的流表。比如:
- 交换机上有流表:1端口进来的流量从2端口出去,
in_port=1,actions=output:2
。 - 这个时候再创建一个meter表,作用是:速度超过10M的流量丢弃,
meter=1,type=drop,rate=10000
- 最后修改流表使用该meter表。
in_port=1,actions=meter:1,output:2
这是从1端口进来的流量,在从2端口转发出去之前会被meter表处理,处理方式就是丢弃掉超过10M的流量,然后再转发到2口。
以上就是meter表的工作原理。
三、meter表实验过程
1、实验概述
此次实验利用namespace作为主机,ovs作为交换机,iperf作为测速工具。使用namespace新建两个网络空间作为两台主机,两台主机通过ovs连接进行通信,通过下发meter表来实现两台主机通信的限速,并用iperf进行发包和测速。实验拓扑如下图所示。
2、iperf概述
详细参考(https://ipcmen.com/iperf)
iperf命令是一个网络性能测试工具。iperf可以测试TCP和UDP带宽质量。iperf可以测量最大TCP带宽,具有多种参数和UDP特性。iperf可以报告带宽,延迟抖动和数据包丢失。利用iperf这一特性,可以用来测试一些网络设备如路由器,防火墙,交换机等的性能。
iperf分为两种版本,Unix/Linux版和Windows版,Unix/Linux版更新比较快,版本最新。Windows版更新慢。Windows版的iperf叫jperf,或者xjperf。jperf是在iperf基础上开发了更好的UI和新的功能。
Linux版本下载地址:http://code.google.com/p/iperf/downloads/list
3、实验步骤
(1)构建拓扑
新建实验拓扑所需的工具,即虚拟主机、虚拟网卡、虚拟交换机
# 新建网络空间ns1、ns2作为主机
root@yang-VirtualBox:~# ip netns add ns1
root@yang-VirtualBox:~# ip netns add ns2
# 新建ovs vswitch作为交换机
root@yang-VirtualBox:~# ovs-vsctl add-br vswitch
# 新建虚拟网卡,作为ns主机与交换机之间的连接网卡
root@yang-VirtualBox:~# ip link add veth1-ns1 type veth peer name veth2-ns1
root@yang-VirtualBox:~# ip link add veth1-ns2 type veth peer name veth2-ns2
配置虚拟设备,即启动网卡、为交换机分配端口、为主机分配网卡
# 将veth2-ns1和veth2-ns2加入ovs中
root@yang-VirtualBox:~# ovs-vsctl add-port vswitch veth2-ns1
root@yang-VirtualBox:~# ovs-vsctl add-port vswitch veth2-ns2
# 启动网卡veth2-ns1和veth2-ns2
root@yang-VirtualBox:~# ip link set veth2-ns1 up
root@yang-VirtualBox:~# ip link set veth2-ns2 up
# 将veth1-ns1加入ns1,veth1-ns2加入ns2
root@yang-VirtualBox:~# ip link set veth1-ns1 netns ns1
root@yang-VirtualBox:~# ip link set veth1-ns2 netns ns2
为ns中的网卡分配IP并启动网卡
# 进入ns1的空间中,启动网卡,分配IP
root@yang-VirtualBox:~# ip netns exec ns1 bash
root@yang-VirtualBox:~# ip link set veth1-ns1 up
root@yang-VirtualBox:~# ip link set lo up
root@yang-VirtualBox:~# ip addr add 192.168.101.1/24 dev veth1-ns1
# 进入ns2的空间中,启动网卡,分配IP
root@yang-VirtualBox:~# ip netns exec ns2 bash
root@yang-VirtualBox:~# ip link set veth1-ns2 up
root@yang-VirtualBox:~# ip link set lo up
root@yang-VirtualBox:~# ip addr add 192.168.101.11/24 dev veth1-ns2
由于ovs默认情况下会是普通交换机,所以此时ns1可以和ns2相互ping通。
(2)限速前的iperf测速
将ns2作为服务端,ns1作为客户端,测速两者之间的带宽。
进入ns2空间下:
root@yang-VirtualBox:~# ip netns exec ns2 bash
# 服务器端开启一个监听
root@yang-VirtualBox:~# iperf -s
进入ns1空间下:
root@yang-VirtualBox:~# ip netns exec ns1 bash
# 客户端访问ns2
root@yang-VirtualBox:~# iperf -c 192.168.101.11
结果如下图所示,可以看出带宽为5.97 Gbit/sec,测得的具体速度和具体机器的性能有关。
(3)下发meter表进行限速
查看ovs版本,只有2.8以后版本才支持meter表,如下图所示,ovs的版本是2.13.1
查看当前设备对meter的支持,meter表只有在openflow1.3版本以后才支持,在将协议设置为1.3及以上
root@yang-VirtualBox:~# ovs-vsctl set br vswitch protocols=OpenFlow13
设置datapath为用户态。datapath一般来说是运行在内核态,如果想实现限速功能,就需要将其设置成用户态
root@yang-VirtualBox:~# ovs-vsctl set br vswitch datapath_type=netdev
下发meter表,对数据进行限速,即速度超过5M的将其丢弃
root@yang-VirtualBox:~# ovs-ofctl add-meter vswitch meter=1,kbps,band=type=drop,rate=5000 -O OpenFlow13
# 查看meter表项
root@yang-VirtualBox:~# ovs-ofctl dump-meter vswitch -O openflow13
查看的meter表项如下图所示
添加流表项,并使用meter表,也就是在ovs中添加转发的流表,例如ns1---ns2,端口1进入的流量使用meter表进行限速,再由端口2转发出去,而ns2---ns1,端口2进入的流量,从端口1转发出去,并不使用meter表进行处理
root@yang-VirtualBox:~# ovs-ofctl add-flow vswitch priority=10,in_port=1,actions=meter:1,output=2 -O OpenFlow13
root@yang-VirtualBox:~# ovs-ofctl add-flow vswitch priority=10,in_port=2,actions=output:1 -O OpenFlow13
root@yang-VirtualBox:~# ovs-ofctl dump-flows vswitch —O openflow13
查看ovs中的流表如下图所示
(4)使用iperf验证
利用iperf进行验证,查看不同的带宽下,ovs如何进行处理,在进行iperf进行测速时时使用UDP的流测量准确度会高于TCP,所以此实验采用UDP进行测速。
在ns2中开启一个监听,监听UDP数据包:
root@yang-VirtualBox:~# iperf -u -s
在ns1中使用UDP协议对ns2进行访问,这里我分别以2M、5M、10M、20M、1G速度进行测试,若正确按照meter表的处理,服务端的接收丢包率则分别是0%、0%-5%、50%、75%、100%。
# 在ns1中分别输入以下命令
# UDP数据包以2M的速度测试,间隔2秒一次,时长6秒
root@yang-VirtualBox:~# iperf -u -c 192.168.101.11 -b 2M -i 2 -t 6
# 以5M的速度测试
root@yang-VirtualBox:~# iperf -u -c 192.168.101.11 -b 5M -i 2 -t 6
# 以10M的速度测试
root@yang-VirtualBox:~# iperf -u -c 192.168.101.11 -b 10M -i 2 -t 6
# 以20M的速度测试
root@yang-VirtualBox:~# iperf -u -c 192.168.101.11 -b 20M -i 2 -t 6
# 以1G的速度测试
root@yang-VirtualBox:~# iperf -u -c 192.168.101.11 -b 1G -i 2 -t 6
在服务器ns2中显示如下图所示,最大的带宽都是在5M/s左右,说明限速已经成功。
以上就是meter表的简单介绍,希望可以给您带来帮助,谢谢!
Open vSwitch---流表控制主机数据转发实验(四)---meter表实践相关推荐
- MySql中把一个表的数据插入到另一个表中的实现代码--转
MySql中把一个表的数据插入到另一个表中的实现代码 司的一个项目,做报表--要关联的表结构比较多,最后决定把要用的数据集合到一张新表中,需要用到以下的sql语法......分享下: web开发中,我 ...
- oracle单表存储记录,oracle从各个表获得数据保存到另一个表
oracle从各个表取得数据保存到另一个表 从各个表中取得数据保存另一个表中: CREATE VIEW PARAMETER_view AS WITH tall AS ( SELECT p.PI_NO, ...
- MySQL 数据库怎样把一个表的数据插入到另一个表
web开发中,我们经常需要将一个表的数据插入到另外一个表,有时还需要指定导入字段,设置只需要导入目标表中不存在的记录,虽然这些都可以在程序中拆分成简单sql来实现,但是用一个sql的话,会节省大量代码 ...
- MySQL查询数据表中数据记录(包括多表查询)
MySQL查询数据表中数据记录(包括多表查询) 在MySQL中创建数据库的目的是为了使用其中的数据. 使用select查询语句可以从数据库中把数据查询出来. select语句的语法格式如下: sele ...
- SQL语句 怎么把一个表的数据复制到另外一个表里面
SQL语句 怎么把一个表的数据复制到另外一个表里面 SQL语句 怎么把一个表的数据复制到另外一个表里面 匿名 | 浏览 68087 次 我有更好的答案 推荐于2017-09-08 01:16:4 ...
- python实训总结报告书_20172304 实验四python综合实践报告
20172304 实验四python综合实践报告 姓名:段志轩 学号:20172304 指导教师:王志强 课程:Python程序设计 实验时间:2020年5月13日至2020年6月14日 实验分析 本 ...
- mysql:设有一数据库,包括四个表:学生表(Student)、课程表(Course)、成绩表(Score)以及教师信息表(Teacher)。四个表的结构分别如表1-1的表(一)表(四)所示
设有一数据库,包括四个表:学生表(Student).课程表(Course).成绩表(Score)以及教师信息表(Teacher).四个表的结构分别如表1-1的表(一)表(四)所示,数据如表1-2的表( ...
- 《Python程序设计》实验四 Python综合实践实验报告
<Python程序设计>实验四 Python综合实践实验报告 1.实验内容 Python综合应用:爬虫.数据处理.可视化.机器学习.神经网络.游戏.网络安全等. 在华为ECS服务器(Ope ...
- mysql添加数据不阻塞_主键表插入数据不提交,外键表插入数据被阻塞
有客户和我说:他在含主外键的表中实验发现,在主表数据未提交,然后在外键表插入该数据数据时,出现外键表hang住现象.我开始以为是不同的会话,根据oracle数据库的一致性原则,应该新会话在外键表中不能 ...
最新文章
- MVC中,视图的Layout使用
- python面试-2018年最常见的Python面试题答案(上篇)
- hdu4920 矩阵乘法%3
- 淘宝API学习之道:淘宝API相关了解
- hdu 3264(二分+圆相交面积)
- CodeForces - 1326E Bombs(线段树+思维)
- Android之TabLayout+ViewPager2+FragmentStateAdapter实现带数字变化的TAB选项
- 运维秘籍:防止数据丢失“六脉神剑”
- 忘记VSS admin密码了
- 腾讯开源智能运维项目,用机器学习减少人为失误
- Lua 服务器Socket通信实例(转)
- 微pe工具箱 系统安装教程_【微pe安装系统教程】微pe安装系统教程win7_微pe装系统教程...
- 马哥python_马哥Python 开发9期
- 关于区块链的一点经济学思考
- 谷歌浏览器,如何不用翻墙,下载插件?
- mac 添加右键 复制路径到剪贴版
- Git之(三)辅助命令
- (附源码)计算机毕业设计SSM会议管理系统
- Unable to start embedded Tomcat 解决方式(已解决)
- 策略模式(策略设计模式)详解