一、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表实践相关推荐

  1. MySql中把一个表的数据插入到另一个表中的实现代码--转

    MySql中把一个表的数据插入到另一个表中的实现代码 司的一个项目,做报表--要关联的表结构比较多,最后决定把要用的数据集合到一张新表中,需要用到以下的sql语法......分享下: web开发中,我 ...

  2. oracle单表存储记录,oracle从各个表获得数据保存到另一个表

    oracle从各个表取得数据保存到另一个表 从各个表中取得数据保存另一个表中: CREATE VIEW PARAMETER_view AS WITH tall AS ( SELECT p.PI_NO, ...

  3. MySQL 数据库怎样把一个表的数据插入到另一个表

    web开发中,我们经常需要将一个表的数据插入到另外一个表,有时还需要指定导入字段,设置只需要导入目标表中不存在的记录,虽然这些都可以在程序中拆分成简单sql来实现,但是用一个sql的话,会节省大量代码 ...

  4. MySQL查询数据表中数据记录(包括多表查询)

    MySQL查询数据表中数据记录(包括多表查询) 在MySQL中创建数据库的目的是为了使用其中的数据. 使用select查询语句可以从数据库中把数据查询出来. select语句的语法格式如下: sele ...

  5. SQL语句 怎么把一个表的数据复制到另外一个表里面

    SQL语句 怎么把一个表的数据复制到另外一个表里面 SQL语句 怎么把一个表的数据复制到另外一个表里面   匿名 | 浏览 68087 次  我有更好的答案 推荐于2017-09-08 01:16:4 ...

  6. python实训总结报告书_20172304 实验四python综合实践报告

    20172304 实验四python综合实践报告 姓名:段志轩 学号:20172304 指导教师:王志强 课程:Python程序设计 实验时间:2020年5月13日至2020年6月14日 实验分析 本 ...

  7. mysql:设有一数据库,包括四个表:学生表(Student)、课程表(Course)、成绩表(Score)以及教师信息表(Teacher)。四个表的结构分别如表1-1的表(一)表(四)所示

    设有一数据库,包括四个表:学生表(Student).课程表(Course).成绩表(Score)以及教师信息表(Teacher).四个表的结构分别如表1-1的表(一)表(四)所示,数据如表1-2的表( ...

  8. 《Python程序设计》实验四 Python综合实践实验报告

    <Python程序设计>实验四 Python综合实践实验报告 1.实验内容 Python综合应用:爬虫.数据处理.可视化.机器学习.神经网络.游戏.网络安全等. 在华为ECS服务器(Ope ...

  9. mysql添加数据不阻塞_主键表插入数据不提交,外键表插入数据被阻塞

    有客户和我说:他在含主外键的表中实验发现,在主表数据未提交,然后在外键表插入该数据数据时,出现外键表hang住现象.我开始以为是不同的会话,根据oracle数据库的一致性原则,应该新会话在外键表中不能 ...

最新文章

  1. MVC中,视图的Layout使用
  2. python面试-2018年最常见的Python面试题答案(上篇)
  3. hdu4920 矩阵乘法%3
  4. 淘宝API学习之道:淘宝API相关了解
  5. hdu 3264(二分+圆相交面积)
  6. CodeForces - 1326E Bombs(线段树+思维)
  7. Android之TabLayout+ViewPager2+FragmentStateAdapter实现带数字变化的TAB选项
  8. 运维秘籍:防止数据丢失“六脉神剑”
  9. 忘记VSS admin密码了
  10. 腾讯开源智能运维项目,用机器学习减少人为失误
  11. Lua 服务器Socket通信实例(转)
  12. 微pe工具箱 系统安装教程_【微pe安装系统教程】微pe安装系统教程win7_微pe装系统教程...
  13. 马哥python_马哥Python 开发9期
  14. 关于区块链的一点经济学思考
  15. 谷歌浏览器,如何不用翻墙,下载插件?
  16. mac 添加右键 复制路径到剪贴版
  17. Git之(三)辅助命令
  18. (附源码)计算机毕业设计SSM会议管理系统
  19. Unable to start embedded Tomcat 解决方式(已解决)
  20. 策略模式(策略设计模式)详解

热门文章

  1. 计算机网络概念和功能
  2. 【观察】联想HPC:冠军之路,永不止步
  3. ipad2 越狱后安装slide enhancer 隐藏滑块解决方法总结
  4. Excel+MSSQL开发金蝶K3欠料报表
  5. 计算机科学与技术导论的课后题答案,《计算机科学导论》课后习题答案
  6. Overlapping Experiment Infrastructure,重叠(分层)实验架构。
  7. android蓝牙实验,Experiment6蓝牙Android开发实验指导书.doc
  8. 什么是数据分类分级?
  9. CAD制图初学入门教程:CAD怎么复制?
  10. JavaFx - 按下Button 一直触发按钮事件