实验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文件写几个循环即可。
  • 实验过程遇到的困难及解决办法
    1. 基本要求的第二步中根据交互界面管理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的知识还不是很了解和熟悉,不过根据实验的PDF介绍和一步一步跟进,还是多多少少学会了mininet的一系列工具生成拓扑。
posted @ 2022-09-13 19:30  Champion_Wang  阅读(58)  评论(0)    收藏  举报