基于Open vSwitch的传统限速和SDN限速--实验

news2024/12/23 12:08:30

基于Open vSwitch的传统限速和SDN限速--实验

  • 基于Open vSwitch的传统限速和SDN限速--实验
    • 1.下载与安装
      • 1.1 安装Docker
      • 1.2 Open vSwitch的安装
    • 2.配置实验环境
    • 3.实验步骤
      • 3.1启动floodlight控制器
      • 3.2创建拓扑
      • 3.3网卡限速
      • 3.4队列限速
      • 3.5 Meter表限速
    • 4.三种方式数据对比
    • 5.实验分析
    • 6.总结

申明: 未经许可,禁止以任何形式转载,若要引用,请标注链接地址。 全文共计7677字,阅读大概需要5分钟
更多学习内容,欢迎关注我的个人公众号:不懂开发的程序猿

基于Open vSwitch的传统限速和SDN限速–实验

学习内容

1.下载与安装

  • 实验需要用到的工具有:安装Docker和Open vSwitch

2.配置实验环境

3.实验过程

4.实验数据

5.实验分析与总结

1.下载与安装

1.1 安装Docker

整个安装与运行在超级管理员权限下最好,命令:su root

安装Docker:

journalctl -u docker.service

在这里插入图片描述

桥接模式:sudo ip link add name docker0 type bridge

添加IP地址:sudo ip addr add dev docker0 172.1.0.1/16

重启服务器:service docker restart

再次运行

sudo docker run hello-world

发现成功

在这里插入图片描述

我这里的Java环境是:

OpenJDK Runtime Environment (build 1.8.0_312-8u312-b07-0ubuntu1~20.04-b07)

java -version

在这里插入图片描述

1.2 Open vSwitch的安装

在http://www.openvswitch.org/download/中下载想要安装的版本,我这里下的版本是:openvswitch-2.13.6

在这里插入图片描述

解压在桌面、生成Makefile、编译、安装

tar zxvf openvswitch-2.13.6.tar.gz

cd openvswitch-2.13.6

./configure 

make -j4

sudo make install

坑:

如果在./configure时,报错如下

checking whether /usr/bin/python2.7 has six library… configure: error: Missing Python six library or version too old.

在这里插入图片描述

尝试再安装一遍:pip install six

发现:

Defaulting to user installation because normal site-packages is not writeable Requirement already satisfied: six in /usr/lib/python3/dist-packages (1.14.0)

在这里插入图片描述

因为系统是在这个目录下找/usr/bin/six 的库,而我的six环境变量在/usr/lib/python3/dist-packages,因此将其加入PYTHON环境变量中即可解决报错,输入以下命令:

export PYTHONPATH=$PYTHONPATH:/usr/lib/python3/dist-packages

再次./configure可以看到编译成功

在这里插入图片描述

将openvswitch模块载入到内核中

sudo modprobe openvswitch

可以通过下面的命令来验证是否成功

sudo lsmod | grep openvswitch

在这里插入图片描述

openvswitch有几个脚本放在/usr/local/share/openvswitch/scripts下,为了方便使用,可以设置PATH路径。由于运行需要root权限,可以切换到root,再设置PATH

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

在这里插入图片描述

验证是否开启

ps -e | grep ovs

在这里插入图片描述

启动

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

启动ovs-vswitchd

ovs-ctl --no-ovs-vswitchd start

启动ovsdb-server

ovs-ctl --no-ovsdb-server start

在这里插入图片描述

2.配置实验环境

配置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

在这里插入图片描述

使用ovs-vsctl初始化数据库

 ovs-vsctl --no-wait init
ovs-vswitchd --pidfile --detach --log-file

在这里插入图片描述

检查是否配置成功

sudo ovs-vsctl --version
sudo ovs-vsctl show

在这里插入图片描述

在这里插入图片描述

3.实验步骤

3.1启动floodlight控制器

cd floodlight/
java -jar target/floodlight.jar //运行floodlight控制器,该窗口请不要关闭

在这里插入图片描述

3.2创建拓扑

sudo mn --topo single,6 --controller=remote,ip=127.0.0.1,port=6633 --switch ovs,protocols=OpenFlow13

在这里插入图片描述

在这里插入图片描述

拓扑设备分工如下:

设备限速方法
h1, h2网卡限速
h3, h4队列限速
h5, h6meter表限速

打开终端

xterm h1 h2

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

ifconfig

iperf测试带宽

h1:

iperf -s

h2

iperf -c 10.0.0.1

在这里插入图片描述

测得在正常情况下,本环境中的网络带宽是12.8Mbits/sec

这里可以再次查看Open vSwitch的端口

在这里插入图片描述

3.3网卡限速

原理

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

查看h1和h2的网卡

在这里插入图片描述

对两个网卡做策略

当两个网卡接收到的数据包超过5000kb时,数据包就直接丢弃掉

ovs-vsctl set interface s1-eth1 ingress_policing_rate=5000
ovs-vsctl set interface s1-eth2 ingress_policing_rate=5000

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

