补充:NameError: name 'buffer' is not defined

>>> import sys
>>> if sys.version_info > (,):
... buffer = memoryview
>>> b = buffer('yay!'.encode())
>>> len(b)
因为在Python3中buffer已经被memoryview取代了,buffer在Python2中使用,所以我们可以在文件中加入
import sys
if sys.version_info > (,):
buffer = memoryview

一:Mininet模拟多数据中心流量带宽实验

(一)案例目的

(二)为什么使用Mininet模拟数据中心--应用价值

Mininet最常用的场景就是数据中心。因为Mininet可以模拟出很复杂的网络拓扑,而不需要硬件的支持,就可以搭建出不同的数据中心的拓扑。
可以为真正的数据中心网络的搭建起到模拟预测实验作用,为真实的数据中心的成本带来一定的节省。

二:数据中心网络拓扑

(一)数据中心网络拓扑结构

存在线路冗余(多条链路可达),容错能力强-----胖树拓扑

(二)实现网络拓扑---按照结构实现,代码不唯一

from mininet.topo import Topo
from mininet.net import Mininet
from mininet.node import RemoteController
from mininet.link import TCLink
from mininet.util import dumpNodeConnections class MyTopo(Topo): def __init__(self):
super(MyTopo,self).__init__() #Marking the number of switch for per level
L1 = ;
L2 = L1*
L3 = L2 #Starting create the switch
c = [] #core switch
a = [] #aggregate switch
e = [] #edge switch #notice: switch label is a special data structure
for i in range(L1):
c_sw = self.addSwitch('c{}'.format(i+)) #label from to n,not start with
c.append(c_sw) for i in range(L2):
a_sw = self.addSwitch('a{}'.format(L1+i+))
a.append(a_sw) for i in range(L3):
e_sw = self.addSwitch('e{}'.format(L1+L2+i+))
e.append(e_sw) #Starting create the link between switchs
#first the first level and second level link
for i in range(L1):
c_sw = c[i]
for j in range(L2):
self.addLink(c_sw,a[j]) #second the second level and third level link
for i in range(L2):
self.addLink(a[i],e[i])
if not i%:
self.addLink(a[i],e[i+])
else:
self.addLink(a[i],e[i-]) #Starting create the host and create link between switchs and hosts
for i in range(L3):
for j in range():
hs = self.addHost('h{}'.format(i*+j+))
self.addLink(e[i],hs) topos = {"mytopo":(lambda:MyTopo())}

(三)使用Mininet测试

sudo mn --custom ./data_center_topo.py --topo=mytopo --controller=remote

三:流量模拟

(一)为什么需要流量模拟

(二)流量随机模型在Mininet中的应用

四:自定义命令拓展实现---为流量模拟做准备

(一)修改net.py

    def iperf_single( self, hosts=None, udpBw='10M',period=,port=):
"""Run iperf between two hosts using UDP.
hosts: list of hosts; if None, uses first and last hosts
returns: results two-element array of server and client speeds
"""
if not hosts:
return
else:
assert len(hosts) == 2  #这段代码我们要求一定要有两个参数,即下面的client,和server client, server =
hosts
filename
= client.name[1:]+'.out'
output('*** Iperf:testing bandwidth between ')
output('%s and %s\n'%
(client.name,server.name))  #这里在Mininet交互界面显示提示信息
iperfArgs
= 'iperf -u '
bwArgs = '-b '+udpBw+' '  #设置命令和参数,这是要在client和server上执行的
print("***start server***"
)
server.cmd(iperfArgs
+'-s -i 1'+' > /home/njzy/temp_log/'+filename+'&')  #服务器端执行指令,并且将返回的信息存放在文件中
                          #注意:对应我们存放日志的目录,一定是真实存在的
