实验2:Open vSwitch虚拟交换机实践

基础作业

a) 执行 ovs-vsctl show 命令、测试 p0 和 p1 的连通性

执行ovs-vsctl show命令
image
p0和p1连通性测试的执行结果
image

b)开启 Mininet CLI 并执行 pingall、查看 OVS 流表的命令、wireshark 抓包

开启 Mininet CLI
image
执行 pingall
image
查看 OVS 流表
image

image

wireshark 抓包
image

image

进阶作业

代码部分

#!/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.1/24'
		)

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/24', defaultRoute=None)
h2 = net.addHost('h2', cls=Host, ip='10.0.0.2/24', defaultRoute=None)
h3 = net.addHost('h3', cls=Host, ip='10.0.0.3/24', defaultRoute=None)
h4 = net.addHost('h4', cls=Host, ip='10.0.0.4/24', defaultRoute=None)

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

s1.cmd('sudo 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('sudo 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('sudo ovs-ofctl -O OpenFlow13 add-flow s1 priority=1,dl_vlan=0,actions=pop_vlan,output:1')
s1.cmd('sudo ovs-ofctl -O OpenFlow13 add-flow s1 priority=1,dl_vlan=1,actions=pop_vlan,output:2')

s2.cmd('sudo 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('sudo 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('sudo ovs-ofctl -O OpenFlow13 add-flow s2 priority=1,dl_vlan=0,actions=pop_vlan,output:1')
s2.cmd('sudo ovs-ofctl -O OpenFlow13 add-flow s2 priority=1,dl_vlan=1,actions=pop_vlan,output:2')

CLI(net)
net.stop()

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

执行结果
image
image

实验总结

本次实验对我来说总体还比较轻松,需要较为熟练地能够运用python来实现拓扑结构。实验过程中比较费时的是代码输入,稍有不慎就会出错,严重的时候甚至需要sudo mn -c重开,所以对自身的细致要求还是比较高的。同时重新认识了在计算机网络中曾学过的知识VLAN,并通过Open vSwitch进行分割广播域、下发流表的模拟,本次实验过程步骤相对明确,流程相对简单。实验难点个人认为在于对ovs命令的认识和理解以及实验操作过程中的细致耐心。通过本次实验,对网络管理有了相对直观的接触,但对理论知识的掌握仍需进一步巩固和加深。

posted @   codesheepXK  阅读(59)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
点击右上角即可分享
微信分享提示