实验1:SDN拓扑实践
实验1:SDN拓扑实践
基础要求
-
a) Mininet运行结果截图

-
b) 2的执行结果截图
a. 3台交换机,每个交换机连接1台主机,3台交换机连接成一条线。
![]()
b. 3台主机,每个主机都连接到同1台交换机上。
![]()
c. 在2 b)的基础上,在Mininet交互界面上新增1台主机并且连接到交换机上,再测试新拓扑的连通性。
![]()
-
c) 3修改过的“学号.py”代码、Mininet运行结果
代码:
#!/usr/bin/env python from mininet.net import Mininet from mininet.node import Controller, RemoteController, OVSController from mininet.node import CPULimitedHost, Host, Node from mininet.node import OVSKernelSwitch, UserSwitch from mininet.node import IVSSwitch from mininet.cli import CLI from mininet.log import setLogLevel, info from mininet.link import TCLink, Intf from subprocess import call def myNetwork(): net = Mininet( topo=None, build=False, ipBase='10.0.0.0/8') info( '*** Adding controller\n' ) c0=net.addController(name='c0', controller=Controller, protocol='tcp', port=6633) info( '*** Add switches\n') s2 = net.addSwitch('s2', cls=OVSKernelSwitch) s1 = net.addSwitch('s1', cls=OVSKernelSwitch) info( '*** Add hosts\n') h2 = net.addHost('h2', cls=Host, ip='10.0.0.2', defaultRoute=None) h1 = net.addHost('h1', cls=Host, ip='10.0.0.1', defaultRoute=None, cpu=0.5) h4 = net.addHost('h4', cls=Host, ip='10.0.0.4', defaultRoute=None) h3 = net.addHost('h3', cls=Host, ip='10.0.0.3', defaultRoute=None) info( '*** Add links\n') net.addLink(h1, s1, bw=10, delay='5ms', max_queue_size=1000, loss=50, use_htb=True) net.addLink(s1, h2) net.addLink(s1, s2) net.addLink(s2, h3) net.addLink(s2, h4) info( '*** Starting network\n') net.build() info( '*** Starting controllers\n') for controller in net.controllers: controller.start() info( '*** Starting switches\n') net.get('s2').start([c0]) net.get('s1').start([c0]) info( '*** Post configure switches and hosts\n') CLI(net) net.stop() if __name__ == '__main__': setLogLevel( 'info' ) myNetwork()运行结果:
![]()
进阶要求
代码:
# 032002227_fattree.py
from mininet.topo import Topo
class MyTopo(Topo):
def __init__(self):
Topo.__init__(self)
#hosts
hosts=[]
for i in range(16):
h =self.addHost('h'+str(i+1))
hosts.append(h)
#switchs
switchs=[]
for i in range(14):
s =self.addSwitch('s'+str(i+1))
switchs.append(s)
#links
#switch to switch
for i in range(0,2):
for j in range(2,6):
self.addLink(switchs[i],switchs[j])
for i in range(2,4):
for j in range(6,10):
self.addLink(switchs[i],switchs[j])
for i in range(4,6):
for j in range(10,14):
self.addLink(switchs[i],switchs[j])
#switch to host
for i in range(8):
self.addLink(switchs[i+6],hosts[2*i])
self.addLink(switchs[i+6],hosts[2*i+1])
topos = {'mytopo': (lambda: MyTopo())}
运行结果:


个人总结
- 实验难度
还可以,没有特别困难但也没有特别简单,也会碰到一点点的问题,帮助我了解了拓扑结构的内容,但是没有每一步都看不懂的感觉,对于进阶要求只要模仿上面的py文件写几个循环即可。 - 实验过程遇到的困难及解决办法
- 基本要求的第二步中根据交互界面管理SDN拓扑的Mininet CLI的交互式API,然后
py net.addHost('h4')后py net.addLink(h4, s1, 1, 4)后pingall得到的拓扑丢包率为50%,并且ping不通h4(虽然links是对的)。然后根据一些资料和同学讨论,得出可能h4并没有分配到ip地址,于是我尝试用py s1.attach('s1-eth4')和py h4.setIP()就可以pingall了
- 基本要求的第二步中根据交互界面管理SDN拓扑的Mininet CLI的交互式API,然后
- 个人感想
本次实验总的来说还是学到了点知识,但是对SDN的知识还不是很了解和熟悉,不过根据实验的PDF介绍和一步一步跟进,还是多多少少学会了mininet的一系列工具生成拓扑。





浙公网安备 33010602011771号