Python脚本创建mininet网络拓扑与iperf测量

2024-01-13 14:08

本文主要是介绍Python脚本创建mininet网络拓扑与iperf测量,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

1.新建Python文件example.py,并保存在mininet/custom目录下

1.1 __init__()

1.2 addController

1.3 addSwitch

1.4 addHost设置主机CPU

1.6 ping互通测试

1.6 iperf测试TCP吞吐量、UDP丢包和延迟抖动[2]

1.7 buildFromTopo() 

2.修改文件example.py为可执行文件和可读写文件

3.运行脚本 

参考文献


1.新建Python文件example.py,并保存在mininet/custom目录下

""" this file is a custom topology using Python.
reference link:
https://blog.csdn.net/weixin_39616367/article/details/111450445
"""from mininet.net import Mininet
from mininet.node import CPULimitedHost
from mininet.link import TCLink
from mininet.cli import CLInet = Mininet(host=CPULimitedHost, link=TCLink)#def addController( self, name='c0', controller=None, **params ):
c0 = net.addController()# def addSwitch( self, name, cls=None, **params ):
s1 = net.addSwitch('s1')#def addHost( self, name, cls=None, **params ):
h1 = net.addHost('h1')
h2 = net.addHost('h2', cpu=0.5)
h3 = net.addHost('h3', cpu=0.5)#def addLink( self, node1, node2, port1=None, port2=None, cls=None, **params ):
net.addLink(s1, h1, bw=10, delay='5ms', max_queue_size=1000, loss=10, use_htb=True)
net.addLink(s1, h2)
net.addLink(s1, h3)#def ping( self, hosts=None, timeout=None ):
net.pingAll()net.start()
CLI(net)    #Waiting for command

其中,mininet.net中的Mininet类定义了一个网络的类,包括拓扑、交换机、主机、控制器、链路、接口等,具体定义如下:

1.1 __init__()

def __init__( self, topo=None, switch=OVSKernelSwitch, host=Host,controller=DefaultController, link=Link, intf=Intf,build=True, xterms=False, cleanup=False, ipBase='10.0.0.0/8',inNamespace=False,autoSetMacs=False, autoStaticArp=False, autoPinCpus=False,listenPort=None, waitConnected=False ):"""Create Mininet object.topo: Topo (topology) object or Noneswitch: default Switch classhost: default Host class/constructorcontroller: default Controller class/constructorlink: default Link class/constructorintf: default Intf class/constructoripBase: base IP address for hosts,build: build now from topo?xterms: if build now, spawn xterms?cleanup: if build now, cleanup before creating?inNamespace: spawn switches and controller in net namespaces?autoSetMacs: set MAC addrs automatically like IP addresses?autoStaticArp: set all-pairs static MAC addrs?autoPinCpus: pin hosts to (real) cores (requires CPULimitedHost)?listenPort: base listening port to open; will be incremented foreach additional switch in the net if inNamespace=FalsewaitConnected: wait for switches to Connect?(False; True/None=wait indefinitely; time(s)=timed wait)"""

1.2 addController

def addController( self, name='c0', controller=None, **params ):"""Add controller.controller: Controller class"""

1.3 addSwitch

def addSwitch( self, name, cls=None, **params ):"""Add switch.name: name of switch to addcls: custom switch class/constructor (optional)returns: added switchside effect: increments listenPort ivar ."""

1.4 addHost设置主机CPU

def addHost( self, name, cls=None, **params ):"""Add host.name: name of host to addcls: custom host class/constructor (optional)params: parameters for hostreturns: added host"""
如:h1 = net.addHost('h1', cpu=0.5)
name需要加入节点的名字
clscustom host class,可选参数
params可选参数,具体见mininet/mininet/node.py中的config()
cpu:desired overall system CPU fraction

cores: (real) core(s) this host can run on

  mininet/mininet/node.py中的config()

def config( self, cpu=-1, cores=None, **params ):"""cpu: desired overall system CPU fractioncores: (real) core(s) this host can run onparams: parameters for Node.config()"""
def addLink( self, node1, node2, port1=None, port2=None, cls=None, **params ):""""Add a link from node1 to node2node1: source node (or name)node2: dest node (or name)port1: source port (optional)port2: dest port (optional)cls: link class (optional)params: additional link params (optional)returns: link object"""

如:self.addLink( node1, node2, bw=10, delay='5ms', max_queue_size=1000, loss=10, use_htb=True)

使用htb速率限制器和netem延迟/丢失模拟器,添加具有带宽、延迟和丢失特性,最大排队长度为1000的双向链路。

node1,node2节点1,2
port1source port源端口,可选参数
port2destination port目的端口,可选参数
clscustom link class,可选参数
params可选参数,具体见mininet/mininet/link.pyconfig()
bw: bandwidth in b/s (e.g. '10M')单位是Mbit
delay: transmit delay (e.g. '5ms', '100us', '1s')
jitter: jitter (e.g. '1ms')
loss: loss (e.g. '1%' )百分比

内核队列调度算法:

use_tbf: use TBF scheduling

use_hfsc: use HFSC scheduling,HFSC:Hierarchical Fair Service Curve’s(层次公平服务曲线) 

use_htb: use HTB scheduling, HTB:Hierarchical Token Bucket(层级令牌桶)

max_queue_size: queue limit parameter for netem以数据包表示

  mininet/mininet/link.py的config()

def config( self, bw=None, delay=None, jitter=None, loss=None,gro=False, txo=True, rxo=True,speedup=0, use_hfsc=False, use_tbf=False,latency_ms=None, enable_ecn=False, enable_red=False,max_queue_size=None, **params ):"""Configure the port and set its properties.bw: bandwidth in b/s (e.g. '10m')delay: transmit delay (e.g. '1ms' )jitter: jitter (e.g. '1ms')loss: loss (e.g. '1%' )gro: enable GRO (False)txo: enable transmit checksum offload (True)rxo: enable receive checksum offload (True)speedup: experimental switch-side bw optionuse_hfsc: use HFSC schedulinguse_tbf: use TBF schedulinglatency_ms: TBF latency parameterenable_ecn: enable ECN (False)enable_red: enable RED (False)max_queue_size: queue limit parameter for netem"""

1.6 ping互通测试

def ping( self, hosts=None, timeout=None ):"""Ping between all specified hosts.hosts: list of hoststimeout: time to wait for a response, as stringreturns: ploss packet loss percentage"""

1.6 iperf测试TCP吞吐量、UDP丢包和延迟抖动[2]

def iperf( self, hosts=None, l4Type='TCP', udpBw='10M', fmt=None,seconds=5, port=5001):"""Run iperf between two hosts.hosts: list of hosts; if None, uses first and last hostsl4Type: string, one of [ TCP, UDP ]udpBw: bandwidth target for UDP testfmt: iperf format argument if anyseconds: iperf time to transmitport: iperf portreturns: two-element array of [ server, client ] speedsnote: send() is buffered, so client rate can be much higher thanthe actual transmission rate; on an unloaded system, serverrate should be much closer to the actual receive rate"""

iperf是一款常用的网络带宽测试工具,分为客户端和服务端。服务端首先开启监听,客户端发送流量,最后测得带宽的大小。以h1为服务端,以h2为客户端。打开服务端和客户端终端命令为:

xterm h1 h2

1、Iperf测试TCP网络带宽利用率  

h1服务端iperf -s 
h2客户端

Iperf默认的运行时间在10秒左右,通过“-t”和“-i”参数来改变Iperf运行的时间和输出频率。如:iperf -c 10.0.0.1 -t 60 -i 10

通过“-n”参数指定要传输的数据量,指定“-n”参数后,“-t”参数失效,Iperf在传输完毕指定大小的数据包后,自动结束。如:iperf -c 10.0.0.1 -n 100M -i 10
通过“-P”参数测试多线程TCP吞吐量。如:iperf -c 10.0.0.1 -n 100M -i 10 -P 2

2、Iperf测试UDP数据包丢包率和延迟指标

h1服务端通过“-p”指定服务器端与客户端所连接的端口,iperf -s -u -p 6633 -t 60 -i 10
h2客户端通过Iperf的“-u”参数即可测试UDP应用的传输性能,“-b”参数测试客户端传输100M的UDP数据包,如:iperf -c 10.0.0.1 -u -p 6633 -t 60 -i 10 -b 100M

“Jitter”列表示抖动时间,也称为传输延迟。

“Lost/Total Datagrams”列表示丢失的数据包和数据包数量,0%是平均丢包率。

1.7 buildFromTopo() 

