【sdn】使用iperf工具来监测基于Docker、Open vSwitch (OVS) 和OpenDaylight (ODL) 的软件定义网络 (SDN) 的通信性能指标(5)

1.总述

结论先写在前面:若使用veth pair,不建议直接拉取iperf3镜像用于sdn网络测试,因为sdn里要将net设为none(bridge模式下同网段的docker可以直接ping通而不经过sdn网络)。但是设置成none之后不能下载其他的功能,让配网段成了问题。这就需要提前写dockerfile做镜像了,而且需要做server和client的镜像,比较麻烦。

但是net不设置成none的时候应该是可以直接拉取用的,可以参考第二点。

总之,我选择制作一个新的可以运行iperf的ubuntu镜像来进行测试。

参考:

基本指令:iperf测试Docker网络性能_docker 使用iperf-CSDN博客

测TCP、UDP:使用iPerf进行网络吞吐量测试-CSDN博客

docker配置iperf:IPerf网络性能测试工1具_iperf 镜像-CSDN博客

iperf3网络测试工具使用方法_iperf3使用方法-CSDN博客

使用python提取iperf数据并绘制吞吐率曲线-CSDN博客

基于 SDN Docker 容器的网络虚拟化研究》徐维波

iperf实验验证及抓包分析系列之三:验证iperf3中打UDP流时报告中显示的丢包率是否准确?_iperf3丢包-CSDN博客

 2.拉取镜像并配置容器(x)
2.1 拉取镜像

使用docker search命令查看dockerhub里提供的iperf相关镜像。决定使用networkstatic/iperf3镜像。

docker search iperf

然后拉取这个镜像即可

docker pull networkstatic/iperf3
2.2 运行容器
  • 对于server:为确保后续实验顺利进行,必须先行配置好权限和网络设置。若未开启权限,将无法进行网络地址分配。同时,网络设置需选择"none",否则Docker容器将能自行连接网络,而无需通过SDN网络连接。因此,合理配置权限和网络是实验顺利进行的前提。
  • 需要在结尾加上-s(server) 可以创建docker容器,但是容器会对后续配置ip有影响。
  • 在结尾加上-c(client)后面还要添加serverip。
docker run -itd --name test01 --net=none --privileged=true -p 5201:5201 networkstatic/iperf3 -s
docker run -itd --name test02 --net=none --privileged=true -p 5202:5201 networkstatic/iperf3 -c
2.3 将容器连入sdn网络

考虑到ovs-docker命令创建的连接,在ovs显示的名称是一段乱码,不能自行命名;我这里采用veth pair进行连接。具体步骤请参考我写的4我写的4我写的4

3.制作ubuntu镜像,添加iperf功能(✔)

首先需要说明的是:我已经使用了一个预先配置好的包含ifconfigping工具的Ubuntu Docker镜像(步骤参考我写的2),并且利用commit命令简单地向其中添加了iperf3工具。然而,标准做法是通过编写Dockerfile来自动化构建镜像,这样可以确保构建过程的可重复性和可维护性。

3.1 制作新镜像
#运行并进入容器
docker run -itd --name iperfimage myubuntu:host
docker exec -it iperfimage /bin/bash 

#在容器内装iperf3
apt-get update
apt install iperf3

#检查是否安装成功
iperf3 -v

#commit为容器
exit
docker commit iperfimage myubuntu:iperf
3.2 使用镜像创建server和client

这里不知道是什么原因,不需要增加-s,-c的后缀也可以正常打开了

docker run -itd --privileged=true --net=none --name test01 myubuntu:iperf
docker run -itd --privileged=true --net=none --name test02 myubuntu:iperf
3.3 将两个测试的容器添加至sdn网络中(代码略,具体步骤参考我写的4

在ODL的web界面看到了连接的拓扑结构如下:

4.使用iperf监控sdn网络的通信指标
4.1测试带宽

将两个容器分别指定为server和client,测试带宽:

#server
iperf3 -s
#client
iperf3 -c 10.1.1.1 -p 5201 -f m -i 1 -t 5 -O 3 -R
  • -c 10.1.1.1: 指定 iperf3 客户端要连接的服务器 IP 地址为 10.1.1.1
  • -p 5201: 指定连接到服务器上的端口号为 5201。默认情况下,iperf3 服务器监听在 5201 端口,但这里明确指定了端口号以确保正确性。
  • -f m: 指定报告带宽的格式为 Mbps(兆比特每秒)。这样输出的结果将以 Mbps 为单位。
  • -i 1: 设置报告间隔为 1 秒。也就是说,iperf3 每秒会输出一次测试结果的统计信息。
  • -t 5: 设置测试时间为 5 秒。测试将在开始后持续 5 秒,然后结束。
  • -O 3: 在测试开始前先预热 3 秒。预热期间,客户端和服务器会建立连接并准备进行数据传输,但预热期间的数据不会被计入最终的测试结果。这有助于消除因建立连接和网络延迟等初始开销对测试结果的影响。
  • -R: 运行在反向模式。在反向模式下,服务器会向客户端发送数据,而不是客户端向服务器发送数据。这通常用于测试服务器上传带宽的能力。

(解释来自文心一言)

4.2 TCP
#server
iperf3 -s
#client
iperf3 -c 10.1.1.1 -p 5201 -f m -i 1 -t 5 -O 3

4.3 UDP
#server
iperf3 -s
#client
iperf3 -c 10.1.1.1 -p 5201 -f m -i 1 -t 5 -O 3 -u

比较UDP和TCP的数据会发现:对于sdn网络下的同一链路,UDP利用了更多的带宽而传输的数据量明显少于TCP。 

4.4 丢包率

使用tc命令指定端口的丢包率,并且使用ping命令查看。

tc qdisc add dev veth01 root netem loss 8%
ping 10.1.1.2
tc qdisc del dev veth01 root 
tc qdisc add dev veth01 root netem loss 0%
ping 10.1.1.2

设置成8%丢包率,ping的情况

设置成0%丢包率,ping的情况 

  • 19
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值