17

基于Open vSwitch的传统限速和SDN限速

 4 years ago
source link: https://www.sdnlab.com/23289.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

作者简介:好好先生

QoS(Quality of Service)即服务质量。指一个网络能够利用各种基础技术,为指定的网络通信提供更好的服务能力。当网络过载或拥塞时,QoS能确保重要业务量不受延迟或丢弃,同时保证网络的高效运行。对于网络业务,服务质量包括传输的带宽、传送的时延、数据的丢包率、网络抖动等。在网络中可以通过保证传输的带宽、降低传送的时延、降低数据的丢包率、降低网络抖动值等措施来提高服务质量。限流是Qos中常用的一种技术手段,本文基于开源交换机Open vSwitch,从传统网络模式和SDN模式完成限流的功能,对比出各种方式的特点。

OpenvSwitch-668x400.jpg

本次实验需要指定版本的ovs交换机为2.8.1及以上,所以先安装2.8.1版本的ovs,然后安装mininet网络仿真器。通过网卡限速,队列限速,meter表限速,从三个角度分析限流实现并对比其限速性能表现。

一、安装指定版本ovs

从Open vswitch官网下载安装包,版本为2.8.1。
http://www.openvswitch.org/

OpenvSwitch-1.jpg

图 1 Open vSwitch

OpenvSwitch-2.jpg

图 2 ovs版本

安装python
apt install python

安装pip
apt install python-pip

生成make文件
./configure

OpenvSwitch-3.jpg

生成makefile文件
make

OpenvSwitch-4.jpg

make install 安装
make install

OpenvSwitch-5.jpg

检查模块
make modules_install

OpenvSwitch-6.jpg

载入ovs模块到内核中
/sbin/modprobe openvswitch
/sbin/lsmod | grep openvswitch

OpenvSwitch-7.jpg

启动
$ export PATH=$PATH:/usr/local/share/openvswitch/scripts
$ ovs-ctl start

OpenvSwitch-8.jpg

启动ovs-vswitchd
$ ovs-ctl —no-ovs-vswitchd start

OpenvSwitch-9.jpg

启动ovsdb-server
$ ovs-ctl —no-ovsdb-server start

OpenvSwitch-10.jpg

配置ovsdb的数据库
$ mkdir -p /usr/local/etc/openvswitch
$ ovsdb-tool create /usr/local/etc/openvswitch/conf.db \
vswitchd/vswitch.ovsschema
$ mkdir -p /usr/local/var/run/openvswitch
$ ovsdb-server —remote=punix:/usr/local/var/run/openvswitch/db.sock \
—remote=db:Open_vSwitch,Open_vSwitch,manager_options \
—private-key=db:Open_vSwitch,SSL,private_key \
—certificate=db:Open_vSwitch,SSL,certificate \
—bootstrap-ca-cert=db:Open_vSwitch,SSL,ca_cert \
—pidfile —detach —log-file

OpenvSwitch-11.jpg
OpenvSwitch-12.jpg

使用ovs-vsctl初始化数据库
$ ovs-vsctl —no-wait init
$ ovs-vswitchd —pidfile —detach —log-file

OpenvSwitch-13-1.png

二、基于ovs安装mininet

1.安装git
apt install git

2.下载mininet源码
git clone git://github.com/mininet/mininet

3.安装mininet
到/mininet/util目录下

OpenvSwitch-14.jpg

执行命令 ./install.sh -3n。如果有报错,不用管

OpenvSwitch-15.jpg

三、创建拓扑

1.设计拓扑

OpenvSwitch-16.jpg

图 3 实验拓扑
设计上图的拓扑,设备分工如下:

OpenvSwitch-17.png

表 1 设备信息列表

搭建一个上图的拓扑,使用mininet命令:
mn —topo single,6

OpenvSwitch-18.jpg

2.使用虚拟主机

