实验2:Open vSwitch虚拟交换机实践
1.基础要求
a) /home/用户名/学号/lab2/目录下执行ovs-vsctl show命令截图
p0和p1连通性测试的执行结果截图
b) /home/用户名/学号/lab2/目录下开启Mininet CLI并执行pingall命令的截图
上述目录下查看OVS流表的命令结果截图
wireshark抓包截图
2.进阶要求
#!/usr/bin/python
from mininet.node import CPULimitedHost, Host, Node
from mininet.node import OVSKernelSwitch, UserSwitch
from mininet.net import Mininet
from mininet.node import Controller, RemoteController, OVSController
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 myNet():
net = Mininet( topo=None,
build=False,
ipBase='10.0.0.0/8')
info( '*** Adding controller\n' )
c0=net.addController(name='c0',
controller=Controller,
ip='127.0.0.1',
protocol='OpenFlow13',
port=6653)
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 switches\n')
s1 = net.addSwitch('s1', cls=OVSKernelSwitch)
s2 = net.addSwitch('s2', cls=OVSKernelSwitch)
info( '*** Add links\n')
net.addLink(h1, s1, 1, 1)
net.addLink(h2, s1, 1, 2)
net.addLink(h3, s2, 1, 1)
net.addLink(h4, s2, 1, 2)
net.addLink(s1, s2, 3, 3)
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')
info( "*** Running test\n" )
h1.cmdPrint( 'ping -c 3 ' + h4.IP() )
h1.cmdPrint( 'ping -c 3 ' + h3.IP() )
h2.cmdPrint( 'ping -c 3 ' + h4.IP() )
h2.cmdPrint( 'ping -c 3 ' + h3.IP() )
h3.cmdPrint( 'ping -c 3 ' + h2.IP() )
h3.cmdPrint( 'ping -c 3 ' + h1.IP() )
h4.cmdPrint( 'ping -c 3 ' + h2.IP() )
h4.cmdPrint( 'ping -c 3 ' + h1.IP() )
CLI(net)
net.stop()
if __name__ == '__main__':
setLogLevel( 'info' )
info( '*** Scratch network demo (kernel datapath)\n' )
Mininet.init()
myNet()
3.个人总结
a)实验感想
本次实验的基础要求部分,按照老师给的pdf完成问题不大。其中有遇到一些小问题在网络上也没有找到答案,通过反复尝试反复试错最后才意识到出错点。实验中涉及到了路由交换课中所学到的知识,还学会了在ubuntu中用wireshark进行抓包分析报文。通过实验掌握了对 Open vSwitch 的基本操作,并且能够通过命令行终端用OVS 命令操作Open vSwitch交换机以及管理下发流表。在进阶要求部分,对参考资料的python代码进行了初步理解,学会了直接在python脚本中去验证实验的结果。个人感觉在实验过程中还是要多注意细节,例如:命令单词输错、python脚本缩进、及时删除之前的拓扑等等。
b)实验过程中问题及解决办法
- 不能创建新的网络
解决方法:用sudo mn -c来清除网络 - 在进行下发流表配置的时候出现问题
解决方法:要保持网络的存在即mininet的CLI界面不能关闭或者退出。再重新开启一个命令终端进行下发流表的配置。 - 配置下发流表命令
- wireshark抓包软件的使用