【Mininet】基础篇:开源控制器POX

news2024/11/28 14:05:47

大家好,我是文思月!

每文一言:时间不在于你拥有多少,而在于你如何使用!

本篇文章:

本篇文章主要是基于POX控制器进行的两个实验:一个是使交换机模拟hub(集线器)的功能,一个是让交换机实现L2自学习。POX是一个SDN控制器,编程语言是python。

在开始之前,首先需要在ubuntu中安装POX,安装POX参考如下教程:

https://blog.csdn.net/langzi_a/article/details/104730264

正文如下:

实验一:交换机模拟hub的功能

第一步:启动POX,运行hub.py文件

./pox.py log.level --DEBUG forwarding.hub

第二步:使用Mininet创建如下网络拓扑,OpenFlow协议为1.0,控制器使用本地部署的POX(默认监听6633端口):

在这里插入图片描述

sudo -E mn --topo=single,3 --mac --controller=remote,ip=127.0.0.1,port=6633 --switch ovsk,protocols=OpenFlow10

第三步:在Mininet命令行模式下打开h2,h3主机终端

xterm h2 h3

第四步:在h2主机终端输入:

tcpdump -nn -i h2-eth0

第五步:在h3主机终端输入:

tcpdump -nn -i h3-eth0

在这里插入图片描述

第六步:在Mininet命令行输入:

h1 ping h2

h2和h3可以同时收到数据包

在这里插入图片描述

第七步:在Mininet命令行输入:

h1 ping h3

h2和h3可以同时收到数据包

在这里插入图片描述

运行hub.py使得创建的交换机上都安装了泛洪规则,交换机收到数据包后,会将数据包进行泛洪,此时交换机相当于是集线器。所以,在ping某个主机的时候,其他主机也会收到数据包。

实验二:L2学习交换机的功能

1)使用源地址和交换机端口去更新地址/端口表

2)包的transparent=false,并且以太网类型是LLDP,或者包的目的地址是一个网桥过滤地址的时候?

  • 2a)yes:丢弃这个包,不要转发这个当前链路上的数据流

3)包的目的地址是否是多播地址?

  • 3a)yes:泛洪这个包

4)数据包的目的地址是否在我们的地址/端口表中?

  • 4a)No:泛洪这个包

5)包的输出端口是否和输入端口相同?

  • 5a)yes:丢弃这个包和之后相似的数据包

6)在交换机中安装流表项,使得这些数据流可以从相应的端口出去

  • 6a)发送数据包到相应的端口

L2_learning.py代码的程序流程图:

在这里插入图片描述

第一步:启动POX,运行l2_learning.py文件

./pox.py log.level --DEBUG forwarding.l2_learning

第二步:使用Mininet创建如下网络拓扑,OpenFlow协议为1.0,控制器使用本地部署的POX(默认监听6633端口):

在这里插入图片描述

sudo -E mn --topo=single,3 --mac --controller=remote,ip=127.0.0.1,port=6633 --switch ovsk,protocols=OpenFlow10

第三步:在Mininet命令行模式下打开h2,h3主机终端

xterm h2 h3

第四步:在h2主机终端输入:

tcpdump -nn -i h2-eth0

第五步:在h3主机终端输入:

tcpdump -nn -i h3-eth0

在这里插入图片描述

第六步:在Mininet命令行输入:

h1 ping h2

在这里插入图片描述

h2主机收到数据包,h3主机没有收到数据包

第七步:在Mininet命令行输入:

h1 ping h3

在这里插入图片描述

h3主机收到数据包,h2主机没有收到数据包

交换机实现了L2_learning,只有目的主机可以收到数据包。

实验三:python程序自定义POX控制器功能

新建网络拓扑,此时交换机没有流表规则,该拓扑上的主机不能进行通信;编写python程序自定义一个POX模块SendFlowlnSingle3,并将拓扑连接到SendFlowlnSingle3(默认端口为6633),实现交换机发送流表规则,完成主机的通信。

第一步:建立网络拓扑

sudo -E mn --topo=single,3 --mac --controller=remote,ip=127.0.0.1,port=6633 --switch ovsk,protocols=OpenFlow10

第二步:测试主机之间能否进行通信

h1 ping h2

在这里插入图片描述

主机之间无法进行通信

第三步:在pox文件夹下新建SendFlowlnSingle3.py文件,并加入如下代码

# -*- coding: utf-8 -*-
from pox.core import core
import pox.openflow.libopenflow_01 as of

