最近在学习Pox,为了加深印象,对Pox wiki中的Pox组件写了些笔记。
 
按照组件的功能进行分类:
 
L2层地址学习、洪泛
forwarding.hub
forwarding.l2_learning
forwarding.l2_pairs
forwarding.l2_multi
forwarding.l2_nx
 
L3层地址学习
forwarding.l3_learning
 
构建拓扑
openflow.discovery
openflow.spanning_tree
forwarding.topo_proactive
 
openflow 连接相关
openflow.of_01
misc.full_payload
openflow.keepalive
 
pox内部服务
py
web.webcore
messenger
openflow.debug
pox网络服务应用
proto.arp_responder
proto.pong
proto.dns_spy
proto.dhcp_client
proto.dhcpd
misc.nat
misc.ip_loadbalancer
 
pox功能扩展
info.packet_dump
misc.of_tutorial
misc.mac_blocker
misc.gephi_topo
openflow.webservice
 
 
 
 
组件说明

py

POX的交互式Python解释执行组件,用于DEBUG和交互式实验。默认执行,除非添加命令 --no-cli。其他组件可以向该解释器添加函数和值。
 

forwarding.hub

该组件每个交换机添加洪泛通配符规则,将所有交换机等效于ethernet集线器
 

forwarding.l2_learning

该组件使opennflow交换机实现 L2链路层上的地址学习(类似网桥?)。但当该组件学习地址学习时,向流表下发的规则会尽可能的准确,而不仅仅是L2层的地址。例如不同的TCP连接将产生不同的表项。
 

forwarding.l2_pairs

类似于forwarding.l2_learning,l2_pairs让交换机进行地址学习,但该组件是尽可能的简化规则学习,所有安装的表项时只使用L2层信息(如Mac地址)。
 

forwarding.l3_learning

该组件并不是一个完整的Router,该组件是可POX的packet library(代码)的一个实现样例,可以构造ARP请求和回复。l3_learning关心IP从哪来,但并不关心IP的填充域,如子网等。
 

forwarding.l2_multi

L2层地址学习,但该层的学习不是单个交换机的独立学习,而是通过openflow.discovery交换机之间交换拓扑信息,学习整个网络的拓扑结构。只要网络中有一个交换机学习到一个新的Mac地址及其位置,所有的交换机就都能学会。
 
 

forwarding.l2_nx

Open vSwitch的quick-and-dirty组件,需要使用Openvswitch的Nicira扩展安装。
 
 

forwarding.topo_proactive

基于重要拓扑的IP地址安装规则。通过DHCP进行地址分配。所有的主机都必须用指定的IP地址,绝大部分规则都是主动安装(?)。该组件被添加至聚合规则复用分支中,路由编码基于l2_multi组件。该组件依赖openflow.discovery以及openflow.spanning_tree组件(有待确认)。
 
 

openflow.spanning_tree

该组件使用discovery组件来创建网络拓扑的视图,构造一棵生成树,然后使不在生成树中的交换机端口的洪泛功能失效,使得网络中不存在洪泛回路。需要注意的是该组件同生成树协议没有很大关系,只是有相似的目的。两个选项:
--no-flood,只要交换机连接上了就使该交换机的所有端口洪泛失效,对于某些端口,稍后将使能。
--hold-down,防止洪泛控制在一个完整的发现回路完成前被改变
因此该组件最安全的的使用方法是
openflow.spanning_tree --no-flood --hold-down .
 

openflow.webservice

Openflow的一个简单JSON-RPC-ish web service交互式接口,由of_service信息服务派生而来,依赖于webcore组件。可以使用HTTP POST方式发送JSON进行访问。
目前支持的方法有:
method
 

get_flow_stats,获取流表的表项

get_switch_desc,获取指定交换机详细信息
get_switches,获取交换机列表和基本信息
set_table , 设置指定交换机的流表
 
 

web.webcore

在Pox进程中启动一个web服务,其他组件可以通过它提供静态或动态内容。
 

messenger

该组件通过双向JSON消息为POX在进程间提供了一个交互接口。该组件本质上是API,通过TCP Socket和HTTP进行通信。具体的功能通过Services实现。messenger.log_service允许远程操作log(读log信息,配置log等)。openflow.of_service 允许一下Openflow的操作(如显示交换机列表,设置流表表项等)。./tools/pox-log.py是一个独立的Python应用,可以通过TCP同log服务进行交互。
 

openflow.of_01

该组件同openflow 1.0协议版本的交换机 进行通讯,默认启动。
 

openflow.discovery

该组件在交换机之间使用特制的LLDP报文来发现整个网络的拓扑结构。当链路生效或者失效时,该组件都会产生一个事件(Raise Events)。
 

openflow.debug

加载该组件将导致POX创建pcap追踪(进行抓包),包括openflow报文,可导入wireshark进行分析。该工具并不能完全代替wireshark或tcpdump,不过有一个比较好的特性是每一个openflow报文都一个完整的帧中。
 

openflow.keepalive

该组件令POX向已经连接的交换机周期性的发送echo请求。但这会解决两个问题:
第一,有些交换机(包括推荐交换机)会认为空闲连接意味着同控制器连接丢失,将会在一段silence时间后断开
连接。
第二,如果网络与交换机断开,控制器将不会立即获得一个FIN或RST,所以将会很难确定一个交换机失效。通过周期行发送echo请求,并分析交换机的响应,即可解决该问题。
 

proto.pong

