您当前的位置:首页 > 电脑百科 > 网络技术 > 网络设置

Open vSwitch虚拟交换机实践

时间:2023-01-16 14:25:55  来源:今日头条  作者:后端开发进阶

实验目的

  1. 能够对Open vSwitch进行基本操作
  2. 能够通过命令行终端使用OVS命令操作Open vSwitch交换机,管理流表
  3. 能够通过Min.NETPython/ target=_blank class=infotextkey>Python代码运行OVS命令,控制网络拓扑中的Open vSwitch交换机
(一)基本实验实验1 创建OVS交换机
  1. 创建OVS交换机
  2. 为OVS交换机配置p0端口
  3. 创建虚拟空间ns0,将p0移入虚拟网络空间ns0,并配置IP
  4. 为OVS交换机配置p1端口

 


 

 

  1. 创建虚拟空间ns1,将p0移入虚拟网络空间ns1,并配置IP
  2. 测试联通性

 


 

成功ping通

实验2 Mininet下发流表1. 自定义拓扑


 


 

运行拓扑


 

2. 划分VLAN

需求: VLAN划分:


 

联通性要求: h1-h3 h2-h4,其余不通

为s1配置流表项:


 

查看下发的流表项:


 

这四条命令原理: 1、2条命令:

 

  • 首先对输入端口进行匹配,如果输入端口为1(即为h1),执行action:将h1设置为vlan0虚拟局域网的主机,并将数据包向3号端口转发 如果输入端口为3(即为h3),执行action:将h2设置为vlan1虚拟局域网的主机,并将数据包向3号端口转发 3、4条命令: 这两条命令处理接受到的数据包,匹配域:Vlan标签 如果Vlan号属于0,(h3属于Vlan0),则将数据包往1号端口发,也就是发给主机h1,从而实现h1和h3之间的通信;第四条同理,不再赘述

 

为s2配置流表项: 原理与s1配置类似

 

  • 从1号或2号端口输入的数据包,则配上Vlan标签,1号端口输入的配上Vlan0(和h1在同一虚拟局域网),并向3号端口转发
  • 2号端口输入的配上Vlan1标签(和h2在同一局域网),并向3号端口转发
  • 从3号段口输入的数据包已经打过Vlan标记,对Vlan标记进行匹配,若为0则为发送给h3的数据包,若为1则为发送给h4的数据包
验证结果

 


 

符合h1和h3联通,h2和h4联通,其余不连通要求。

wireshark验证:


 

(二)进阶实验

要求:利用Python代码实现VlAN划分

 

  1. 分配ip 由于虚拟实现h1和h3在同一局域网,因此分配ip如下
  2. code 编写topo.py文件并运行
#!/usr/bin/python from mininet.net import Mininet from mininet.node import Node from mininet.link import Link from mininet.log import setLogLevel, info def myNet(): "Create network from scratch using Open vSwitch." info( "*** Creating nodesn" ) switch1 = Node( 's1', inNamespace=False ) switch2 = Node( 's2', inNamespace=False ) h1 = Node( 'h1' ) h2 = Node( 'h2' ) h3 = Node( 'h3' ) h4 = Node( 'h4' ) info( "*** Creating linksn" ) Link( h1, switch1) Link( h2, switch1) Link( h3, switch2) Link( h4, switch2) Link( switch1, switch2) info( "*** Configuring hostsn" ) h1.setIP( '192.168.123.1/24' ) h2.setIP( '192.168.124.1/24' ) h3.setIP( '192.168.123.2/24' ) h4.setIP( '192.168.124.2/24' ) info( "*** Starting network using Open vSwitchn" ) switch1.cmd( 'ovs-vsctl del-br dp0' ) switch1.cmd( 'ovs-vsctl add-br dp0' ) switch2.cmd( 'ovs-vsctl del-br dp1' ) switch2.cmd( 'ovs-vsctl add-br dp1' ) for intf in switch1.intfs.values(): print (intf) print (switch1.cmd( 'ovs-vsctl add-port dp0 %s' % intf )) for intf in switch2.intfs.values(): print (intf) print (switch2.cmd( 'ovs-vsctl add-port dp1 %s' % intf )) print (switch1.cmd(r'ovs-vsctl show')) print (switch1.cmd(r'ovs-ofctl -O OpenFlow13 add-flow dp0 priority=1,in_port=1,actions=push_vlan:0x8100,set_field:4096->vlan_vid,output:3')) print (switch1.cmd(r'ovs-ofctl -O OpenFlow13 add-flow dp0 priority=1,in_port=2,actions=push_vlan:0x8100,set_field:4097->vlan_vid,output:3')) print (switch1.cmd(r'ovs-ofctl -O OpenFlow13 add-flow dp0 priority=1,dl_vlan=0,actions=pop_vlan,output:1')) print (switch1.cmd(r'ovs-ofctl -O OpenFlow13 add-flow dp0 priority=1,dl_vlan=1,actions=pop_vlan,output:2')) print (switch2.cmd(r'ovs-ofctl -O OpenFlow13 add-flow dp1 priority=1,in_port=1,actions=push_vlan:0x8100,set_field:4096->vlan_vid,output:3')) print (switch2.cmd(r'ovs-ofctl -O OpenFlow13 add-flow dp1 priority=1,in_port=2,actions=push_vlan:0x8100,set_field:4097->vlan_vid,output:3')) print (switch2.cmd(r'ovs-ofctl -O OpenFlow13 add-flow dp1 priority=1,dl_vlan=0,actions=pop_vlan,output:1')) print (switch2.cmd(r'ovs-ofctl -O OpenFlow13 add-flow dp1 priority=1,dl_vlan=1,actions=pop_vlan,output:2')) #switch0.cmd('tcpdump -i s0-eth0 -U -w aaa &') #h0.cmd('tcpdump -i h0-eth0 -U -w aaa &') info( "*** Running testn" ) h1.cmdPrint( 'ping -c 3 ' + h3.IP() ) h2.cmdPrint( 'ping -c 3 ' + h4.IP() ) h1.cmdPrint( 'ping -c 3 ' + h4.IP() ) h2.cmdPrint( 'ping -c 3 ' + h3.IP() ) #print switch0.cmd( 'ovs-ofctl show dp0' ) #print switch0.cmd( 'ovs-ofctl dump-tables dp0' ) #print switch0.cmd( 'ovs-ofctl dump-ports dp0' ) #print switch0.cmd( 'ovs-ofctl dump-flows dp0' ) #print switch0.cmd( 'ovs-ofctl dump-aggregate dp0' ) #print switch0.cmd( 'ovs-ofctl queue-stats dp0' ) info( "*** Stopping networkn" ) switch1.cmd( 'ovs-vsctl del-br dp0' ) switch1.deleteIntfs() switch2.cmd( 'ovs-vsctl del-br dp1' ) switch2.deleteIntfs() info( 'n' ) if __name__ == '__mAIn__': setLogLevel( 'info' ) info( '*** Scratch network demo (kernel datapath)n' ) Mininet.init() myNet()

 


 

 

  1. 验证结果 验证1:直接在python脚本中验证 结果:

 

