sdn第一次作业
一.Mininet的安装路径
3.使用Mininet可视化工具,生成下图所示的拓扑
4.使用Mininet的命令行生成如下拓扑:
a.3台交换机,每个交换机连接1台主机,3台交换机连接成一条线。
b.3台主机,每个主机都连接到同一个交换机上
5.在4 b)的基础上,在Mininet交互界面上新增1台主机
6.编辑(一)中第3步保存的Python脚本,添加如下网络性能限制,生成拓扑
进阶要求
代码如下
from mininet.cli import CLI
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
class MyTopo(Topo):
def __init__(self):
Topo.__init__(self)
L1 = 2
L2 = 4
L3 = 8
c = []
a = []
b = []
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:
self.addLink(sw2, sw1)
for i in range(L2):
sw1 = b[i]
if i < L2 / 2:
for sw2 in c[0:L3 // 2]:
self.addLink(sw1, sw2)
else:
for sw2 in c[L3 // 2:L3]:
self.addLink(sw1, sw2)
L4 = 16
d = []
for i in range(L4):
h = self.addHost('h{}'.format(i + 1))
d.append(h)
for i in range(L3):
sw1 = c[i]
h1 = d[i * 2]
h2 = d[i * 2 + 1]
self.addLink(sw1, h1)
self.addLink(sw1, h2)
topos = {'mytopo': (lambda: MyTopo())}
def simpleTest():
topo = MyTopo()
net = Mininet(topo,
build=False,
ipBase='10.0.0.0/8')
c0 = net.addController('c0', controller=Controller, protocal='tcp', port=6633)
c0.start()
net.build()
dumpNodeConnections(net.hosts)
CLI(net)
net.stop()
if __name__ == '__main__':
setLogLevel('info')
simpleTest()
运行截图:
个人总结
最后进阶实验因为c0定义在类外面,net.get.start函数似乎使用不了。所以交换机没有和c0连通起来,整个网络是ping不通的。这个问题源于我对python语言的不够了解。写的时候因为脑子过载经常连错位置,感谢Jetbrain提供的教育版Pycharm,拥有强大的调试能力,很快找出问题所在。Markdown之前也没有用过,需要学习。进阶的图看似难其实有参考就比较容易理解,在参考老师给的资料时,我还用MiniEdit画了一张拓扑图导出为py脚本来参照。这门课虽然理论较为枯燥,但是实践还是比较有意思的。在5的时候怎么Ping也ping不通,这里要感谢朝伟同学在群里分享的办法。