在这里插入图片描述

验证带宽

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

xterm h1
iperf -u -s
xterm h2
iperf -u -c 10.0.0.1 -b 10M

在这里插入图片描述

带宽:10.5 Mbit/s

抖动:15.649 ms

丢包率:4063/8918=46%

3.4队列限速

原理

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

在这里插入图片描述

队列原理图

在网卡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

在这里插入图片描述

为s1-eth4创建qos,名称为newqos

创建qos,名称为newqos,类型为linux-htb,指定处理队列为q0

创建队列q0,设置最大的速率为5000000bps,即5M

查看队列具体信息

查看网卡s1-eth4上的qos,qos的参数信息,最重要的是处理队列的uuid

sudo ovs-vsctl list qos

在这里插入图片描述

查看网卡s1-eth4上的队列的信息,最重要的是队列的最大速度

sudo ovs-vsctl list queue

在这里插入图片描述

验证带宽

xterm h3
iperf -u -c 10.0.0.4 -b 10M
xterm h4
iperf -u -s

在这里插入图片描述

带宽:10.5 Mbit/s

抖动:1121.52us = 1.1ms

丢包率:40%

3.5 Meter表限速

原理

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

在这里插入图片描述

Meter表的字段

含义:

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

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

在这里插入图片描述

Meter Band详细字段

含义:

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

Band Type:

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

限速过程

查看交换机中的流表

ovs-ofctl dump-flows s1 -O openflow13

在这里插入图片描述

设置交换机的工作模式和协议版本

ovs-vsctl set bridge s1 datapath_type=netdev
ovs-vsctl set bridge s1 protocols=OpenFlow13

在这里插入图片描述

下发meter表

ovs-ofctl add-meter s1 meter=1,kbps,band=type=drop,rate=5000 -O OpenFlow13

查看流表转发端口,为下发流表准备

ovs-ofctl show s1

下发流表并查看

ovs-ofctl add-flow s1 in_port=5,action=meter:1,output:6 -O openflow13
ovs-ofctl dump-flows s1 -O openflow13

在这里插入图片描述

in_port=5:进端口为5

action=meter:1,output:6:匹配的动作为先交给meter表1处理,然后转发给端口6

流表的意思是将进端口为5的流量使用meter表限速,然后转发给6端口。

验证带宽

打开h5、h6终端,查看带宽

xterm h5
iperf -u -c 10.0.0.6 -b 10M
xterm h6
iperf -u -s

在这里插入图片描述

带宽:10.5 Mbit/s

抖动:15.649 ms

丢包率:7447/8917=84%

4.三种方式数据对比

限速方式带宽M/s抖动ms丢包率
正常带宽12.8//
网卡限速10.515.64946%
队列限速10.51.140%
Meter表限速10.515.6884%

5.实验分析

本实验是基于开源交换机Open vSwitch,仿真了从传统网络模式和SDN模式限流的功能,单从实验的数据来看,队列限速的表现最好,抖动最小,丢包率最少。

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

6.总结

限流是Qos中常用的一种技术手段,当网络过载或拥塞时,QoS能确保重要业务量不受延迟或丢弃,同时保证网络的高效运行。对于网络业务,服务质量包括:传输的带宽、传送的时延、数据的丢包率、网络抖动等。在网络中可以通过保证传输的带宽、降低传送的时延、降低数据的丢包率、降低网络抖动值等措施来提高服务质量。

–end–

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/22319.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

仿大众点评——秒杀系统部分03——RabbitMq措施

RabbitMq保证消息不丢失 RabbitMQ如何保证消息的可靠性: 1.从生产者到消息队列,congfirm模式(与事务相比confirm模式最大的优势是异步)通过消息确认机制来保证,通过给每个指派唯一标志,完成消费后返回ack确…

【LeetCode每日一题】——136.只出现一次的数字

文章目录一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【解题思路】七【题目提示】八【时间频度】九【代码实现】十【提交结果】一【题目类别】 数组 二【题目难度】 简单 三【题目编号】 136.只出现一次的数字 四【题目描述】 给你一个 非…

[附源码]SSM计算机毕业设计风景区管理系统JAVA

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

再学DataX

一、DataX简介 DataX官网文档:https://github.com/alibaba/DataX/blob/master/introduction.md DataX 是一个异构数据源离线同步工具,致力于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间稳定高效的数据同…

MyBatis基于XML的使用——动态sql

1、动态sql 动态 SQL 是 MyBatis 的强大特性之一。如果你使用过 JDBC 或其它 类似的框架,你应该能理解根据不同条件拼接 SQL 语句有多痛苦,例如拼接时要确保不能忘记添加必要的空格,还要注意去掉列表最后一个列名的逗号。 利用动态 SQL&#…

14服务-ClearDiagnosticlnformation

诊断协议那些事儿 诊断协议那些事儿专栏系列文章,本文介绍存储数据传输服务下的14服务ClearDiagnosticlnformation,客户端使用ClearDiagnosticlnformation服务清除一个或多个服务器存储器中的诊断信息。 关联文章:$19服务:DTCStatusMask和s…