结果符合要求 验证2:通过wireshark验证


 


 

成功打上Vlan标签

 

  1. 错误总结
  • 忘记为两台交换机设置连接,导致ping不通,太蠢了TAT
总结实验总结

 

1)此次实验我学习了如何使用OvS命令让数据包打上Vlan标签,并学习了如何使用控制行实现流表下发。 2)通过进阶实验,我学习了如何使用python文件实现流表下发,并能在python文件中进行测试。编写python文件的过程中遇到不少bug,但通过不断尝试最终进行了解决,提升了我的问题解决能力及创新能力。

附:知识总结

实验原理:用VLAN技术可以设计广播域构成,交换机收到广播帧后,从而防止广播风暴

命令总结

创建ovs交换机过程

 

  1. 自动创建类型为internal的ovs-switch000网桥
sudo ovs-vsctl add-port ovs-switch000 p0

 

(通过ovs-vsctl show解决报错) 2. 查询p0网口相关信息

sudo ethtool -i p0

  1. 创建虚拟网络空间ns0,把p0接口移入ns0,并配置IP
sudo ip netns add ns0 sudo ip link set p0 netns ns0 sudo ip netns exec ns0 ip addr add 192.168.1.100/24 dev p0 sudo ip netns exec ns0 ifconfig p0 promisc up
  1. 测试
sudo ip netns exec ns0 ping 192.168.1.101
  1. OVS命令
sudo ovs-ofctl show ovs-switch000
  1. OVS下发流表命令
sudo ovs-ofctl -O OpenFlow13 add-flow s1 priority=1,in_port=1,actions=push_vlan:0x8100,set_field:4096->vlan_vid,output:3 sudo ovs-ofctl -O OpenFlow13 add-flow s1 priority=1,in_port=2,actions=push_vlan:0x8100,set_field:4097->vlan_vid,output:3 sudo ovs-ofctl -O OpenFlow13 add-flow s1 priority=1,dl_vlan=0,actions=pop_vlan,output:1 sudo ovs-ofctl -O OpenFlow13 add-flow s1 priority=1,dl_vlan=1,actions=pop_vlan,output:2

 

查看流表项命令:

sudo ovs-ofctl -O OpenFlow13 dump-flows s1

原文链接:https://www.cnblogs.com/hhhf/p/16702352.html 原文作者:盒什么饭



