Open vSwitch---流表控制主机数据转发实验(四)---meter表实践

32 篇文章 61 订阅
29 篇文章 0 订阅

一、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表的简单介绍,希望可以给您带来帮助,谢谢!

 

  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

楊木木8023

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值