print("***start client***")
client.cmd(iperfArgs
+'-t '+str(period)+' -c '+server.IP()+' '+bwArgs  #客户端执行指令,并且将返回的信息存放在文件中
+' > /home/njzy/temp_log/'+'client'+filename+'&'
) def iperfMulti(self,bw,period=):
base_port =
server_list = []
client_list = [h for h in self.hosts]
host_list = []
host_list = [h for h in
self.hosts]  #收集所有主机信息 cli_outs = []
ser_outs = [] _len = len(host_list)
for i in xrange(0,_len):  #按照主机数目进行循环,每次选择一台主机,作为客户端
client = host_list[i]
server = client
while (server==client):  #如果客户端和服务端是同一台主机,那么我们随机从主机中国选择一台新的主机作为服务端,直到找到一台与客户端不同的主机,用来做服务端
server =
random.choice(host_list) server_list.append(server)
self.iperf_single(hosts=[client,server],udpBw=bw,period=period,port=base_port)  #客户端和服务端进行带宽测试
sleep(.)
base_port += 1  #更换端口号,做到随机 sleep(period)
print("test has done")  #结束,打印提示信息

(二)修改cli.py将iperfmulti命令在CLI类中注册

    def do_iperfmulti( self, line ):
"""
Multi iperf UDP test between nodes
"""
args = line.split()
if len(args) == :
udpBw = args[]
self.mn.iperfMulti(udpBw)
elif len(args) == :
udpBw = args[]
period = args[]
self.mn.iperfMulti(udpBw,float(period))
else:
error( 'invalid number of args: iperfMulti udpBw period\n '+
'udpBw examples:1M 120\n' )

(三) 在mininet/bin/mn文件中加入iperfmulti可执行命令

TESTS = { name: True
for name in ( 'pingall', 'pingpair', 'iperf', 'iperfudp','iperfmulti' ) }
# Map to alternate spellings of Mininet() methods
ALTSPELLING = { 'pingall': 'pingAll', 'pingpair': 'pingPair',
'iperfudp': 'iperfUdp','iperfmulti': 'iperfMulti' }

(四)重新编译mininet---因为我们修改了mininet内核文件

因为我们已经安装OpenFlow协议和openvswitch,所以不需要再加3V

sudo mn
iperfmulti  后面会自动补全

五:进行网络测试

(一)开始Ryu---为了防止广播风暴,使用生成树协议《重点注意协议文件选择》

ryu-manager simple_switch_stp_13.py     注意:是使用simple_switch_stp_13协议,不要使用simple_switch_stp文件,不然会出问题

(二)Mininet启动网络拓扑

sudo mn --custom ./data_center_topo.py --topo=mytopo --controller=remote

(三)使用iperf命令,进行TCP带宽测试

注意:在测试之前先多ping几次<h1 ping h2>(找到可以ping通),使得网络拓扑结构提前存在控制器中,不然容易直接退出

iperf h1 h2

iperf h1 h3

iperf h1 h5

(四)使用iperfmulti命令,进行UDP带宽测试

iperfmulti 0.025M

查看流量日志