mininet的强大之处,每一个设备都能打开命令行,可以当做Linux系统的命令行去使用。使用命令xterm h1,打开h1的操作界面。

OpenvSwitch-19.jpg

同理打开h2的操作界面。

OpenvSwitch-20.jpg

查看两个主机h1和h2的ip地址。

OpenvSwitch-21.jpg

3.iperf测试带宽

在没有限流的情况下,测试网络带宽。iperf是一款常用的网络带宽测试工具,分为客户端和服务端。服务端首先开启监听,客户端发送流量,最后测得带宽的大小。以h1为服务端,以h2为客户端。

h1:
iperf -s

h2
iperf -c 10.0.0.1

最后测得在正常情况下,本环境中的网络带宽是16.7M。(每个实验环境数据都不太一样,跟硬盘有关)

OpenvSwitch-22.jpg

四、网卡限速

1.简单介绍

Open vSwitch本身并不具备QoS功能,网卡限速是基于Linux内核来完成,而Open vSwitch所做的是对Linux内核的限速功能进行配置。Linux内核中接收数据包使用的方法叫策略(policing),用于限制网卡上接收分组(ingress)的速率,当速率超过了配置速率,就简单的把数据包丢弃。Policing通过简单的丢包机制实现接口速率的限制,它既可以作用于物理接口,也可以作用于虚拟接口。

2.实验过程

1.查看h1和h2的网卡

OpenvSwitch-23.jpg

2.对两个网卡做策略
当两个网卡接收到的数据包超过5000kb时,数据包就直接丢弃掉
ovs-vsctl set interface s1-eth1 ingress_policing_rate=5000
ovs-vsctl set interface s1-eth2 ingress_policing_rate=5000

OpenvSwitch-24.jpg

ingress_policing_rate:为接口最大收包速率,单位kbps,超过该速度的报文将被丢弃,默认值为0表示关闭该功能

3.验证带宽
以h1为服务端,以h2为客户端,通过iperf打流,测网络带宽。打流选择UDP传输,客户端以10M的带宽去发送流量,由于网卡被限速,服务端会显示相应的带宽。
h1
iperf -u -s

h2
iperf -u -c 10.0.0.1 -b 10M

OpenvSwitch-25.jpg

带宽:5.57 M
抖动:15.61 ms
丢包率:43%

五、队列限速

1.简单介绍

OpenvSwitch-26.jpg

图 4 队列原理图

数据包队列是任何一个网络栈的核心组件,数据包队列实现了异步模块之间的通讯,提升了网络性能。Linux可以将网络数据包缓存起来,然后根据用户的设置,在尽量不中断连接(如 tcp)的前提下来平滑网络流量。内核通过某个网络接口发送数据包,它都需要按照这个接口的队列规则把数据包加入队列。由于Linux对接收队列的控制不够好,所以一般只用发送队列,即”控发不控收”。shaping用于实现出口流量的控制,使用队列queue,可以缓存和调度数据包发送顺序,比policing更加精确和有效。在ovs的数据表中主要使用QoS和Queue两张表。

2.实验过程

1.在网卡s1-eth4上限制创建队列

ovs-vsctl set port s1-eth4 qos=@newqos — \
—id=@newqos create qos type=linux-htb queues=0=@q0 — \
—id=@q0 create queue other-config:max-rate=5000000

OpenvSwitch-27.jpg

  • 为s1-eth4创建qos,名称为newqos
  • 创建qos,名称为newqos,类型为linux-htb,指定处理队列为q0
  • 创建队列q0,设置最大的速率为5000000bps,即5M

2.查看队列具体信息

  • 查看网卡s1-eth4上的qos
    OpenvSwitch-28.jpg
  • qos的参数信息,最重要的是处理队列的uuid
    OpenvSwitch-29.jpg
  • 队列的信息,最重要的是队列的最大速度
    OpenvSwitch-30.jpg

3.验证带宽

