当前位置:网站首页>软件定义网络实验之自定义拓扑开发
软件定义网络实验之自定义拓扑开发
2022-08-03 00:35:00 【小许要好学啊】
目录
实验目的及要求
基于Python及Mininet开发自定义的拓扑
实验内容
1、基于Python及Mininet开发简单拓扑
开发实现一个包含两个交换机、两个客户端主机(每个交换机连接一个主机)、一个控制器的简单拓扑。
2、基于Python及Mininet开发自定义拓扑
开发实现一个包含m个交换机、m*n个客户端主机(每个交换机连接n个主机)、一个控制器的自定义拓扑。
实验环境
Ubuntu操作系统、Mininet、Pycharm IDE
实验步骤
1、基于Python及Mininet开发简单拓扑
1.1 在PyCharm新建项目,新建python文件
1.2 编写python程序
import os
from mininet.net import Mininet
from mininet.cli import CLI
from mininet.log import setLogLevel
from mininet.link import TCLink
from mininet.topo import Topo
class linearTopo(Topo):
def __init__(self):#初始化
self.switchList = [] #交换机列表
self.hostList = [] #主机列表
Topo.__init__(self)#调用其初始化函数
def create_topo(self):
self.create_switch()#创建交换机函数
self.create_host()#创建主机函数
self.create_link()#创建链路连接函数
def create_switch(self):
#添加一个交换机s1,并将s1加入交换机列表末尾
self.switchList.append(self.addSwitch('s1'))
self.switchList.append(self.addSwitch('s2'))
def create_host(self):
#添加一个主机h1,并将h1加入主机列表末尾
self.hostList.append(self.addHost('h1'))
self.hostList.append(self.addHost('h2'))
def create_link(self):
self.addLink(self.switchList[0],self.switchList[1],bw=100, delay='5ms', loss=0) #在s1、s2之间添加连接,并定义带宽、时延和丢包率
self.addLink(self.switchList[0], self.hostList[0], bw=100, delay='5ms', loss=0) #在s1、h1之间添加连接,并定义带宽、时延和丢包率
self.addLink(self.switchList[1], self.hostList[1], bw=100, delay='5ms', loss=0) #在s2、h2之间添加连接,并定义带宽、时延和丢包率
def create_topo():
topo = linearTopo()#定义linearTopo类
topo.create_topo()#调用类的创建拓扑函数
net = Mininet(topo=topo, link=TCLink, autoSetMacs=True)#通过传参定义一个Mininet类创建和管理网络
net.start()#启动网络
CLI(net) #显示命令行界面
net.stop()#停止网络
if __name__ == '__main__':
create_topo()#主函数调用创建网络拓扑函数
1.3 运行程序,查看结果

2、基于Python及Mininet开发自定义拓扑
该实验主要步骤与实验一相同,但需修改python程序:
def __init__(self):#初始化
self.switchList = [] #初始化交换机列表
self.hostList = [] #初始化主机列表
self.switch_number = 4 #初始化交换机数量,即m
self.host_per_switch_number = 3 #初始化每个交换机连接主机数量,即n
Topo.__init__(self)#调用其初始化函数
def create_switch(self):
for i in range(1, self.switch_number+1):#从1开始编号
prefix = "s" #定义前缀s
self.switchList.append(self.addSwitch(prefix + str(i)))
#prefix + str(i)即s1,s2...sm,添加m个交换机
def create_host(self):
#循环m*n次,即添加m*n个主机
for i in range(1, self.switch_number*self.host_per_switch_number + 1):
prefix = "h" #定义前缀h self.hostList.append(self.addHost(prefix+str(i)))
#prefix + str(i)即h1,h2...h(m*n),添加m*n个主机
def create_link(self):
for i in range(0, len(self.switchList)):
if i < len(self.switchList) - 1:
#i从0开始,self.switchList[i]为s(i+1)
self.addLink(self.switchList[i],self.switchList[i+1], bw=100, delay='5ms', loss=0) #在每个交换机之间添加链路
for j in range(0, self.host_per_switch_number):
self.addLink(self.switchList[i],
self.hostList[i*self.host_per_switch_number + j])
#每个交换机与n个主机之间添加链路,例如s1与h1、h2、h3;s2与h4、h5、h6
运行结果
m=4,n=3时


总结
此次拓扑开发实验需要理解网络拓扑结构,知道如何使用python编写创建拓扑网络的程序,学会自定义拓扑结构。
边栏推荐
猜你喜欢

软件测试从业多年,自认为技术不错,裸辞:一晃 ,失业3个月了~

236. 二叉树的最近公共祖先

线上交流丨稀疏神经网络:实践和理论(青源Talk第23期 汪张扬)

【图像分类】2021-EfficientNetV2 CVPR

【QT】自定义工程封装成DLL并如何调用(带ui界面的)

2022 开放原子全球开源峰会 | 麒麟信安携手openEuler助力开源产业繁荣发展

6-接口跨域处理

优秀的 Verilog/FPGA开源项目总结及交流群

麒麟信安邀您抢先看 | openEuler 志高远,开源汇智创未来-开放原子全球开源峰会欧拉分论坛最详细议程出炉

智能合约安全-可重入攻击(SW107-Reentrancy)
随机推荐
mysql容器数据卷持久化
买了一瓶饮料
并发模型和I/O模型介绍
机电设备制造企业,如何借助ERP系统做好客供料管理?
8-jwt工具类
稳压电源: 电路图及类型
Jenkins汉化设置
智能合约安全-可重入攻击(SW107-Reentrancy)
淘宝商品销量接口/淘宝商品销量监控接口/商品累计销量接口代码对接分享
流程控制for和while循环语句
高并发基石:多线程、守护线程、线程安全、线程同步、互斥锁,一文扫尽!...
电信业务分类
中科磁业IPO过会:年营收5.5亿 吴中平家族持股85%
封装和练习题目
Flink / Scala - 使用 CountWindow 实现按条数触发窗口
10. SAP ABAP OData 服务如何支持修改(Update)操作
鲲鹏devkit开发套件
C语言:链表
alibaba数据同步组件canal的实践整理
并查集总结