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

article/2025/8/19 10:53: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 ofclass SendFlowInSingle3(object):def __init__(self):core.openflow.addListeners(self)def _handle_ConnectionUp(self, event):msg = of.ofp_flow_mod()  # 使用ofp_flow_mod()方法向交换机下发流表msg.priority = 1msg.match.in_port = 1  # 使数据包进入端口1msg.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 = 1msg.match.in_port = 2  # 使数据包进入端口2msg.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 = 1msg.match.in_port = 3  # 使数据包进入端口3msg.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://chatgpt.dhexx.cn/article/wAhS8hJe.shtml

相关文章

浅谈UML的概念和模型之UML视图

目录 UML的视图 UML的九种图UML中类间的关系 相信大家都知道UML的全称,统一建模语言(UML是 Unified Modeling Language的缩写)是用来对软件系统进行可视化建模的一种语言。UML为面向对象开发系统的产品进行说明、可视化、和编制文档的一种标准…

【UML】UML基本概念

1、简述 UML全称是Unified Modeling Language,直译是“统一建模语言”,简单理解就是一组有特殊用途的、国际化的“象形文字”。 2、UML图 UML图有好多种,大致分为两类:结构型和行为型,分别对应静态分析和动态分析。…

浅谈UML的概念和模型之UML类图关系

目录 UML的视图 UML的图 UML的类图关系 类与类之间的关系通常有4种,即依赖关系(Dependency)、泛化关系(Generalization)、关联关系(Association)、实现关系(Realization&#xff…

如何画UML图

UML 一,UML概述 什么是uml UML 是 OMG 在1997年1月提出了创建由对象管理组和 UML1.0 规范草案; UML 是一种为面向对象开发系统的产品进行说明、可视化、和编制文档的标准语言;UML 作为一种模型语言,它使开发人员专注于建立产品的模…

UML图简介

文章目录 UML图简介UML中的各个图的功能作用:用例图(Use Case Diagram)类图(Class Diagram)序列图(Sequence Diagram)对象图(Object Diagram)包图(Package Diagram)活动图&#xff0…

UML图

UML图 UML(Unified Modeling Language)是一种标准的面向对象建模语言,用于描述软件系统的设计和开发。UML图包括以下几种类型: 结构图:用于描述系统静态结构,包括类图、对象图、组件图、部署图等。行为图…

UML类图是什么

一、什么是UML类图 先引用一段百度百科的定义 统一建模语言(Unified Modeling Language,UML)是用来设计软件的可视化建模语言。它的特点是简单、统一、图形化、能表达软件设计中的动态与静态信息。 类图是描述系统中的类,以及各个…

UML介绍及怎么看UML图

最近做毕业设计,用到了libcitygml开源库,获取到一张citygml的UML图,就顺便简单了解一下它! 一、简介 UML(Unified Modeling Language),直接翻译就是统一建模语言。 二、UML的作用 UML可以帮助我…

什么是UML?为什么要用UML?

什么是UML? UML是Unified Model Language的缩写,中文是统一建模语言,是由一整套图表组成的标准化建模语言。 为什么要用UML? 通过使用UML使得在软件开发之前, 对整个软件设计有更好的可读性,可理解性,从而降低开发风险。同时,也能方便各个开发人员之间的交流。 UML…

【UML】UML几种图的绘制

08年9月入学,12年7月毕业,结束了我在软件学院愉快丰富的大学生活。此系列是对四年专业课程学习的回顾,索引参见:http://blog.csdn.net/xiaowei_cqu/article/details/7747205 UML几种图的绘制 UML是Unified Modeling Language&…

浅谈UML的概念和模型之UML九种图

目录: UML的视图 UML的九种图 UML中类间的关系 上文我们介绍了,UML的视图,在每一种视图中都包含一个或多种图。本文我们重点讲解UML每种图的细节问题: 1、用例图(use case diagrams) 【概念】描述用户需…

UML——概述(什么是UML?UML有什么作用?面向对象技术)

目录 什么是UML? UML能帮我们做什么? 什么是建模? 为什么要建模? 为什么要可视化建模? 建模的原理(原则) UML的基本构造块 UMl中事物有哪些? 面向对象技术 什么是UML&#…

详细说明UML类图是什么?

作者:亿图图示 链接:https://www.zhihu.com/question/419312525/answer/1535413984 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 UML类图,UML中的一种重要图形,是在…

UML详细讲解

本文是搜集整理学习使用,信息来源:gd_沐辰 - 博客园 (cnblogs.com) 1.UML概述 1.1.什么是UML 统一建模语言(UML)是一种通用的可视化建模语言,可以用来描述、可视化、构造和文档化软件密集型系统的各种工件。 UML是…

什么是UML,UML类图

1.什么是UML? UML是统一建模语言,是一种可视化的面向对象建模语言,是一种用来对真实世界物理进行建模的标准标记,用图形方式表现典型的面向对象系统的整个结构。它的作用域不局限于支持面向对象的分析与设计,还支持从需…

什么是uml?

相信你可能建立过以木块为基础的建筑模型,建立过解决实际问题的数学模型,学过一个系统的物理模型,听说过UML建模,但是什么是UML呢? 学习了几天的UML,昨天师傅大体问了我UML是什么,由什么构成&am…

[UML 扫盲]什么是UML?

文章目录 一、UML 是什么?二、UML 与 面向对象三、UML 基本要素四、UML 常见图 概述 UML 是统一建模语言(Unified Modeling Language)的缩写。UML 提供了标准通用的图形化设计语言,使得在构建计算机应用时,开发团队的成…

大数据学习(3)

大数据学习(3) 1 Hive-SQL-DML语句1.1 Hive SQL Load 加载数据语句1.1.1 Load功能1.1.2 Load语法规则1.1.3 Load 语法实验1.1.3.1 Load Data From Local FS1.1.3.2 Load Data From HDFS1.1.3.3 Overwrite选项 1.2 Hive SQL Insert 插入数据语句1.3 Hive …

如何学习大数据分析

上面有很多关于BOT的信息:这并不是嗡嗡作响。归根结底,BINO数据已经成为每个行业的驱动力,这充分说明了利用大数据分析的最大优势。但是,仅B此字不只是因为我们知道而改变了业务。更重要的是,大数据分析分析系一直是开…

大数据分析怎么学习

大数据分析从业虽然有难度,但大数据分析岗的薪酬高、发展潜力好,很多人们想转行做大数据分析,朝着大数据分析方向去发展。那么,大数据分析怎么学习?学习哪些内容呢? 第一,可视化分析,事实上&am…