能够使用源码安装Mininet;
能够使用Mininet的可视化工具生成拓扑;
能够使用Mininet的命令行生成特定拓扑;
能够使用Mininet交互界面管理SDN拓扑;
能够使用Python脚本构建SDN拓扑。
下载虚拟机软件Oracle VisualBox 或 VMware;
在虚拟机中安装Ubuntu 20.04 Desktop amd64;
Mininet的安装路径
使用Mininet可视化工具,生成下图所示的拓扑,并保存拓扑文件名为学号.py
使用Mininet的命令行生成如下拓扑:
在3台主机,每个主机都连接到同1台交换机上的拓扑的基础上,在Mininet交互界面上新增1台主机并且连接到交换机上,再测试新拓扑的连通性。
注:须配置路由表,用h1 ping h4,使得h4知道h1的地址
编辑(一)中第3步保存的Python脚本,添加如下网络性能限制,生成拓扑:
h1的cpu最高不超过50%;
h1和s1之间的链路带宽为10,延迟为5ms,最大队列大小为1000,损耗率50。
编写Python脚本,生成如下数据中心网络拓扑,要求:
编写.py拓扑文件,命名为“学号_fattree.py”;
必须通过Mininet的custom参数载入上述文件,不得直接使用miniedit.py生成的.py文件;
设备名称必须和下图一致;
使用Python的循环功能实现,不得在代码中手工直接添加设备和链路。
Python代码:
#!/usr/bin/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 ):
def __init__( self ):
Topo.__init__( self )
aofsw = 14
level1 = 2
level2 = 4
level3 = 8
s = []
h = []
# add switches
for i in range( 14 ):
switch = self.addSwitch( ‘s{}‘.format( i + 1 ) )
s.append( switch )
# add links between level1 and level2 switches
for i in range( 2 ):
sw1 = s[i]
for sw2 in s[2:6:1]:
self.addLink( sw2,sw1 )
# add links between level2 and level3 switches
for i in range( 0, 4, 2 ):
for sw1 in s[i+2:i+4:1]:
for sw2 in s[i*2+6:i*2+10:1]:self.addLink(sw2,sw1 )
#add hosts and level3 switches
count = 1
for sw1 in s[6:14:1]:
for i in range(2):
host = self.addHost( ‘h{}‘.format( count ) )
self.addLink( sw1, host )
count += 1
topos = { ‘mytopo‘: ( lambda: MyTopo() ) }
执行结果
个人感觉本次实验难度适中,难点集中在实验环境的安装与fat-tree拓扑结构的构建上
实验感觉最重要的还是搜索工具的使用。在本次实验中所遇到的问题基本上通过查阅相关资料都可以得到解决,不得不感慨互联网开源共享的理念,所需要的知识在网上应有尽有,从一开始我们就站到了巨人的肩膀上,诚挚感谢愿意分享自己学习经验的前辈们。
原文:https://www.cnblogs.com/ERROR1711/p/15270206.html