实验2:Open vSwitch虚拟交换机实践
1.创建OVS交换机
a)执行ovs-vsctl show命令
b)p0和p1连通性测试
2.使用Mininet搭建SDN拓扑
a)开启Mininet CLI并执行pingall,查看流表,抓包
3.进阶任务
#!/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()
个人总结
在做这个实验的时候第一次卡的地方在是因为地址原因,因为固定完子网掩码后,两个ip地址不在同一个域,导致网络不可达的错误,无法ping通,后面发现了这个问题及时解决。
第二个是在mininet拓扑的时候卡住了,因为无法使用custom,一直出现bug,后面上csdn搜索才知道是因为命名不一致导致无法进行该指令的执行,后也是成功解决了这项问题
第三个问题是在下发流表的时候,下发完毕之后进行pingall,执行后,将该终端关闭后,再进行pingall,无法得到一样的结果,后面也是成功理解
第四个问题也是之前的问题,但是又给忘记了,那就是在执行一个实验之后忘记了 sudo mn -c的命令
第五个问题是在由于没有看到sdn指导书后面,所以一直不清楚要如何抓包,后面在询问同学之后终于清楚抓包指令,也算是成功完成了这项实验。