SDN拓扑实践
2024-09-08 12:29:24
一、使用Mininet可视化工具,生成下图所示的拓扑,并保存拓扑文件名为学号.py
二、使用Mininet的命令行生成如下拓扑:
1) 3台交换机,每个交换机连接1台主机,3台交换机连接成一条线。
2) 3台主机,每个主机都连接到同1台交换机上。
3) 在2)的基础上,在Mininet交互界面上新增1台主机并且连接到交换机上,再测试新拓扑的连通性。
三、编辑基本要求第1步保存的Python脚本,添加如下网络性能限制,生成拓扑:
1) h1的cpu最高不超过50%;
2) h1和s1之间的链路带宽为10,延迟为5ms,最大队列大小为1000,损耗率50。
进阶要求
编写Python脚本,生成如下数据中心网络拓扑,要求:
编写.py拓扑文件,命名为“学号_fattree.py”;
必须通过Mininet的custom参数载入上述文件,不得直接使用miniedit.py生成的.py文件;
设备名称必须和下图一致;
使用Python的循环功能实现,不得在代码中手工直接添加设备和链路。
from mininet.topo import Topo
from mininet.net import Mininet
from mininet.node import RemoteController,CPULimitedHost
from mininet.link import TCLink
from mininet.util import dumpNodeConnections
class MyTopo( Topo ):
"Simple topology example."
def __init__( self ):
"Create custom topo."
# Initialize topology
Topo.__init__( self )
L1 = 2
L2 = L1 * 2
L3 = L2 * 2
s = []
# add ovs
for i in range( L1+L2+L3 ):
sw = self.addSwitch( 's{}'.format( i + 1 ) )
s.append( sw )
# add links between core and aggregation ovs
for i in range( L1 ):
sw1 = s[i]
for sw2 in s[L1:L1+L2]:
self.addLink( sw2, sw1 )
# add links between aggregation and edge ovs
for i in range(0, L2, 2 ):
for sw1 in s[i+L1:i+L1+2]:
for sw2 in s[L1+L2+i*2:L1+L2+(i+2)*2]:
self.addLink( sw2, sw1 )
#add hosts and its links with edge ovs
count = 1
for sw1 in s[L1+L2:L1+L2+L3]:
for i in range(2):
host = self.addHost( 'h{}'.format( count ) )
self.addLink( sw1, host )
count += 1
topos = { 'mytopo': ( lambda: MyTopo() ) }
执行结果
四、个人总结:
1、第一步sudo ./mininet/examples/miniedit.py可能会出现:
原因是mininet运行需要python3而Ubuntu20.04默认是python2。所以需要更改默认配置。可以使用命令修改:
sudo apt install python-is-python3
或
sudo cp -r /usr/local/lib/python3.6/dist-packages/ /usr/local/lib/python2.7/
2、保存文件后.py文件为只读,不可修改,可以使用命令修改:
chmod 777 file #user、gourp、other三个用户都能读取、写入、执行
3、总结:通过这次的实验,我对虚拟机有了更深入的了解,初步学习了mininet的基本的用法,同时也知晓了更多实用的指令,并且能够通过简单指令来实现相关功能。本次实验前半部分基本上没有碰到什么大的问题,主要的卡顿方向还是进阶部分,由于python好久都没用过了,基本上忘的差不多了,重新拾起来还是有点困难,很多东西都看不太懂,也是参考了很多的网站,还有一些专业性的代码,马马虎虎算是弄出来了,不过要是自己打应该还是不太行,之后会进一步学习的。
最新文章
- MySQL实现嵌套集合模型
- Sublime 快捷键
- python 实现文件下载
- BroadCast小结
- Java提高篇(三二)-----List总结
- JS中iframe相关的window.self,window.parent,window.top
- eclipse导入github项目
- projecteuler 10001st prime (求出第10001个质数)
- 20150911 for循环的用法以及小题目
- 函数变量作用域(python)
- Codeforces Round #336 (Div. 2) A. Saitama Destroys Hotel 模拟
- oracle 基本语句练习(一) where, between ,null, like,转义字符,order by
- 配置Log4j(非常具体)
- COJ 0557 4013多重部分和问题
- myeclipse实现Servlet实例(1) 通过继承servlet接口实现
- SQL 经典练习
- PHP 字符串替换 substr_replace 与 str_replace 函数
- CentOS 6.5玩转自制Linux、远程登录及Nginx安装测试
- FFmpeg源代码结构图 - 解码
- Shim 与 Polyfill
热门文章
- [数据结构]Hash Table(哈希表)
- P5687 [CSP-S2019 江西] 网格图
- 刷题笔记——3003.鸡兔同笼问题 &; 2767.计算多项式的值
- vue3+quasar+capacitor开发多平台项目,使用quasar改变主题背景
- 方法引用_通过类名引用静态成员方法-方法引用_通过super引用父类的成员方法
- 读Java8函数式编程笔记05_数据并行化
- 【学习笔记】QT从入门到实战完整版(菜单栏、工具栏、浮动窗口、状态栏、中心部件)(3)
- 软工综合实践课设——员工招聘系统(参考BOSS直聘);Pyhton实现
- 文本纠错:提升OCR任务准确率的方法理解
- python3中,len()、isalpha()、isspace()、isdigit()、isalnum()实例