1./home/用户名/学号/lab2/目录下执行ovs-vsctl show命令、以及p0和p1连通性测试的执行结果截图;
ovs-vsctl show命令
![]()
ovs-ofctl show ovs命令
![]()
p0,p1连通性
![]()
2./home/用户名/学号/lab2/目录下开启Mininet CLI并执行pingall命令的截图、上述目录下查看OVS流表的命令结果截图,wireshark抓包截图
mininet
![]()
s1的ovs命令流表
![]()
s2的ovs命令流表
![]()
wireshark抓取
![]()
3.进阶代码
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)
#设置主机ip地址
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(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')
#调用cmd()添加流表和划分vlan
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()
运行结果
![]()
流表
![]()
wireshark
![]()
个人总结
- 本次实验总体来说难度不大,重点在于mininet的运用及Open vSwitch进行基本操作
- 实验首先进行ovs交换机的创建,并增加端口p0和p1.通过创建虚拟网络空间避免网络接口上的地址和本机已有网络地址冲突。在使用
sudo ovs-vsctl add-br ovs-name时要注意命名。其次使用mininet搭建sdn拓扑,生成py文件。再使用ovs-ofctl命令在,s1和s2上添加流表,划分vlan。进阶代码则是在py文件里使用cmd来添加流表从而达到相同的效果。
- 遇到的问题:
- 在使用miniedit生成拓扑时,没有设置端口号,造成错误。检测后在python文件中添加端口号即可。
- 使用wireshark抓取数据时,一开始不会选那个端口看,一直没有出现目标结果。反复尝试后明白了要在初始界面选择想要获取的接口。
- 在终端使用命令添加流表后,如果关闭mininet,再此启动,添加的流表会失效,需要再次再终端输入命令。