OpenvSwitch-31.jpg

带宽:4.86 M
抖动:0.124 ms
丢包率:40%

六、Meter表限速

1.原理简介

Meter表限速是SDN的限速方式。OpenFlow 1.3版本中增加了对单个数据流的计量功能,使得OpenFlow能够实现简单的QoS服务(例如流量限速),并且可以结合每个端口队列来实现更复杂的QoS框架(例如DiffServ)
Meter表的字段

OpenvSwitch-32.jpg

图 5 Meter表
  • Meter Identifier 32位的无符号整数,用来唯一识别该计量表项
  • Merter Bands 由计量带组成的无序列表,其中每个计量带都指明了其速率及处理数据包的方式
  • Counters 用于在报文被计量表项处理时更新相关计数

每个计量表项可能具有有一个或多个计量带,每个计量带都指定了其所适用的速率和数据被处理的方式。每个Meter Band指明了带宽速率以及对数据包的处理行为。数据包基于其当前的速率会被其中一个Meter Band来处理。
Meter Band详细字段:

OpenvSwitch-33.jpg

图 6 meter表计量带表
  • Band Type 定义了数据包怎样被处理(drop,dscp remark)
  • Rate 用于选择计量带,定义了带可以运行的最高速率
  • Counters 当数据报文被计量带处理时,更新计数器
  • Type specific arguments 带类型的可选参数

Band Type

  • Drop 通过丢弃数据包,定义带宽速率限制
  • Dscp remark 降低数据包的IP头中的DSCP字段丢弃的优先级

2.实验过程

1.查看交换机中的流表

OpenvSwitch-34.jpg

2.设置交换机的工作模式和协议版本
ovs-vsctl set bridge s1 datapath_type=netdev
ovs-vsctl set bridge s1 protocols=OpenFlow13

OpenvSwitch-35.jpg

3.下发meter表并查看
ovs-ofctl add-meter s1 meter=1,kbps,band=type=drop,rate=5000 -O OpenFlow13

OpenvSwitch-36.jpg

Meter表名称:s1
Meter表id:1
Rate:最大速率
Band=type=drop:超出速率处理方式丢弃

4.查看流表转发端口,为下发流表准备
ovs-ofctl show s1

OpenvSwitch-37.jpg
OpenvSwitch-38.jpg

图 7 拓扑端口连接图

5.下发流表并查看
ovs-ofctl add-flow s1 in_port=5,action=meter:1,output:6 -O openflow13
ovs-ofctl dump-flows s1 -O openflow13

OpenvSwitch-39.jpg

in_port=5:进端口为5
action=meter:1,output:6:匹配的动作为先交给meter表1处理,然后转发给端口6
流表的意思是将进端口为5的流量使用meter表限速,然后转发给6端口。

6.验证带宽
打开h5、h6终端,打流查看带宽

OpenvSwitch-40.jpg

带宽:5.22 M
抖动:15.68 ms
丢包率:47%

七、三种方式数据对比

OpenvSwitch-41.png

表 2 三种限速方式数据表

OpenvSwitch-42.jpg

图 8 带宽对比图

OpenvSwitch-43.jpg

图 9 误差对比图

从数据来看,队列限速的表现最好,首先是带宽限制精确值,队列误差率2.8%,其次抖动最小,最后丢包率也是最少的。当然丢包率小并不能说明表现就好,因为发送为10M的带宽,接收为5M,大量的数据包要丢弃。表现最不好的是网卡限速,带宽误差率最高,抖动也很高,这是与网卡限速的实现方式有关,其控制精度比较粗。

Meter表作为SDN模式限速的代表,表现中规中矩,这可能和ovs交换的流表控制能力有关。交换机中流表的匹配,数据流计数,动作的执行等都是影响其控制力度的原因。软件实现的交换机对流表的控制肯定比不上硬件交换机,如果使用硬件交换机,其效率表现应该有所提高。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK