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判断for循环最后一次的6种方法

《Python判断for循环最后一次的6种方法》在Python中,通常我们不会直接判断for循环是否正在执行最后一次迭代,因为Python的for循环是基于可迭代对象的,它不知道也不关心迭代的内部状态... 目录1.使用enuhttp://www.chinasem.cnmerate()和len()来判断for

使用Python实现高效的端口扫描器

《使用Python实现高效的端口扫描器》在网络安全领域,端口扫描是一项基本而重要的技能,通过端口扫描,可以发现目标主机上开放的服务和端口,这对于安全评估、渗透测试等有着不可忽视的作用,本文将介绍如何使... 目录1. 端口扫描的基本原理2. 使用python实现端口扫描2.1 安装必要的库2.2 编写端口扫

MySQL分表自动化创建的实现方案

《MySQL分表自动化创建的实现方案》在数据库应用场景中,随着数据量的不断增长,单表存储数据可能会面临性能瓶颈,例如查询、插入、更新等操作的效率会逐渐降低,分表是一种有效的优化策略,它将数据分散存储在... 目录一、项目目的二、实现过程(一)mysql 事件调度器结合存储过程方式1. 开启事件调度器2. 创

使用Python实现操作mongodb详解

《使用Python实现操作mongodb详解》这篇文章主要为大家详细介绍了使用Python实现操作mongodb的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、示例二、常用指令三、遇到的问题一、示例from pymongo import MongoClientf

使用Python合并 Excel单元格指定行列或单元格范围

《使用Python合并Excel单元格指定行列或单元格范围》合并Excel单元格是Excel数据处理和表格设计中的一项常用操作,本文将介绍如何通过Python合并Excel中的指定行列或单... 目录python Excel库安装Python合并Excel 中的指定行Python合并Excel 中的指定列P

一文详解Python中数据清洗与处理的常用方法

《一文详解Python中数据清洗与处理的常用方法》在数据处理与分析过程中,缺失值、重复值、异常值等问题是常见的挑战,本文总结了多种数据清洗与处理方法,文中的示例代码简洁易懂,有需要的小伙伴可以参考下... 目录缺失值处理重复值处理异常值处理数据类型转换文本清洗数据分组统计数据分箱数据标准化在数据处理与分析过

mysql外键创建不成功/失效如何处理

《mysql外键创建不成功/失效如何处理》文章介绍了在MySQL5.5.40版本中,创建带有外键约束的`stu`和`grade`表时遇到的问题,发现`grade`表的`id`字段没有随着`studen... 当前mysql版本:SELECT VERSION();结果为:5.5.40。在复习mysql外键约

Python调用另一个py文件并传递参数常见的方法及其应用场景

《Python调用另一个py文件并传递参数常见的方法及其应用场景》:本文主要介绍在Python中调用另一个py文件并传递参数的几种常见方法,包括使用import语句、exec函数、subproce... 目录前言1. 使用import语句1.1 基本用法1.2 导入特定函数1.3 处理文件路径2. 使用ex

Linux中shell解析脚本的通配符、元字符、转义符说明

《Linux中shell解析脚本的通配符、元字符、转义符说明》:本文主要介绍shell通配符、元字符、转义符以及shell解析脚本的过程,通配符用于路径扩展,元字符用于多命令分割,转义符用于将特殊... 目录一、linux shell通配符(wildcard)二、shell元字符(特殊字符 Meta)三、s

Python脚本实现自动删除C盘临时文件夹

《Python脚本实现自动删除C盘临时文件夹》在日常使用电脑的过程中,临时文件夹往往会积累大量的无用数据,占用宝贵的磁盘空间,下面我们就来看看Python如何通过脚本实现自动删除C盘临时文件夹吧... 目录一、准备工作二、python脚本编写三、脚本解析四、运行脚本五、案例演示六、注意事项七、总结在日常使用