2-3多交换机静态流表控制原理与实现

实现目标环境下的静态流表设置:
1 单个ovs上实现多个主机hosts之间的通信
2多ovs上多主机之间的通信

1 单个ovs上实现多个主机hosts之间的通信
使用函数定义的方式创建一个如下的拓扑,并使用静态流表
在这里插入图片描述

from mininet.net import Mininet
from mininet.node import OVSSwitch, Host
from mininet.cli import CLI
from mininet.link import Link
import networkx as nx
import matplotlib.pyplot as plt

def create_network():
    net = Mininet()
        # 创建单个OVS交换机
    switch1 = net.addSwitch('s1', cls=OVSSwitch)
    
    
    # 创建2个主机
    host1 = net.addHost('h1', cls=Host, ip='192.168.0.1/24', defaultRoute='via 192.168.0.254')
    host2 = net.addHost('h2', cls=Host, ip='192.168.0.2/24', defaultRoute='via 192.168.0.254')
   
    
    # 连接主机到交换机
    net.addLink(host1, switch1)
    net.addLink(host2, switch1)
      
        
    # 启动网络
    net.start()
      
    
    # 在OVS交换机上添加静态流表
    switch1.cmd('ovs-ofctl add-flow s1 in_port=1,actions=output:2')
    switch1.cmd('ovs-ofctl add-flow s1 in_port=2,actions=output:1')
    
    
    # 构建拓扑图
    G = nx.DiGraph()
    for switch in net.switches:
        G.add_node(switch.name)
    for host in net.hosts:
        G.add_node(host.name)
    for link in net.links:
        G.add_edge(link.intf1.node.name, link.intf2.node.name)
    
    # 保存拓扑图
    nx.draw(G, with_labels=True, node_size=1000, node_color='lightblue', font_weight='bold')
    plt.savefig('topology1.png')
    
    plt.show() # 显示网络拓扑
    
    # 打开命令行界面
    CLI(net)
    
    # 关闭网络
    net.stop()

if __name__ == '__main__':
    create_network()

运行以及测试``在这里插入图片描述
2多ovs上多主机之间的通信
使用2_3_1.py代码修改成如下图2的拓扑结构
代码:

from mininet.net import Mininet
from mininet.node import OVSSwitch, Host
from mininet.cli import CLI
from mininet.link import Link
import networkx as nx
import matplotlib.pyplot as plt

def create_network():
 net = Mininet()
     # 创建单个OVS交换机
 switch1 = net.addSwitch('s1', cls=OVSSwitch)
 switch2 = net.addSwitch('s2', cls=OVSSwitch)
 
 
 # 创建2个主机
 host1 = net.addHost('h1', cls=Host, ip='192.168.0.1/24', defaultRoute='via 192.168.0.254')
 host2 = net.addHost('h2', cls=Host, ip='192.168.0.2/24', defaultRoute='via 192.168.0.254')
 host3 = net.addHost('h3', cls=Host, ip='192.168.0.3/24', defaultRoute='via 192.168.0.254')
 host4 = net.addHost('h4', cls=Host, ip='192.168.0.4/24', defaultRoute='via 192.168.0.254')


 
 # 连接主机到交换机
 net.addLink(host1, switch1)
 net.addLink(host2, switch1)
 net.addLink(host3, switch2)
 net.addLink(host4, switch2)
#交换机连接交换机
 net.addLink(switch1, switch2)

   
     
 # 启动网络
 net.start()
   
 
 # 在OVS交换机上添加静态流表
 switch1.cmd('ovs-ofctl add-flow s1 in_port=1,actions=output:2,3')
 switch1.cmd('ovs-ofctl add-flow s1 in_port=2,actions=output:1,3')
 switch1.cmd('ovs-ofctl add-flow s1 in_port=3,actions=output:1,2')
 switch2.cmd('ovs-ofctl add-flow s2 in_port=1,actions=output:2,3')
 switch2.cmd('ovs-ofctl add-flow s2 in_port=2,actions=output:1,3')
 switch2.cmd('ovs-ofctl add-flow s2 in_port=3,actions=output:1,2')
 
 # 构建拓扑图
 G = nx.DiGraph()
 for switch in net.switches:
     G.add_node(switch.name)
 for host in net.hosts:
     G.add_node(host.name)
 for link in net.links:
     G.add_edge(link.intf1.node.name, link.intf2.node.name)
 
 # 保存拓扑图
 nx.draw(G, with_labels=True, node_size=1000, node_color='lightblue', font_weight='bold')
 plt.savefig('topology1.png')
 
 plt.show() # 显示网络拓扑
 
 # 打开命令行界面
 CLI(net)
 
 # 关闭网络
 net.stop()

