SDN第一次上机作业
任务一:在Ubuntu系统的home目录下创建一个目录
任务二:在创建的目录下,完成Mininet的源码安装
![](https://img2020.cnblogs.com/blog/2524896/202109/2524896-20210901235400193-823835600.png)
任务三:使用Mininet可视化工具,生成下图所示的拓扑
![](https://img2020.cnblogs.com/blog/2524896/202109/2524896-20210901235431581-1060695832.png)
任务四:使用Mininet的命令行生成如下拓扑
a) 3台交换机,每个交换机连接1台主机,3台交换机连接成一条线。
![](https://img2020.cnblogs.com/blog/2524896/202109/2524896-20210901235553724-1499174205.png)
b) 3台主机,每个主机都连接到同1台交换机上。
![](https://img2020.cnblogs.com/blog/2524896/202109/2524896-20210901235614261-860579715.png)
任务五:在4 b)的基础上,在Mininet交互界面上新增1台主机并且连接到交换机上
![](https://img2020.cnblogs.com/blog/2524896/202109/2524896-20210901235706835-1879764280.png)
任务六:编辑(一)中第3步保存的Python脚本,添加如下网络性能限制,生成拓扑
a) h1的cpu最高不超过50%
b) h1和s1之间的链路带宽为10,延迟为5ms,最大队列大小为1000,损耗率50
![](https://img2020.cnblogs.com/blog/2524896/202109/2524896-20210901235815795-1086133841.png)
进阶任务
python代码
from mininet.topo import Topo
from mininet.net import Mininet
from mininet.node import CPULimitedHost, RemoteController, Controller
from mininet.link import TCLink
from mininet.util import dumpNodeConnections
from mininet.log import setLogLevel
from mininet.cli import CLI
class MyTopo(Topo):
def __init__(self):
Topo.__init__(self)
L1 = 2
L2 = L1*2
L3 = L2*2
a = []
b = []
c = []
for i in range(L1):
sw = self.addSwitch('s{}'.format(i + 1))
a.append(sw)
for i in range(L2):
sw = self.addSwitch('s{}'.format(L1+i+1))
b.append(sw)
for i in range(L3):
sw = self.addSwitch('s{}'.format(L1+L2+i+1))
c.append(sw)
for i in range(L1):
sw1 = a[i]
for sw2 in b[int(i/2)::int(L1/2)]:
self.addLink(sw2,sw1)
for i in range(L2):
sw2 = b[i]
self.addLink(sw1,sw2)
for i in range(0,L2,2):
for sw1 in b[i:i+2]:
for sw2 in c[i:i+2]:
self.addLink(sw2,sw1)
for i in range(0,L3,2):
for sw1 in b[i-4:i]:
for sw2 in c[i:i+2]:
self.addLink(sw2,sw1)
count = 1
for sw1 in c:
for i in range(2):
host = self.addHost('h{}'.format(count))
self.addLink(sw1,host)
count+=1
topos={'mytopo':(lambda:MyTopo())}
def simpleTest():
topo=MyTopo()
net = Mininet(topo,host=CPULimitedHost,link=TCLink)
dumpNodeConnections(net.hosts )
CLI(net)
net.stop()
if __name__=='__main__':
setLogLevel('info')
simpleTest()
运行截图
![](https://img2020.cnblogs.com/blog/2524896/202109/2524896-20210903223832512-678606309.png)
个人总结
我的python并不是很好,最终进阶任务这块的代码基本上源自老师提供的参考资料,这次也算是重拾python了。在实验中出现了一些问题,例如在安装mininet的时候的pip报错,最终也是依靠老师的解决方法修改了python3的软链指向,也因为网络不佳前前后后也是安装了不下10次的mininet,不过幸好还是在第一次上课前安装完了mininet。在任务五这里也是要感谢樊朝伟同学的方法。在进阶任务的代码过程中有一个问题就是在循环进行连线操作这里的b[int(i/2)::int(L1/2)],如果只是原先的b[i/2::L1/2]的话可能会因为 / 导致最终[ ]内的数据成为一个浮点数,这时候需要使用int强制转换为整形;通过修改参考资料代码中列表的切片操作就能够基本完成要求的连线;而且python的tab和空格问题也是修改了很久;但是我的代码还有问题,连线还是有错误,这也是因为我的python能力有限,不能很好的搞懂循环的关系;而且对于c0的设置也不是很清楚。这次实验前面部分还是比较简单的的,进阶部分比较难但也很有意思。这次也是算是开始mininet的学习之旅了,希望这学期在老师的带领下能够初步了解一点mininet,也希望自己能够学好SDN这门课程