OpenDaylight Hydrogen版本应用SampleTap研究(一)

最近在网上看到了一个以OpenDaylight为基础的SDN应用,所以下载下来研究了一番,简单的对其相关功能进行了研究,由于精力有限,只完成了代码编译和OpenDaylight对接工作,并未对其业务流程进行深入研究,先将几天的研究进展小结一下,后续将对代码进行深入研究,如果有精力准备将其移植到OpenDaylight的最新版本上。

1 什么是Tap

Tap在wiki中的解释中是一种提供通过计算机网络去接入数据流的方式。在实际应用中,Tap是效果较好的一种监控网络节点间流量的方式。满足Tap应用场景的网络一般会具备三个重要部分,即需要监控的两个节点A和B,还有监控节点(monitor port)。在A、B间插入Tap后,Tap在保证未阻塞的流量通过的同时会将流量拷贝到监控端口供第三方的设备监听。

应用场景:breakout,passive,aggregating,regeneration,inline power。

2 SampleTap实现

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的策略结构

3 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端口进行分析。

4 SampleTap功能分析

该软件提供了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 Tapping Objects

4.1.1 Tap Policy

图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.2 Match Rules

图4-1-3 Match Rule

Match rule主要提供对要进行监控的数据包定位,包含图4-1-3的多个信息进行选择,进行流量的精确匹配,这里有一个需要注意的是并未对流量的端口进行设置,根据Policy的逻辑,端口将在其他配置中设置,这种参数配置方式也对该应用的场景有了限制。

4.1.3 Switch Entries

图4-1-4 Switch Entries配置

这里需要注意的是,在SampleTap中所有的switch信息均是通过OpenDaylight的相关模块的获取的。在设置中,有Name、tappingMode和opfSwitch选项,其中在tappingMode选项里只有TAPAGGR一种模式,opfSwitch是要绑定的OF交换机,这里只有被绑定的交换机才能出现在Tap Policy的选项卡中,另外在现有版本的SampleTap中,交换机的获取和连接是不稳定的,所以对策略的实施造成了很大的影响。

4.1.4 Port Chain

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的官方实例中提供的功能演示并未实现,所以需要对其可实现的功能进行一番探索。

4.1.5 Capture Device

这里的Capture Device里涉及了几个选项,即实现功能、端口、所连接的交换机。在实现功能中包含:记录、监控、分析。不过具体功能实现有待考证。

4.2 OPF switches

在该窗口中主要显示网络中的OF交换机,并且展示其相关的参数。在图4-2-1中所示的交换机信息包含了三台设备,每台设备有MAC地址、厂商信息、硬件信息、软件版本、数据平面描述信息等数据,由于是使用Mininet仿真的环境,所以交换的描述项均为默认的None。

图4-2-1 opf switches

5 SampleTap工作流程分析

5.1 实验环境

SDN网络搭建:Mininet Controller:OpenDaylight Hydrogen版本

5.2 具体流程

5.2.1 网络环境搭建

图5-2-1 仿真网络环境

如图5-2-1所示,搭建了一个线性拓扑,拓扑中包含三台交换机,每台交换机连接一台主机,并有相关端口连接信息。

5.2.2 工作流程

由于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 持续更新交换机信息

5.3 小结

SampleTap的功能是流量聚合,并可进行特定流量的分析,不过本开源代码对关键部分的功能实现并不完整,并且不具备很好的稳定性,无法满足Tap功能的全面测试,下一步工作将对该源码进行修改。

6 源码下载地址

https://github.com/OpenNetworkingFoundation/SampleTap

原文发布于微信公众号 - SDNLAB(SDNLAB)

原文发表时间:2015-06-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏desperate633

计算机网络之数据交换(电路交换,报文交换,分组交换)电路交换报文交换分组交换分组交换与电路交换

就要经过网络核心进行数据交换,数据不断从一个网络交换到另一个网络,直到到达目的主机。所以网络核心解决的基本问题就是数据交换。

1081
来自专栏F-Stack的专栏

用DPDK rte_ring实现多进程间通信

F-Stack是多进程架构,去除了进程间资源共享来达到更高的性能,但还是有部分控制信息需要在进程间同步,使用rte_ring让多个进程间的通信变得十分简单。 r...

8567
来自专栏小小挖掘机

整理一些计算机基础知识!

为了使不同计算机厂家生产的计算机能够相互通信,以便在更大的范围内建立计算机网络,国际标准化组织(ISO)在1978年提出了“开放系统互联参考模型”,即著名的OS...

1113
来自专栏散尽浮华

Linux下绑定网卡的操作记录

公司采购的服务器安装了双网卡,并进行bond网卡绑定设置,网卡绑定mode共有七种(0~6) bond0、bond1、bond2、bond3、bond4、bon...

4568
来自专栏F-Stack的专栏

用DPDK rte_ring实现多进程间通信

F-Stack是多进程架构,去除了进程间资源共享来达到更高的性能,但还是有部分控制信息需要在进程间同步,使用rte_ring让多个进程间的通信变得十分简单。

2.5K2
来自专栏熊二哥

快速入门系列--WCF--01基础概念

转眼微软的WCF已走过十个年头,它是微软通信框架的集大成者,将之前微软所有的通信框架进行了整合,提供了统一的应用方式。记得从自己最开始做MFC时,就使用过Nam...

22810
来自专栏程序员宝库

喂,快给我打一个小程序预览码

开发小程序的朋友们随时都会听到一句话:“喂,快给我打一个xxx环境的预览码”,无论你正在干什么,都得赶紧地回一句:“稍等,这就给你打码……”

1034
来自专栏安恒网络空间安全讲武堂

护网杯easy laravel ——Web菜鸡的详细复盘学习

复现让我发现了很多读wp以为懂了动手做的时候却想不通的漏掉的知识点(还是太菜orz),也让我对这道题解题逻辑更加理解。所以不要怂,就是干23333!

2443
来自专栏Android群英传

从 Linux 进程调度到 Android 线程管理

3252
来自专栏进击的程序猿

raft 系列解读(3) 之 代码实现最小规则followercandidateleader规则RequestVote RPCAppendEntries RPC

首先,其实raft如果你不去看理论正确性的证明,光实现的话,只要按照raft里面给出的原则写代码就ok!如果代码写出来不正确,只能是你自己实现的问题。囧

1082

扫码关注云+社区

领取腾讯云代金券