实验一实验二_102101616_许之烨

一. 实验一基本要求

102101616.py代码

#!/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')
    s1 = net.addSwitch('s1', cls=OVSKernelSwitch)
    s2 = net.addSwitch('s2', cls=OVSKernelSwitch)

    info( '*** Add hosts\n')
    h1 = net.addHost('h1', cls=Host, ip='10.0.0.1', defaultRoute=None,cpu=0.5)
    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(s1, s2)
    net.addLink(s2, h4)
    net.addLink(s2, h2)
    net.addLink(s1, 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()

Mininet运行结果

在这里插入图片描述

二. 实验一进阶要求

代码如下

#!/usr/bin/env python
from mininet.topo import Topo

class MyTopo(Topo):
	def __init__(self):

	# Initialize topology
		Topo.__init__(self)

	# addswitch
		switch=[]
		for i in range(1,15):
			self.addSwitch("s"+str(i))
			switch.append("s"+str(i))

	# addhost
		host=[]
		for i in range(1,17):
			self.addHost("h"+str(i))
			host.append("h"+str(i))

	# add links between core and aggregation ovs
		for i in range(1,3):
			for j in range(3,7):
				self.addLink("s"+str(i),"s"+str(j))

	# add links between aggregation and edge ovs
		for i in range(3,5):
			for j in range(7,11):
				self.addLink("s"+str(i),"s"+str(j))

		for i in range(5,7):
			for j in range(11,15):
				self.addLink("s"+str(i),"s"+str(j))

	#add hosts and its links with edge ovs
		for i in range(7,15):
			for j in range((i-6)*2-1,(i-6)*2+1):
				self.addLink("s"+str(i),"h"+str(j))

topos = {'mytopo': (lambda: MyTopo())}

Mininet运行结果

在这里插入图片描述

三. 实验二基本要求

Pingall命令截图

在这里插入图片描述

查看ovs流表命令

在这里插入图片描述
在这里插入图片描述

Wireshark抓包

在这里插入图片描述
在这里插入图片描述

四. 实验二进阶要求

Python代码如下

#!/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')
    s1 = net.addSwitch('s1', cls=OVSKernelSwitch)
    s2 = net.addSwitch('s2', cls=OVSKernelSwitch)

    info( '*** Add hosts\n')
    h1 = net.addHost('h1', 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, 1, 1)
    net.addLink(h2, s1, 1, 2)
    net.addLink(s1, s2, 3, 3)
    net.addLink(h4, s2, 1, 2)
    net.addLink(h3, s2, 1, 1)

    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("*** Send the flow table down\n\n")
    s1.cmd('ovs-ofctl -O OpenFlow13 add-flow s1 priority=1,in_port=1,actions=push_vlan:0x8100,set_field:4096-\>vlan_vid,output:3')
    s1.cmd('ovs-ofctl -O OpenFlow13 add-flow s1 priority=1,in_port=2,actions=push_vlan:0x8100,set_field:4097-\>vlan_vid,output:3')
    s1.cmd('ovs-ofctl -O OpenFlow13 add-flow s1 priority=1,dl_vlan=0,actions=pop_vlan,output=1')
    s1.cmd('ovs-ofctl -O OpenFlow13 add-flow s1 priority=1,dl_vlan=1,actions=pop_vlan,output=2')

    s2.cmd('ovs-ofctl -O OpenFlow13 add-flow s2 priority=1,in_port=1,actions=push_vlan:0x8100,set_field:4096-\>vlan_vid,output:3')
    s2.cmd('ovs-ofctl -O OpenFlow13 add-flow s2 priority=1,in_port=2,actions=push_vlan:0x8100,set_field:4097-\>vlan_vid,output:3')
    s2.cmd('ovs-ofctl -O OpenFlow13 add-flow s2 priority=1,dl_vlan=0,actions=pop_vlan,output=1')
    s2.cmd('ovs-ofctl -O OpenFlow13 add-flow s2 priority=1,dl_vlan=1,actions=pop_vlan,output=2')
    
    info("*** Running test\n")
    info( "\nh1 ping h2\n" )
    h1.cmdPrint('ping -c 3 ' + h2.IP())
    info( "\nh1 ping h3\n" )
    h1.cmdPrint('ping -c 3 ' + h3.IP())
    info( "\nh1 ping h4\n" )
    h1.cmdPrint('ping -c 3 ' + h4.IP())
    info( "\nh2 ping h3\n" )
    h2.cmdPrint('ping -c 3 ' + h3.IP())
    info( "\nh2 ping h4\n" )
    h2.cmdPrint('ping -c 3 ' + h4.IP())
    info( "\nh3 ping h4\n" )
    h3.cmdPrint('ping -c 3 ' + h4.IP())
    
    info( "*** print the streamtable\n" )
    info( s1.cmd( 'ovs-ofctl dump-flows s1 -O OpenFlow13' ))
    info( s2.cmd( 'ovs-ofctl dump-flows s2 -O OpenFlow13' ))
    
    info( '*** Post configure switches and hosts\n')
    CLI(net)
    net.stop()

if __name__ == '__main__':
    setLogLevel( 'info' )
    myNetwork()

Mininet运行结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

五.实验个人总结

通过学习Linux虚拟机,我进行了SDN拓扑实验和Open vSwitch虚拟交换机实验,这些实验给我带来了很多收获和感悟。
在实验0的配置过程中令我灰头土脸,在网络资料和老师同学的帮助下才得以上手配置,环境配置(真的复杂)对于我来讲已经是当头一棒。实验1中出现了python文件无法正常开启的情况,这是我从未经历过的,还好询问同学,解决了问题。
对于虚拟机的使用感受方面,虚拟机的搭建和配置相对简单,能够快速创建并运行多个虚拟操作系统。在实验中,我能够随时备份和还原虚拟机的状态,这为实验的重复进行提供了便利。同时,虚拟机的隔离性和安全性更好,可以避免操作系统和硬件的冲突。在实验难度评价方面,SDN拓扑实验和Open vSwitch虚拟交换机实验都具有一定的挑战性。首先,在SDN拓扑实验中,需要熟悉SDN概念和相关技术,了解拓扑的搭建和流表的配置。其次,在Open vSwitch虚拟交换机实验中,需要理解虚拟交换机的原理和功能,并且掌握配置和管理虚拟交换机的方法。
通过这些实验,我深刻认识到了虚拟机是一种强大的工具,可以帮助我们进行网络实验和研究,提高效率和灵活性。同时,也意识到了深入理解网络原理和SDN技术的重要性。总的来说,我还要想继续努力才行!!!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值