POX控制器的分析(一)

article/2025/8/24 10:04:34

       最近刚刚对SDN产生了很大的兴趣,相对之前使用的POX控制器作出一个分析,了解控制器的机制,这样更好的理解SDN。

       本文从https://openflow.stanford.edu/display/ONL/POX+Wiki官方网站中进行学习的。

      首先从POX的自带的组件来分析:



其中:

forwarding作为转发应用,包括l2_learning、l2_pairs、l3_learning、l2_multi、l2_nx。

OpenFlow是控制驱动,包括of_01、discovery、debug、keepalive。


POX包括core部分和组件:

其中core部分包括:of_01和openflow。

POX处理的流程如下:

1、of_01监听到交换机消息;

2、握手消息自己处理,其他都触发事件;

3、在监听该事件的组件,触发相应函数处理该事件。


        of_01 主要是运行一个线程,该线程不断与交换机进行TCP连接,当某交换机送来一个协议消息时,of_01会触发该消息所对应的事件。openflow则与所有的物理交换机相连,而控制器可以通过openflow控制所有的交换机。


POX伴随着组件一起启动,有些组件提供主要功能,而有些仅仅是一些例子。下面具体解释:

Py

让POX启动一个交互式的python解释器,方便调试和开发,这个默认就是启动控制器POX。

 

Forwarding.hub

为每一个交换机建立通配的洪泛规则,让交换机拥有hub的功能。

 

Forwarding.l2_learning

让OpenFlow交换机成为2层自学习交换机。当组件学习到2层地址时,流表会建立精确匹配。例如,不同的TCP连接会导致不同的流表建立。

 

Forwarding.l2_pairs

让OpenFlow交换机扮演2层自学习交换机。与l2_learning不同的是,只为MAC地址建立流表规则。

 

Forwarding.l3_learning

这既不是一个router,也不完全是2层交换机,只是个3层学习交换组件。主要功能是使用POX的数据包库来检查和构建ARP请求和回复。

一个使用场景是使用l3_learning来配置“fake gateways”即:

./pox.pyforwarding.l3_learning --fakeways=10.0.0.1,192.168.0.1

 

Forwarding.l2_multi

L2_multi使用openflow.discovery来学习整个网络中的拓扑结构。只要一个交换机学习到MAC地址,其他所有的交换机都会学习到。

 

Forwarding.l2_nx

使用Nicira扩展(即Open vSwitch)的L2 switch。

RunLike this:

./pox.pyopenflow.nicira –convert-packet-in forwarding.l2_nx

基于源MAC和目的MAC地址进行转发。因此交换机中有两张表:一张是源MAC,另一张是目的MAC。

 

forwarding.topo_proactive

为指定的IP地址建立转发规则。这些IP地址必须是DHCP分配的。

 

openflow.spanning_tree

组件使用发现组件建立网络拓扑,建立生成树,然后禁止交换机端口的洪泛,这个和生成树协议没什么关系。

组件有两个选项:

–no-flood 当交换机连接时,禁止所有端口flood;

–hold-down 当一个完整的发现过程未结束时,阻止改变flood控制。

 

web.webcore

在POX进程中启动一个web server。

 

Messenger

通过基于JSON的双向消息提供一个POX和外部进程通信的接口。

 

openflow.of_01

该组件和所有OpenFlow交换机通信(默认是1.0)。通常是默认启动(除非你指定–no-openflow选项),通常借助它来选择侦听端口等选项。

 

openflow.discovery

使用LLDP消息来发现网络拓扑,链路开启或关闭时会触发事件。

 

openflow.debug

生成pcap追踪消息,便于使用wireshark进行抓包分析。

 

openflow.keepalive

这个组件使POX定期发送回显请求到连接到的交换机。

支持以下命令行选项:

–interval=X 每X秒发送一个回显请求(default 20)

–timeout=X 期望X秒从交换机得到回复 (default 3)

 

