实验2:Open vSwitch虚拟交换机实践
基础作业
a) 执行 ovs-vsctl show 命令、测试 p0 和 p1 的连通性
b)开启 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, ip='127.0.0.1', protocol='OpenFlow13', port=6653) info( '*** Add switches\n') s2 = net.addSwitch('s2', cls=OVSKernelSwitch) s1 = net.addSwitch('s1', 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) h4 = net.addHost('h4', cls=Host, ip='10.0.0.4', defaultRoute=None) h3 = net.addHost('h3', cls=Host, ip='10.0.0.3', defaultRoute=None) 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('s2').start([c0]) net.get('s1').start([c0]) info( '*** Post configure switches and hosts\n') # add flow table to switches and divide 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()
执行结果
个人总结
这次实验总体上难度不大,按部就班就基本上没什么问题,但更重要的是理解VLAN背后的技术。通过对广播域的切割来避免广播风暴,同时提高了网络设计的自由度。
通过本次实验,掌握了对 Open vSwitch 的基本操作,并且能够通过命令行终端使用 OVS 命令操作 Open vSwitch 交换机,管理流表,更进一步能够通过 Mininet 的Python 代码运行 OVS 命令,控制网络拓扑中的 Open vSwitch 交换机。
软件定义网络还有很多东西需要去实际操作,去实践,还有待进一步的学习。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
2021-09-19 在开始阅读英文文献之前