Tags:虚拟交换机   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
你知道什么是虚拟交换机和虚拟路由器吗?
虚拟交换机和虚拟路由器是现代计算机网络中的两个重要概念之一,它们是虚拟化技术的一种应用,旨在提高网络的灵活性和可扩展性。虚拟化技术可以将物理资源划分为虚拟资源,以提高...【详细内容】
2023-08-24  Search: 虚拟交换机  点击:(220)  评论:(0)  加入收藏
Open vSwitch虚拟交换机实践
实验目的 能够对Open vSwitch进行基本操作 能够通过命令行终端使用OVS命令操作Open vSwitch交换机,管理流表 能够通过Mininet的Python代码运行OVS命令,控制网络拓扑中的Open v...【详细内容】
2023-01-16  Search: 虚拟交换机  点击:(284)  评论:(0)  加入收藏
网口不够用?一招教你将 NAS 变身虚拟交换机
如果接触过威联通的 NAS 就会发现,许多型号都是双网口,甚至四网口的机型。网口一多,玩法就多了,再来几个我都是不嫌弃的,许多人第一时间就想到了软路由,的确 NAS 可以做软路由,不过...【详细内容】
2020-08-31  Search: 虚拟交换机  点击:(460)  评论:(0)  加入收藏
▌简易百科推荐
iPhone或iPad用户必学:如何通过二维码快速共享Wi-Fi密码,简单又实用!
你有没有想过在不泄露网络密码的情况下与客人共享你的家庭或工作Wi-Fi?你肯定不是第一个这样想的人,我们很高兴地通知你,多亏了以下这个的变通方法,你现在可以使用iPhone或iPad...【详细内容】
2024-01-22  驾驭信息纵横科技    Tags:Wi-Fi密码   点击:(71)  评论:(0)  加入收藏
Windows 11网络连接问题诊断与解决小技巧,轻松解决上网问题!
在日常生活中,如果在连接网络时遇到问题,该如何排查解决?以下是一些故障排除步骤,可帮助你解决戴尔电脑上的无线网络连接问题。一起来看看吧!1、进行基本检查先进行一些基本检查...【详细内容】
2024-01-12  戴尔维修工程师    Tags:   点击:(59)  评论:(0)  加入收藏
配置Cisco AnyConnect VPN的5个步骤,缺一不可
随着越来越多的人远程工作或在混合环境中工作,IT部门和MSP在ASA防火墙上配置Cisco AnyConnect VPN的呼声越来越高。但是Cisco文档可能会非常混乱,这会导致一些组织的配置错误(...【详细内容】
2023-11-14  驾驭信息纵横科技    Tags:VPN   点击:(96)  评论:(0)  加入收藏
如何在Windows 10系统上设置DNS?
如果你正在使用Windows10操作系统,并且想要更好地控制你的网络服务,那么了解如何设置DNS(DomainNameSystem)是非常重要的。DNS是一种将域名解析为IP地址的服务,它能够让你在访问...【详细内容】
2023-11-10  高梦文    Tags:DNS   点击:(194)  评论:(0)  加入收藏
RabbitMQ发送和接收消息的几种方式
channel.basicQos(0, 1, false):0表示对消息的大小无限制,1表示每次只允许消费一条,false表示该限制不作用于channel。同时,我们采用手工ACK的方式,因为我们配置文件配置了 spri...【详细内容】
2023-11-08  程序猿羊  微信公众号  Tags:RabbitMQ   点击:(264)  评论:(0)  加入收藏
CISA发布十大常见网络安全错误配置
美国国家安全局(NSA)和网络安全与基础设施安全局(CISA)在本周五的报告中公布了其红队和蓝队在大型组织网络中发现的十大最常见网络安全误配置。NSA和CISA在安全建议中详细说...【详细内容】
2023-11-07  GoUpSec  微信公众号  Tags:CISA   点击:(261)  评论:(0)  加入收藏
Istio Envoy 配置解读,看这篇就够了
前面我们创建了一个 Gateway 和 VirtualService 对象,用来对外暴露应用,然后我们就可以通过 ingressgateway 来访问 Bookinfo 应用了。那么这两个资源对象是如何实现的呢?Gatew...【详细内容】
2023-11-07  k8s技术圈  微信公众号  Tags:Istio Envoy   点击:(128)  评论:(0)  加入收藏
RabbitMQ的四种交换机详解
交换机主要是接收消息并且转发到绑定的队列,交换机不存储消息,在启用ack模式后,交换机找不到队列会返回错误。交换机有四种类型:Direct, topic, Headers and Fanout。图片一、to...【详细内容】
2023-11-06  程序猿小杨  微信公众号  Tags:交换机   点击:(267)  评论:(0)  加入收藏
路由器配置NAT/UPNP/DMZ方法
常见路由器配置NAT(网络地址转换)、UPnP(通用即插即用)和DMZ(区域暴露)的方法可以根据不同的路由器品牌和型号有所不同,但通常会在路由器的管理界面中找到相关设置。以下是一般步骤...【详细内容】
2023-10-11  晴间多云  今日头条  Tags:路由器配置   点击:(418)  评论:(0)  加入收藏
路由器如何正确安装?后台设置一步即可接入宽带
现在的路由器不论安装还是后台设置都非常方便,但一些网友可能是没有详细了解过相关的知识,所以每次想要更换路由器或者新装路由器的时候并不知道如何安装路由器接入自家宽带,这...【详细内容】
2023-09-21  羽度非凡    Tags:路由器   点击:(303)  评论:(0)  加入收藏
站内最新
站内热门
站内头条