CockroachDB-读和写

本文知识点来源于官网地址https://www.cockroachlabs.com/docs/stable/architecture/reads-and-writes-overview.html 查询执行 当CRDB执行查询时,集群将请求路由到包含相关数据的范围的Leaseholder。如果查询涉及多个范围,则请求将发送给多个Leasehol…

求实数的整数次幂(循环版)(高效)(位运算解题)

求实数的整数次幂(循环版)(高效) (10 分) 原理图: 请编写函数,用循环语句以最快的方法求任意实数的任意整数次幂。 函数原型 double Power(double x, int n); 说明:参数 x 为底数,n 为指数。若参数正确,则函数值为…

智能驾驶开启产业新赛道:资本扎堆布局车规级高精定位

2022年被称为高阶智能驾驶元年的背后,新的产业链正在悄然发展。 车规级高精定位便是其中之一。2022年10月,主业聚焦于动力总成测试的上海华依科技集团股份有限公司(以下简称“华依科技”,688071.SH),发布公…

漫画风格迁移神器 AnimeGANv2:快速生成你的漫画形象

生成你的漫画形象! 漫画风格迁移神器 AnimeGANv2 文章目录生成你的漫画形象! 漫画风格迁移神器 AnimeGANv2快速在线生成你的漫画形象AnimeGAN 简要介绍与其他动漫风格迁移模型的效果对比AnimeGANv2 的优点AnimeGANv2 风格多样化AnimeGANv2 网络结构快速生…

基于stm32单片机的水位检测自动抽水系统

资料编号:106 下面是相关功能视频演示: 106-基于stm32单片机的水位检测自动抽水系统Proteus仿真(源码仿真全套资料)功能介绍: 使用滑动变阻器模拟水位监测器,通过改变电压值表示水位的变化。stm32通过ADC…

【前端】从 0 到 1 实现一个网站框架(一、注册 [1] )

Hi~你好呀,等你很久啦~ 我是 LStar,一枚来自北京的初二女生,2020 年年初加入 CSDN。 话不多说,直入主题~(我现在看两年多前我 11 岁那会发的文章,越看越想笑。为了不让四年后 18 岁的我看着这篇文章露出 …

超详细的mysql多表操作教程

目录 外键约束 概念 特点 操作 多表联合查询 概念 操作 多表操作总结 外键约束 概念 特点 定义一个外键时,需要遵守下列规则: 主表必须已经存在于数据库中,或者是当前正在创建的表。 必须为主表定义主键。 主键不能包含空值&#xf…

967亿销售额!博世解码智能汽车新蓝图

随着新一轮科技革命和产业变革的深化,在低碳化、电动化和智能化的推动下,处于变革关键时期的新能源汽车产业,正逐步由“政策驱动”转向“市场驱动”,智能化、网联化成为新趋势。 据中国汽车工业协会统计,今年我国新能…

通过 Traefik Hub 暴露家里的网络服务

Traefik Hub 简介 📚️Reference: 你的云原生网络平台 -- 发布和加固你的容器从未如此简单。 Traefik Hub 为您在 Kubernetes 或其他容器平台上运行的服务提供一个网关。 Traefik Hub 定位: 云原生网络平台 它有 2 大核心功能,我这次体验感…

pytorch深度学习实战lesson23

第二十三课 AlexNet AlexNet是在2012年被发表的一个金典之作,并在当年取得了ImageNet最好成绩,也是在那年之后,更多的更深的神经网路被提出,比如优秀的vgg,GoogleLeNet. 其官方提供的数据模型,准确率达到57.1%,top 1-5…

认识计算机中的简单指令集

我们现在有了一个新的寄存器,叫做指令寄存器。它包含一个字节,不同的内容表示控制部分的不同操作模式。也被称为指令代码。指令寄存器是一个字节,因此可能有多达256条不同的指令。所有指令都涉及在总线上移动字节。指令将导致字节进出RAM&…

【JavaEE】PCB和进程调度的基本过程

文章目录什么是进程PCB的组成PID内存指针文件描述符表并行和并发进程调度相关属性进程的状态优先级上下文进程的记账信息什么是进程 进程是正在运行的程序的实例(an instance of a computer program that is being executed) 进程(process&am…

《爱的四十条法则》

《爱的四十条法则》 [土]艾丽芙沙法克 作者用别样的手法间接向我们阐述了爱的四十条法则,每一条都会触及不同阶段的灵魂,我仅将文中感触较深的摘录如下: 1.尽管有人这样说,但是爱绝对不是来的快,去的也快的甜蜜感觉而…

长尾分布系列论文解析(二)Delving into Deep Imbalanced Regression

大纲引言回归问题中的长尾分布LDSFDS实验和结果总结引言 本文是长尾分布系列论文解析的第二篇,前情提要详见长尾分布系列论文解析(一)Decoupling Representation and Classifier for Long-Tailed Recognition,本篇要介绍的是回归任…