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

(一)基本要求

a) /home/用户名/学号/lab2/目录下执行ovs-vsctl show命令、以及p0和p1连通性测试的执行结果截图;


b) /home/用户名/学号/lab2/目录下开启Mininet CLI并执行pingall命令的截图、上述目录下查看OVS流表的命令结果截图,wireshark抓包截图,其余文字请勿赘述,否则扣分;



(二)进阶实验

实验代码:

#!/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])

    #添加流表,完成VLAN划分
    info("*** Send the flow table down\n\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( "*** 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("*** Running test\n")
    info( "\nh1 ping h3\n" )
    h1.cmdPrint('ping -c 3 ' + h3.IP())
    info( "\nh2 ping h4\n" )
    h2.cmdPrint('ping -c 3 ' + h4.IP())
    
    info( '*** Post configure switches and hosts\n')
    CLI(net)
    net.stop()

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

实验总结:

这一次实验整体做下来,感觉难度还不是很大。不过需要注意到的细节倒是有不少,比如在一开始创建交换机时,p1的代码就不能完全照p2的,ip地址、端口号等细节需要根据具体要求进行修改。但我在第一次做时,或许是因为自己急功近利的缘故,并没有将这些细节全部都注意到,导致了我错误连连。在仔细阅读实验文档后,才注意到这些细节。这件事让我明白了“心急吃不了热豆腐”、“磨刀不误砍柴工”,在做实验前,应当仔细的浏览一遍实验要求,不仅是实验,在生活中做事也应当如此。
还有遇到的困难就是,对于wireshark的使用陌生,一开始怎么也抓取不到,后来在上网查找资料后才知道,原来程序运行时,在新的端口输入 sudo wireshark 指令才有效果。
posted @   吃鱼会聪明  阅读(58)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示