最近在网上看到了一个以OpenDaylight为基础的SDN应用,所以下载下来研究了一番,简单的对其相关功能进行了研究,由于精力有限,只完成了代码编译和OpenDaylight对接工作,并未对其业务流程进行深入研究,先将几天的研究进展小结一下,后续将对代码进行深入研究,如果有精力准备将其移植到OpenDaylight的最新版本上。
Tap在wiki中的解释中是一种提供通过计算机网络去接入数据流的方式。在实际应用中,Tap是效果较好的一种监控网络节点间流量的方式。满足Tap应用场景的网络一般会具备三个重要部分,即需要监控的两个节点A和B,还有监控节点(monitor port)。在A、B间插入Tap后,Tap在保证未阻塞的流量通过的同时会将流量拷贝到监控端口供第三方的设备监听。
应用场景:breakout,passive,aggregating,regeneration,inline power。
SampleTap使用Java进行开发,其实际是作为OpenDaylight Hydrogen版本的软件架构OSGi的Plugin存在的。其代码分为两个部分,一个部分是SampleTap的功能实现,另一部分是SampleTap与OSGi的接口实现,代码存在于internal文件中,对OSGi的bundle进行了实现。其与OpenDaylight的关系如图2-1所示.
图2-1 SampleTap和OpenDaylight的关系
SampleTap的功能实现本质其实是通过下发流表进行特定流量的备份,并通过相应的功能模块进行流量分析,以满足不同的需求。
在整个SampleTap应用中,核心的内容是Tap Policy,其制定了Tap的应用策略,实现思路是通过Name、Match Rules、Switches/Ports确定流量,然后将流量镜像转移至相应的Capture Device进行数据包处理。图2-2上半部分是整个Policy的主要数据结构,下半部分是Match Rules的相关数据结构,这里相较于OF的Match Rules多了个Refexive的功能,也就是说可以选择是否增加反向链路的匹配功能。
图2-2 SampleTap的策略结构
对于SampleTap的实验,官方举了两个例子,下面分别介绍一下。
图3-1 案例一——Tap聚合
在这个例子中,将TOR交换机的镜像端口都连接在了安装了Tap应用的交换机,该交换机有两类端口,一种是Recorder用来实现流量的记录,而inspector主要实现对流量的监测。根据图3-1可以看出Tap应用聚合了图中左上多台交换机的流量,并进行了相应的监测。
图3-2 案例二
根据图3-2,该例子其实是对案例一的详细化,主要完成Client和Server之间特定流量的分析,Client1和Server1的交换机设定为TOR交换机,其和运行Tap应用的交换机之间通过Tap Port进行连接,该端口可以理解为交换机的镜像端口。该案例的目的是将Cleint和Server间的流量进行镜像备份,并从中筛选出HTTP和FTP的数据包给Inspect端口进行分析。
该软件提供了webUI界面,提高了策略配置的方便性,软件web界面配置的端口号是4567,界面如图 url:<控制器IP>:4567
图4-1 SampleTap web界面
在图4-1的左侧边栏是SampleTap的配置界面,共分为两个部分,第一部分是Tapping Objects,也就是可以手工配置的Tapping策略,包括Tap Policies、Matching Criteria、Switch Entries、Capture Devices、Port Chain共5个配置项。第二部分是OPF Switches,即可供SampleTap应用配置的支持OpenFlow交换机,本应用目前仅支持OpenFlow 1.0协议。
在图4-1的右侧部分是SampleTap的展示界面,分为上下两部分,上面用来展示可供配置的交换机,下半部分作为软件运行日志和统计信息的展示窗口。
下面将详细介绍web界面各个部分的使用。
图4-1-1 Tap Policy配置窗口
这里的Tap Policy其实是对后面的多个属性的按需组合,即如前面图4-1-2所示,将Policy下的几个单元进行组合,需要配置Name、Match Rules、Switches/Ports、Port Chain、Capture Device等单元,实现相应的策略。
图4-1-2 Tap Policy的主要单元
图4-1-3 Match Rule
Match rule主要提供对要进行监控的数据包定位,包含图4-1-3的多个信息进行选择,进行流量的精确匹配,这里有一个需要注意的是并未对流量的端口进行设置,根据Policy的逻辑,端口将在其他配置中设置,这种参数配置方式也对该应用的场景有了限制。
图4-1-4 Switch Entries配置
这里需要注意的是,在SampleTap中所有的switch信息均是通过OpenDaylight的相关模块的获取的。在设置中,有Name、tappingMode和opfSwitch选项,其中在tappingMode选项里只有TAPAGGR一种模式,opfSwitch是要绑定的OF交换机,这里只有被绑定的交换机才能出现在Tap Policy的选项卡中,另外在现有版本的SampleTap中,交换机的获取和连接是不稳定的,所以对策略的实施造成了很大的影响。
Port Chain是SampleTap中未完善的功能,根据设置有4种端口:out port、return port、rewrite out port、rewrite return port。根据代码中的解释将要完善该部分的功能,其中Out port的功能是:clone packets for all flows to the port chain out port,即流量拷贝;return port的功能是:from return port receive packets and send them to the capture device,即选定流量传递。通过该段代码的解释可以看出SampleTap的官方实例中提供的功能演示并未实现,所以需要对其可实现的功能进行一番探索。
这里的Capture Device里涉及了几个选项,即实现功能、端口、所连接的交换机。在实现功能中包含:记录、监控、分析。不过具体功能实现有待考证。
在该窗口中主要显示网络中的OF交换机,并且展示其相关的参数。在图4-2-1中所示的交换机信息包含了三台设备,每台设备有MAC地址、厂商信息、硬件信息、软件版本、数据平面描述信息等数据,由于是使用Mininet仿真的环境,所以交换的描述项均为默认的None。
图4-2-1 opf switches
SDN网络搭建:Mininet Controller:OpenDaylight Hydrogen版本
图5-2-1 仿真网络环境
如图5-2-1所示,搭建了一个线性拓扑,拓扑中包含三台交换机,每台交换机连接一台主机,并有相关端口连接信息。
由于SampleTap是OpenDaylight的一个插件,所以在启动直接启动OpenDaylight controller即可。插件默认自动启动。
在启动后应用将对数据库中的配置信息进行检索,将还原上次保存的所有配置项。并且启动4567 web服务端口。
在应用启动后将设置好的Policy用流表的形式下发策略。在状态将持续的进行交换机信息更新,以便对策略的实施正常情况进行监控。
详细的工作流程TappingApp.java文件中体现,在Router.java中设置了该应用的Web接口。
下面的图示是该应用工作流程的重要步骤截图。
图5-2-2 读取数据库配置信息
图5-2-3 交换机信息CHANGED即时改变
图5-2-4 根据Policy创建流规则
图5-2-5 持续更新交换机信息
SampleTap的功能是流量聚合,并可进行特定流量的分析,不过本开源代码对关键部分的功能实现并不完整,并且不具备很好的稳定性,无法满足Tap功能的全面测试,下一步工作将对该源码进行修改。
https://github.com/OpenNetworkingFoundation/SampleTap