proto.pong

主要用于ICMP回显和请求(ping)。

 

proto.arp_responder

一种arp工具可以学习到代理ARP,并且可以答复静态流表项。

例子:指定IP地址和MAC地址

proto.arp_responder--192.168.0.1=00:00:00:00:00:01--192.168.0.2=00:00:00:00:00:02

 

info.packet_dump

收集packet_in信息日志,类似于tcpdump。

 

proto.dns_spy

监测DNS回复并记录结果。其它组件能够检测它们通过访问core.DNSSpy.ip_to_name[<ip address>] 和core.DNSSpy.name_to_ip[<domainname>].

 

proto.dpcp_client

DHCP客户端,需要和其它组件一起使用。

 

proto.dhcpd

DHCP服务器。默认可以使用proto.arp_responder使192.168.0.254为代理ARP。如:

proto.dhcpd--network=10.1.1.0/24 --ip=10.1.1.1 --first=10 --last=None --router=None--dns=4.2.2.1

具体的可以参考wiki。

 

misc.of_tutorial

和 OpenFlowtutorial一起使用。

 

misc.full_payload

默认时,当一个数据包在交换机上丢失流表时,交换机可能只发送部分数据包到控制器(前128字节)。当发送一个全部的数据包时,这个组件需要在每个交换机上重新配置。

 

misc.mac_blocker

阻止MAC地址

 

misc.nat

NAT地址转换

 

misc.ip_loadbalancer

TCP负载均衡

./pox.pymisc.ip_loadbalancer –ip=<Service IP> –servers=<Server1IP>,<Server2 IP>,…

 

misc.gephi_topo

带有拓扑图的图形界面

./pox.pyopenflow.discovery misc.gephi_topo host_tracker forwarding.l2_learning

 

log

日志功能,POX使用python logging模块。下面有一些选项:

禁止控制台日志,日志格式,日志输出,日志颜色,日志级别等。可参考python logging。

 

samples.pretty_log

使用log.color和用户自定义的日志格式来优化控制台输出

 

tk

基于Tk的GUI

 

host_tracker

跟踪网络主机,通常会分发一个HostEvent。host_tracker通常会检查packet_in消息以及MAC地址表。

 

当然POX中也可以创建自己的组件,这点就要弄清楚POX组件是如何建立和加载的,这点需要分析POX中代码,在后面会给出相应的分析。

POX中from pox.core import core也可以建立许多接口来进行许多应用。额外补充一句在python中,如果import某个库文件,则会执行该库文件中除了def之外的可执行语句。这点可以复用代码。





http://chatgpt.dhexx.cn/article/bxFWxIZD.shtml

相关文章

pox控制器学习笔记

一、安装pox pox基于python2.7 $ git clone http://github.com/noxrepo/pox $ cd pox ~/pox$ git checkout dart二、调用pox 如果想快速入门 ./pox.py samples.pretty_log Forwarding.l2_learningPOX本身有几个可选的命令行参数&#xff0c;这些参数可以在命令行开始时使用…

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

大家好&#xff0c;我是文思月&#xff01; 每文一言&#xff1a;时间不在于你拥有多少&#xff0c;而在于你如何使用&#xff01; 本篇文章&#xff1a; 本篇文章主要是基于POX控制器进行的两个实验&#xff1a;一个是使交换机模拟hub&#xff08;集线器&#xff09;的功能&a…

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

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

【UML】UML基本概念

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

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

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

如何画UML图

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

UML图简介

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

UML图

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

UML类图是什么

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

UML介绍及怎么看UML图

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

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

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

【UML】UML几种图的绘制

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

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

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

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

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

详细说明UML类图是什么?

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

UML详细讲解

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

什么是UML,UML类图

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

什么是uml?

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

[UML 扫盲]什么是UML?

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

大数据学习(3)

大数据学习&#xff08;3&#xff09; 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 …