实验1:SDN拓扑实践
1.

2.
a)

b)

3.

4.
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')
s1 = net.addSwitch('s1', cls=OVSKernelSwitch)
s2 = net.addSwitch('s2', cls=OVSKernelSwitch)
info( '*** Add hosts\n')
h1 = net.addHost('h1', cpu=0.5, cls=Host, ip='10.0.0.1', defaultRoute=None)
h2 = net.addHost('h2', cls=Host, ip='10.0.0.2', defaultRoute=None)
h3 = net.addHost('h3', cls=Host, ip='10.0.0.3', defaultRoute=None)
h4 = net.addHost('h4', cls=Host, ip='10.0.0.4', 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(h2, s1)
net.addLink(s1, s2)
net.addLink(s2, h4)
net.addLink(s2, h3)
info( '*** Starting network\n')
net.build()
info( '*** Starting controllers\n')
for controller in net.controllers:
controller.start()
info( '*** Starting switches\n')
net.get('s1').start([c0])
net.get('s2').start([c0])
info( '*** Post configure switches and hosts\n')
CLI(net)
net.stop()
if __name__ == '__main__':
setLogLevel( 'info' )
myNetwork()

进阶
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
c = []
a = []
e = []
for i in range( L1 ):
sw = self.addSwitch( 's{}'.format( i + 1 ) )
c.append( sw )
for i in range( L2 ):
sw = self.addSwitch( 's{}'.format( L1 + i + 1 ) )
a.append( sw )
for i in range( L3 ):
sw = self.addSwitch( 's{}'.format( L1 + L2 + i + 1 ) )
e.append( sw )
for i in range( L1 ):
sw1 = c[i]
for sw2 in a[i//2::L1//2]:
self.addLink( sw2, sw1 )
for i in range( 0, L2, 2 ):
for sw1 in a[i:i+2]:
for sw2 in e[i*2:i*2+4]:
self.addLink( sw2, sw1 )
#add hosts and its links with edge ovs
count = 1
for sw1 in e:
for i in range(2):
host = self.addHost( 'h{}'.format( count ) )
self.addLink( sw1, host )
count += 1
topos = { 'mytopo': ( lambda: MyTopo() ) }

实验总结:
心得体会:本次实验帮助我了解了虚拟机的一些基本操作,同时学会使用Mininet创建简单拓扑结构,在实验过程中出现了不少的问题,有一些是关于linux的操作问题,比如如何删除多余的文件等,不过这些问题通过搜索还是容易解决的,还有一些是关于结果出现偏差的问题,比如运行得不到结果,丢包率高等,这些问题需要回到原理以及Mininet命令上解决,虽然本次实验中还有许多不太理解的地方,但我相信能通过后续的学习进一步的深化自己的认识。
题目3.无法将新建的主机与交换机进行ping并且有50%的丢包率,解决方法 py s1.attach('s1-eth4'),py h4.setIP('10.0.0.4')
python格式问题:全用空格或全用 Tab

浙公网安备 33010602011771号