POX控制器的分析(一)

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

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

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

POX控制器的分析(一)_第1张图片

POX控制器的分析(一)_第2张图片

其中:

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[] 和core.DNSSpy.name_to_ip[].

 

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= –servers=,,…

 

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之外的可执行语句。这点可以复用代码。




你可能感兴趣的:(SDN学习笔记)