该组件是一个简单的检测ICMP echo请求和应答的样例组件
 

proto.arp_responder

该组件为一个ARP应用,可以学习和代理ARP请求,也可以通过查询静态的表项来回复ARP请求。该组件提供了一个控制台交互界面来查询和修改arp表。
 

info.packet_dump

该组件将packet_in信息保存至log中,有点类似于在交换机中运行tcpdump
 

proto.dns_spy

检测DNS应答并存储应答结果,其他组件可以通过DNSSpy检测这些信息。
 

proto.dhcp_client

DHCP客户端,在同其他组件进行联合时有用(??)
 

proto.dhcpd

简单的DHCP服务器端,服务器本身的默认地址为192.168.0.254,下发的地址域为192.168.0.1~192.168.0.253,同时宣称自身为网关和DNS服务器。
 

misc.of_tutorial

配合openflow tutorial使用的组件,类似于简单的hub,但可以修改成L2 learning的交换机
 

misc.full_payload

默认情况下,当一个数据包在交换机流表中没有命中时,交换机只向控制器发送数据包的前128bytes,使用该组件可以将每一个交换机配置成发送整个数据包
 

misc.mac_blocker

具有Tkinter-based界面,可以阻塞Mac地址
 
 

misc.nat

实现网络地址转换的组件(木有详细介绍)
 

misc.ip_loadbalancer

由carp branch(不理解是啥)启用的TCP负载均衡器
 
 

misc.gephi_topo

检测拓扑结构,并将其导入到gephi中进行分析
 

Pox组件的更多相关文章

  1. JQuery easyui (4)LinkButtion(按钮)组件

    居然还有button组件 - - linkButton组件的加载方式 1,class加载 <a class='easyui-linkbtuton'>按钮<a> 2,js加载 $ ...

  2. Pox启动及事件产生、监听分析

        ./pox/pox.py , Pox       实例化core=pox.core.initialize(),即为实例化POXCore类(该类是所有组件的交接点,提供组件注册功能),监听cor ...

  3. JQuery easyui (2)Droppable(放置)组件

    所谓放置,就是将一个物体放入一个物体内,当然对于easyui来说触发各种效果是必不可少的,同时这个组件也不会依赖于其他组件. Droppable的加载方式 1,class  加载   一直不太喜欢cl ...

  4. jQuery Easy UI Droppable(放置)组件

    Droppable(放置)组件也是一个基本组件,使用方法较简单,语法都在样例里面凝视了: 演示样例: <!DOCTYPE html> <html> <head> & ...

  5. easyUI panel组件

    easyUI panel组件: 属性的使用: <!DOCTYPE html> <html lang="en"> <head> <meta ...

  6. easyUI linkbutton组件

    easyUI linkbutton组件: <!DOCTYPE html> <html lang="en"> <head> <meta ch ...

  7. easyUI tootip组件使用

    easyUI tootip组件使用: <!DOCTYPE html> <html lang="en"> <head> <meta char ...

  8. easyUI droppable组件使用

    easyUI droppable组件使用: <!DOCTYPE html> <html lang="en"> <head> <meta c ...

  9. easyUI draggable组件使用

    easyUI draggable组件使用: <!DOCTYPE html> <html lang="en"> <head> <meta c ...

随机推荐

  1. iCloud之旅

    1.创建BIDTinyPixDocument类 #import <UIKit/UIKit.h> //创建文档类 @interface TinyPixDocument : UIDocumen ...

  2. argparse - 命令行选项与参数解析(转)

    argparse - 命令行选项与参数解析(译)Mar 30, 2013 原文:argparse – Command line option and argument parsing 译者:young ...

  3. Virtualbox - Fatal: Could not read from the boot medium; system halted!

    刚装好的虚拟机系统,重新打开Virtualbox时出现个什么提示没认真看,顺势点了下去......结果虚拟机的xp系统打不开了,启动后出现:Fatal: Could not read from the ...

  4. LAMP平台搭建详解

    准备工作 安装编译工具 # yum -y install gcc # yum -y install gcc-c++ 如果系统之前已经安装有rpm包的mysql和apache,那么可以: #servic ...

  5. 关于JDK中的集合总结(二)

    1.2版本的JDK才出现的java集合框架. 下面介绍说一下Vector的一些特点. import java.util.Enumeration; import java.util.Iterator; ...

  6. 开始学习css

    今天开始学习css:应用一本<HTML5与CSS3网页设计基础> 先学习css样式规则声明. Body{ color:blue} 对应:选择符:{声明属性:声明值}: Background ...

  7. CSS实现标题超出宽度省略号来表示

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...

  8. 在Delphi中,关于数组名称

    动态数组数组名代表的是第一个元素的内存地址. 静态数组名称代表的是数组第一个元素的内存位置, 而不是数组第一个元素的内存地址. 但对于静态数组,在某些情况下编译器可能会自动取数组地址,如: funct ...

  9. Android第三方授权(新浪微博篇)

    Android第三方认证新浪微博,相对微信,也比较简单,并且sina给了一个sdk和sdkdemo,这个demo封装了许多,但是自己不准备记录这个demo,而是直接使用sdk 同样去sina官方下载s ...

  10. sqlserver 公有表达式

    了解通用表达式: 为了让代码简洁:在一个查询中引用另外的结果集都是通过视图而不是子查询来进行分解,但是视图是系统级对象,如果数据集仅仅需要在存储过程或是自定义函数中使用一次的话,使用view有些奢侈哈 ...