if __name__ == '__main__':
 create_network()

多个ovs时需要加入arp泛洪流允许
在交换机上允许arp广播流(请求和回复,跨交换机时如果arp包没有通过,一般每个ovs都需要来回)
s1.cmd(‘ovs-ofctl add-flow s1 table=0,priority=100,dl_type=0x0806,nw_proto=1,actions=flood’)
s1.cmd(‘ovs-ofctl add-flow s1 table=0,priority=100,dl_type=0x0806,nw_proto=2,actions=flood’)

在这里插入图片描述
使用静态流表优点是即使当前网络存在环路(假设给两个交换机之间增加一条链路,也不会产生广播风暴,流量的转发完全按照人为设定的流表转发。缺点是当节点增加时,流表配置工作量剧增。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/521456.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

智过网:非安全专业能否报考注安?哪些专业可以报考?

近年来,随着社会对安全生产管理的日益重视,注册安全工程师(简称注安)这一职业逐渐受到广大从业人员的青睐。然而,对于许多非安全专业的朋友来说,他们可能会困惑:非安全专业是否可以报考注安&…

【51单片机入门记录】RTC(实时时钟)-DS1302概述

目录 一、基于三线通信的RTC-DS1302 (1)简介 (2)特性 (3)引脚介绍 (4)控制字的格式 (5.0)日历时钟寄存器介绍 (5.1)日历时钟寄存…

配置vscode链接linux

1.安装 remote SSH 2.按F1 ssh ljh服务器公网ip 3. 选择保存远端host到本地 某位置 等待片刻后 4. 切换到远程资源管理器中 应该可以看到一台电脑,右键在当前窗口链接,输入你的服务器用户密码后电脑变绿说明远程连接成功 5.一定要登陆上云服务器后再…

“进击的巨人”:服务器硬件基础知识解析

引言: 服务器是网络环境中负责处理数据、运行应用程序和服务多用户的高性能计算机系统。了解服务器的硬件构成有助于更好地管理和优化IT资源。 服务器和普通PC的差异: 服务器具有比个人电脑更高的处理能力、稳定性和可靠性,它们通常运行在没…

Flutter开发进阶之错误信息

Flutter开发进阶之错误信息 在Flutter开发中错误信息通常是由Exception和Error表示,Error表示严重且不可恢复的错误,一般会导致程序直接终止,而Exception可以被显式抛出,一般为代码逻辑错误,根据Flutter的解释说Excep…

Vue3调试

如何对vue3项目进行调试 调试是开发过程中必备的一项技能,掌握了这项技能,可以很好的定义bug所在。一般在开发vue3项目时,有三种方式。 代码中添加debugger;使用浏览器调试:sourcemap需启用vs code 调试:先开启node服…

ARM、X86、RISC-V三分天下

引入: 简单的介绍一下X86、ARM、RISC-V三种cpu架构的区别和应用场景。 目录 简单概念讲解 1. X86架构 2. ARM架构 3. RISC-V架构 应用场景 X86、ARM和RISC-V是三种不同的CPU架构,它们在设计理念、指令集和应用场景上有一些区别。 简单概念讲解 1. X…

【Frida】【Android】 工具篇:ProxyPin抓包详解

🛫 系列文章导航 【Frida】【Android】01_手把手教你环境搭建 https://blog.csdn.net/kinghzking/article/details/136986950【Frida】【Android】02_JAVA层HOOK https://blog.csdn.net/kinghzking/article/details/137008446【Frida】【Android】03_RPC https://bl…

如何在nuxt中优雅使用swiper,实现过渡反向+贴合无缝+循环播放【核心代码分析】

视频效果 20240402-1723 图片效果 技术栈 Nuxt3 + Swiper11 Nuxt3 Nuxt: The Intuitive Vue Framework Nuxt Swiper11 Swiper - The Most Modern Mobile Touch Slider (swiperjs.com) 当然你也可以是使用nuxt-swiper Nuxt-Swiper GitHub - cpreston321/nuxt-swiper: Swi…

贪心算法|122.买卖股票的最佳时机II

力扣题目链接 class Solution { public:int maxProfit(vector<int>& prices) {int result 0;for (int i 1; i < prices.size(); i) {result max(prices[i] - prices[i - 1], 0);}return result;} }; 贪心思路出来了&#xff0c;代码居然如此简单啊&#xff0…

243.回文链表

给你一个单链表的头节点 head &#xff0c;请你判断该链表是否为 回文链表 。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,2,1] 输出&#xff1a;true示例 2&#xff1a; 输入&#xff1a;head …

Rust语言

Rust语言 一&#xff0c;Rust语言是什么 Rust 是一种系统级编程语言&#xff0c;由 Mozilla 开发。它的设计注重安全性、并发性和性能。Rust 最初发布于 2010 年&#xff0c;其目标是成为一种能够替代 C 和 C 的编程语言&#xff0c;同时提供更好的内存安全性和并发支持。 Rust…

篡改猴+idm实现不限速百度网盘下载

1. 去油猴官网下载个chrome拓展 https://www.tampermonkey.net 2. 下载idm插件 如何在Chrome浏览器中插入IDM扩展插件-IDM中文网站 下载完成后打开chrome浏览器的插件&#xff0c;直接拖进去 3. 在 Greasy Fork - 安全、实用的用户脚本大全 中搜索 百度网盘&#xff0c;切换…

瑞吉外卖实战学习--16、登录短信验证

登录短信验证 前言环境准备(根据mybatisPlus 规范实体类和接口)1、User实体类2、mapper文件3、service文件4、impl文件5、随机生成验证码的工具类6、发送验证码的工具类7、获取验证码和移动端登录前言 本项目gitee位置:gitee网址 本项目采用的技术是:springboot + mybatis…

使用 Copilot 重新定义Forms表单创建

您好&#xff0c;Microsoft 365 copilot订阅用户&#xff01;很高兴与大家分享&#xff0c;您现在可以在表单中利用 Copilot 更轻松地构建高质量且设计精良的调查、表单和民意调查。 使用 Copilot 重新定义表单创建 只需向 Copilot 描述您想要构建的表单&#xff0c;您就可以…

【数据结构】考研真题攻克与重点知识点剖析 - 第 4 篇:串

前言 本文基础知识部分来自于b站&#xff1a;分享笔记的好人儿的思维导图与王道考研课程&#xff0c;感谢大佬的开源精神&#xff0c;习题来自老师划的重点以及考研真题。此前我尝试了完全使用Python或是结合大语言模型对考研真题进行数据清洗与可视化分析&#xff0c;本人技术…

golang设计模式图解——命令模式

设计模式 GoF提出的设计模式有23个&#xff0c;包括&#xff1a; &#xff08;1&#xff09;创建型(Creational)模式&#xff1a;如何创建对象&#xff1b; &#xff08;2&#xff09;结构型(Structural )模式&#xff1a;如何实现类或对象的组合&#xff1b; &#xff08;3&a…

【Java网络编程】HTTP超文本传输协议

一、HTTP超文本传输协议 HTTP全称为Hyper Text Transfer Protocol超文本传输协议&#xff0c;它是基于TCP传输协议构建的应用层协议&#xff0c;作为支撑万维网www的核心协议&#xff0c;为了保证其效率及处理大量事务的能力&#xff0c;因此在设计时&#xff0c;HTTP被制定成为…

第四百四十四回

文章目录 1. 问题描述2. 优化方法2.1 缩小范围2.2 替代方法 3. 示例代码4. 内容总结 我们在上一章回中介绍了"如何获取AppBar的高度"相关的内容&#xff0c;本章回中将介绍关于MediaQuery的优化.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 问题描述 我们在…

7 个 iMessage 恢复应用程序/软件可轻松恢复文本

由于误操作、iOS 升级中断、越狱失败、设备损坏等原因&#xff0c;您可能会丢失 iPhone/iPad 上的 iMessages。意外删除很大程度上增加了这种可能性。更糟糕的是&#xff0c;这种情况经常发生在 iDevice 缺乏备份的情况下。 &#xff08;iPhone消息消失还占用空间&#xff1f;&…