class SendFlowInSingle3(object):
    def __init__(self):
        core.openflow.addListeners(self)
    def _handle_ConnectionUp(self, event):
        msg = of.ofp_flow_mod()  # 使用ofp_flow_mod()方法向交换机下发流表
        msg.priority = 1
        msg.match.in_port = 1  # 使数据包进入端口1
        msg.actions.append(of.ofp_action_output(port=2))  # 从端口2转发出去
        msg.actions.append(of.ofp_action_output(port=3))  # 从端口3转发出去
        event.connection.send(msg)

        msg = of.ofp_flow_mod()  # 使用ofp_flow_mod()方法向交换机下发流表
        msg.priority = 1
        msg.match.in_port = 2  # 使数据包进入端口2
        msg.actions.append(of.ofp_action_output(port=1))  # 从端口1转发出去
        msg.actions.append(of.ofp_action_output(port=3))  # 从端口3转发出去
        event.connection.send(msg)

        msg = of.ofp_flow_mod()  # 使用ofp_flow_mod()方法向交换机下发流表
        msg.priority = 1
        msg.match.in_port = 3  # 使数据包进入端口3
        msg.actions.append(of.ofp_action_output(port=1))  # 从端口1转发出去
        msg.actions.append(of.ofp_action_output(port=2))  # 从端口2转发出去
        event.connection.send(msg)

def launch():
    core.registerNew(SendFlowInSingle3)

第四步:运行该文件:

sudo ./pox.py SendFlowInSingle3

第五步:测试主机之间能否进行通信:

h2 ping h3

在这里插入图片描述

主机之间可以进行相互通信


本篇文章主要介绍了POX相关的使用,后续会继续更新Mininet相关使用。


参考博客:
https://www.cnblogs.com/islinbei/p/16770062.html

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

逍遥自在学C语言 | 宏定义技巧让你的C代码快人一步

前言 在C语言中,宏定义是一种预处理指令,用于在代码中定义和使用常量、函数或代码片段的替代。 宏定义使用#define关键字来定义,并在代码中进行替换。宏定义具有以下优点: 简化代码:宏定义可以将一些常用的、重复出…

MySQL高可用集群解决方案之:lvs+keepalived+mysql cluster实现负载均衡

一:前言 Mysql-cluster本身实现了高可用,但是其sql节点并没有实现负载均衡。怎样让程序能均衡地访问sql节点呢,程序里写哪个数据库服务器IP呢? LVS是实现负载均衡作用的,即将客户端的需求采用特定的负载均衡算法分发…

在职考研 | 对于朝九晚五的上班族来说同等学力申硕更轻松!

我们要知道的是,考在职研究生的群体90%以上都是朝九晚五的上班族。 他们工作忙,时间和精力都很有限。 考研本身难度就很大,但是既拿不出足够多的备考时间,也没法到线下去上课。 怎么能考上呢? 在这样的现实条件下&…

yolov5部署到android studio

目录 环境获取demo将pt文件导出为ptl文件修改demo修改PrePostProcessor增加ptl文件并增加类别文件修改MainActivity 大功告成 环境 Ubuntu22.10 Pytorch2.0.1cu117 Android Studio Flamingo | 2022.2.1 Patch 1 获取demo git clone https://github.com/pytorch/android-demo…

self Attention 位置编码的奇偶输入问题

attention机制一直是放在encoder-decoder中进行使用,self-attention是为了解决前者结构无法并行计算,而抽离出的概念(前者的编码解码多为时序网络)。 但因为缺少时序模型天然的位置编码特点,所以self-attention模型需要…

Docker镜像大小优化

如何缩小镜像的体积大小? 1)尽可能的使用小体积的基础镜像 2)尽可能减少Dockerfile文件中的指令数量 3)构建镜像步骤最后添加清空系统和应用程序的缓存的命令 4)使用多级(多阶段)构建 FROM A…

亚信科技AntDB数据库荣获赛宝优选信创优秀解决方案奖

近日,由工业和信息化部电子第五研究所主办的中国赛宝信创生态合作伙伴大会暨赛宝优选信创优秀解决方案颁奖仪式在北京成功举办,亚信科技AntDB数据库信创解决方案“业务支撑系统核心数据库迁移改造”从千余案例中脱颖而出,荣获赛宝优选信创优秀…

文件描述符表