SDN实验---Mininet实验(模拟多数据中心带宽实验)的更多相关文章

  1. Mininet实验 基于Mininet实现BGP路径挟持攻击实验

    参考:基于Mininet实现BGP路径挟持攻击实验 实验目的: 掌握如何mininet内模拟AS. 掌握BGP路径挟持的原理和分析过程. 实验原理: 互联网是由相互连接的自治系统AS组成的,通过一个通 ...

  2. Docker + Consul 多数据中心模拟

    Docker + Consul 多数据中心模拟 1. dc1搭建 docker run -d --name node1 -h node1 progrium/consul -server -bootst ...

  3. 2017年 实验五  B2B模拟实验

    实验五  B2B模拟实验 [实验目的] ⑴.掌握B2B中供应商的供求信息发布.阿里商铺开设和订单交易等过程. ⑵.掌握B2B中采购商的采购信息的发布.交易洽谈.网上支付和收货等过程. [实验条件] ⑴ ...

  4. 2017年 实验四 B2C模拟实验

    实验四 B2C模拟实验                [实验目的] 掌握网上购物的基本流程和B2C平台的运营 [实验条件] ⑴.个人计算机一台 ⑵.计算机通过局域网形式接入互联网. (3).奥派电子商 ...

  5. 2016年 实验四  B2B模拟实验

    实验四  B2B模拟实验 [实验目的] ⑴.掌握B2B中供应商的供求信息发布.阿里商铺开设和订单交易等过程. ⑵.掌握B2B中采购商的采购信息的发布.交易洽谈.网上支付和收货等过程. [实验条件] ⑴ ...

  6. 2016年 实验三 B2C模拟实验

    实验三 B2C模拟实验 [实验目的] 掌握网上购物的基本流程和B2C平台的运营 [实验条件] ⑴.个人计算机一台 ⑵.计算机通过局域网形式接入互联网. (3).奥派电子商务应用软件 [知识准备] 本实 ...

  7. 实验 4 :Open vSwitch 实验 —— Mininet 中使用 OVS 命令

    实验 4 :Open vSwitch 实验 -- Mininet 中使用 OVS 命令 一.实验目的 Mininet 安装之后,会连带安装 Open vSwitch,可以直接通过 Python 脚本调 ...

  8. 哈工大 信息安全 实验 Snort与单台防火墙联动实验

    XX大学XX学院 <网络攻击与防御> 实验报告 实验报告撰写要求 实验操作是教学过程中理论联系实际的重要环节,而实验报告的撰写又是知识系统化的吸收和升华过程,因此,实验报告应该体现完整性. ...

  9. 20145308刘昊阳 《Java程序设计》实验三 敏捷开发与XP实践 实验报告

    20145308刘昊阳 <Java程序设计>实验三 敏捷开发与XP实践 实验报告 实验名称 敏捷开发与XP实践 实验内容 XP基础 XP核心实践 相关工具 统计的PSP(Personal ...

随机推荐

  1. 尾递归 递归函数中,递归调用是整个函数体中最后的语句,且它的返回值不属于表达式的一部分时,这个递归调用就是尾递归,空间复杂度是O(1)

    什么是递归深度 递归深度就是递归函数在内存中,同时存在的最大次数. 例如下面这段求阶乘的代码: Java: int factorial(int n) { if (n == 1) { return 1; ...

  2. VSCode自动保存文件设置

    很多时候敲了一大堆代码,结果手贱或者电脑没电或者电脑突然崩溃,如果没有保存,只能说GG.好在VSCode有自动保存代码的功能,而且有好几种自动保存的模式选择,设置方法如下: 进入">文 ...

  3. Vuex状态数据源state

    (1)单一状态树 Vuex 使用单一状态,用一个对象就包含了全部的应用层级状态.至此它便作为一个“唯一数据源 (SSOT)”而存在.这也意味着,每个应用将仅仅包含一个 store 实例. 单一状态树让 ...

  4. jmeter多个接口测试

    针对接口文档,进行对应接口设计,多个接口设计用例需要使用事物控制器. 1.通过登录接口提取sign值 发送一个登录请求,然后通过正则表达式提取该sign值 正则表达式的使用,我稍后会在下一个博文中详细 ...

  5. python应用-n颗骰子的和出现的次数

    from random import randint def roll_dice(n): total=0 for _ in range (n): num=randint(1,6) total+=num ...

  6. 学习:Lucas定理

    模板题 在数论中,Lucas定理用于计算二项式系数\({\tbinom {m}{n}}\)被质数\(p\)除的所得的余数. 描述 设\(p\)为素数,\(a,b\in N_+\),且 \[a=a_kp ...

  7. 聊聊CMSIS-RTOS是什么东东

    起因:发布自己翻译用的CMSIS_RTOS_Tutorial后,陆续收到网友关于“CMSIS-RTOS是干么的?”之类的问题,再次统一回复. 众所周知,实时操作系统是嵌入式领域的基石.而可选的嵌入式操 ...

  8. eslint Cannot read property 'range' of null错误

    eslint Cannot read property 'range' of null错误   手动添加的配置,2个项目OK,还个项目 运行报错 Cannot read property 'range ...

  9. ES5新增的数组方法

    ES5新增:(IE9级以上支持)1.forEach():遍历数组,无返回值,不改变原数组.2.map():遍历数组,返回一个新数组,不改变原数组.3.filter():过滤掉数组中不满足条件的值,返回 ...

  10. 如何高效的阅读uni-app框架?(建议收藏)

    作者 | Jeskson来源 | 达达前端小酒馆 uni-app的框架,配置:page.json,manifest.json,package.json,vue.config.js.脚本,应用程序,ma ...