Mininet类最主要的部分是 build() 函数,依次执行:根据拓扑创建网络,配置网络名字空间,配置主机的 IP、MAC 等信息,检查是否启动 xterm,是否配置自动静态 arp 等。

def buildFromTopo( self, topo=None ):"""Build mininet from a topology objectAt the end of this function, everything should be connectedand up."""

2.修改文件example.py为可执行文件和可读写文件

chmod +x example.py
chmod 666 example.py

3.运行脚本 

sudo python3 example.py

参考文献

1.mininet搭建自定义网络拓扑.http://www.muzixing.com/pages/2013/12/06/yuan-chuang-mininetda-jian-zi-ding-yi-wang-luo-tuo-bu-by-muzi.html.

2.性能测试工具Iperf 验证SDN网络.https://www.sdnlab.com/15088.html.

这篇关于Python脚本创建mininet网络拓扑与iperf测量的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/601727

相关文章

python: 多模块(.py)中全局变量的导入

文章目录 global关键字可变类型和不可变类型数据的内存地址单模块(单个py文件)的全局变量示例总结 多模块(多个py文件)的全局变量from x import x导入全局变量示例 import x导入全局变量示例 总结 global关键字 global 的作用范围是模块(.py)级别: 当你在一个模块(文件)中使用 global 声明变量时,这个变量只在该模块的全局命名空

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

在cscode中通过maven创建java项目

在cscode中创建java项目 可以通过博客完成maven的导入 建立maven项目 使用快捷键 Ctrl + Shift + P 建立一个 Maven 项目 1 Ctrl + Shift + P 打开输入框2 输入 "> java create"3 选择 maven4 选择 No Archetype5 输入 域名6 输入项目名称7 建立一个文件目录存放项目,文件名一般为项目名8 确定

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

Java 创建图形用户界面(GUI)入门指南(Swing库 JFrame 类)概述

概述 基本概念 Java Swing 的架构 Java Swing 是一个为 Java 设计的 GUI 工具包,是 JAVA 基础类的一部分,基于 Java AWT 构建,提供了一系列轻量级、可定制的图形用户界面(GUI)组件。 与 AWT 相比,Swing 提供了许多比 AWT 更好的屏幕显示元素,更加灵活和可定制,具有更好的跨平台性能。 组件和容器 Java Swing 提供了许多

nudepy,一个有趣的 Python 库!

更多资料获取 📚 个人网站:ipengtao.com 大家好,今天为大家分享一个有趣的 Python 库 - nudepy。 Github地址:https://github.com/hhatto/nude.py 在图像处理和计算机视觉应用中,检测图像中的不适当内容(例如裸露图像)是一个重要的任务。nudepy 是一个基于 Python 的库,专门用于检测图像中的不适当内容。该

Linux服务器Java启动脚本

Linux服务器Java启动脚本 1、初版2、优化版本3、常用脚本仓库 本文章介绍了如何在Linux服务器上执行Java并启动jar包, 通常我们会使用nohup直接启动,但是还是需要手动停止然后再次启动, 那如何更优雅的在服务器上启动jar包呢,让我们一起探讨一下吧。 1、初版 第一个版本是常用的做法,直接使用nohup后台启动jar包, 并将日志输出到当前文件夹n

pip-tools:打造可重复、可控的 Python 开发环境,解决依赖关系,让代码更稳定

在 Python 开发中,管理依赖关系是一项繁琐且容易出错的任务。手动更新依赖版本、处理冲突、确保一致性等等,都可能让开发者感到头疼。而 pip-tools 为开发者提供了一套稳定可靠的解决方案。 什么是 pip-tools? pip-tools 是一组命令行工具,旨在简化 Python 依赖关系的管理,确保项目环境的稳定性和可重复性。它主要包含两个核心工具:pip-compile 和 pip

顺序表之创建,判满,插入,输出

文章目录 🍊自我介绍🍊创建一个空的顺序表,为结构体在堆区分配空间🍊插入数据🍊输出数据🍊判断顺序表是否满了,满了返回值1,否则返回0🍊main函数 你的点赞评论就是对博主最大的鼓励 当然喜欢的小伙伴可以:点赞+关注+评论+收藏(一键四连)哦~ 🍊自我介绍   Hello,大家好,我是小珑也要变强(也是小珑),我是易编程·终身成长社群的一名“创始团队·嘉宾”