文章目录 1. 文件描述符1.1 前言1.2 理解文件1.3 文件描述附表1.4 打开文件时1.5 默认打开的三个文件 2. 重定向2.1 瞅瞅2.2 dup22.3 实现原理 3. 一切皆文件 1. 文件描述符 1.1 前言 环境:Linux 2.6 在 Linux 中,有句话叫做「一切皆文件」&#xff0…

Coinbase:如有必要,不惜在最高法院与SEC“一决胜负”!

6日早间,央视财经频道(CCTV-2)对“币安及其首席执行官被美证交会(SEC)起诉”进行了报道。 值得一提的是,央视并不常播报加密货币相关新闻,上一次是关于香港监管框架,赵长鹏&#xff…

< 每日算法:一文带你认识 “ 双指针算法 ” >

每日算法:初识双指针算法 👉 1. 双指针概念:👉 2. 左右指针> 案例一:二分查找> 案例二:双指针 - 移除元素 👉 3. 快慢指针> 案例一: 删除排序数组中的重复项 👉…

MySQL8安装详细教程

MySQL8安装详细教程 一、下载二、安装三、配置环境 一、下载 官网下载:点击跳转 进入官网后,如下界面 点击Archives可以选择版本进行下载,如下图根据描述操作即可。 百度云下载链接:点击跳转 或者复制到浏览器打开:链…

【1 微信小程序学习-核心思想与体验】

1 小程序的核心技术 .js文件,负责数据处理,函数定义和实现 .wxml文件,组件结构与数据绑定 .wxss文件,组件样式 .json配置信息补充 MVVM架构实现声明式编程 采用MVVM架构,核心是通过数据绑定实现响应式编程(声明式编程). M:数据处理 V:样式结构 VM:数据绑定和事件监听 vue和小程…

程序员的职场危机,能靠技术化解吗?

很多人认为,程序员一定要干到管理层,才会有继续走下去的希望,而踏实做技术的程序员,只会面临淘汰。 事实真是如此吗? △ 截图来源脉脉,如侵删 我们先不说结论,一起看看网友们的看法&#xff1…

Linux | Job control

Linux | Job control 文章目录 Linux | Job control命令直接将命令丢到后台中“执行”的 &将当前工作丢到后台“暂停”:Ctrl z查看后台工作状态:jobs将后台工作拿到前台处理:fg让工作在后台下的状态变成运行中:bg管理后台工作…

Qt6之vc调用qt生成的带ui的dll

受益于跨平台的特性,Qt生成dll的各种语言调用上体现的淋漓尽致,上篇已经演示了qt生成的无ui的dll及vc如何调用它,本篇将演示vc如何调用qt生成的带ui的dll。 传统观点认为Qt生成的带ui的dll受限于 QApplication 的 exec 方法,这样才…

《精通特征工程》学习笔记(6):非线性特征化与k-均值模型堆叠

1.非线性特征 当数据位于一个薄饼状的线性子空间时,PCA 是非常有用的。但如果数据形成了一个更加复杂的形状,情况又将如何呢? 如果线性子空间是一张平展的纸,那么非线性流形的一个简单例子就是卷起来的纸,它有 个非…

《人人健康》期刊简介及投稿邮箱

《人人健康》期刊简介及投稿邮箱 《人人健康》期刊简介: 主管单位:山西出版传媒集团有限责任公司 主办单位:山西三晋报刊传媒集团有限责任公司 国际刊号ISSN:1004-597X 国内刊号CN:14-1033/R 邮发代号&#xff1…

不甘做小弟,JS时间对象又在搞事情!(上)

关注“大前端私房菜”微信公众号,回复暗号【面试宝典】即可免费领取107页前端面试题。 Date Date 是 js 的一个内置对象,也叫内置构造函数。提供了一堆的方法帮助我们更方便的操作时间 创建时间对象:new Date() 获取时间对象:ne…

NTSC和PAL视频格式的区别

1,历史演变 NTSC早期描述的是525I59.94格式视频,1953年确立标准,美国主导。后来为了方便和PAL制式格式的视频转换,于是将60hz的倍数关系的帧率纳入该系统。 PAL描述的是625I50格式视频,1967年确立标准,欧洲…

完全免费白嫖 GPT-4 的终极方案!

原文链接:https://icloudnative.io/posts/completely-free-to-use-gpt4/ GPT-4 目前是世界上最强的多模态大模型,能力甩 GPT-3.5 好几条街。 大家都希望早日用上 GPT-4,不过目前体验 GPT-4 的渠道非常有限,要么就是开通 ChatGPT …