SDN-based Network Management Solution
摘要:
在此项目中,我们开发了一种网络管理应用程序,以监视和控制由支持OpenFlow的交换机和支持SNMP的设备组成的企业网络。 我们正在利用由控制器集中式软件定义网络控制器旋转的REST接口来运行此应用程序。 我们正在使用的SDN控制器是一个名为OpenDaylight(ODL)的开源控制器。 我们已使用SNMP和OpenFlow南向插件与网络设备进行通信。 为了测试该应用程序,我们在GNS3中模拟了一个网络,该网络结合了传统设备和OpenFlow交换机。
介绍:
用Opendaylight控制器结合提供的SNMP等插件,搭建网络拓扑。我们检索网络统计信息,链路统计信息以及有关基础设备(例如交换机和路由器)的信息,以控制和改善网络性能。尽管SDN具有许多优点,但它仍然缺乏良好的网络管理解决方案,并且难以让运营商实现全面部署、完全替代其原有的网络管理解决方案。因此有必要用SDN来结合传统网络管理方法(因为现在的底层都是传统的)进行管理。
OpenDaylight介绍:
- 模型驱动的服务抽象层(MDSAL):它将YANG模型用作行业标准,以将基础设备映射到网络应用程序,以随时支持现有网络中的技术和硬件。
- 支持标准网络管理的模块化插件式南向接口方法, 与这些其他设备和OpenFlow一起也受支持(就是可以统一管理)。
- 基于内部的北向接口抽象了基础架构的详细信息,并且SDN功能支持各种网络应用程序。
- 网络虚拟化以及灵活的策略机制在多服务环境中提供了多租户。
它用于与控制器在相同地址空间中运行的应用程序。
A.OSGi 服务:
OSGi是一个JAVA框架,可为OSGi模块和服务提供模块化和版本控制以及控制器和生命周期管理的可扩展性。 它有助于在运行时将插件加载到控制器中。
B.双向RESTful Web服务
与控制器不在同一地址空间中的应用程序使用REST服务。
南行中支持许多协议,这些协议动态链接到SAL(服务抽象层)。 SAL提供请求的服务,而与网络设备和控制器之间使用的基础协议无关。
Opendaylight主要组件
A.服务抽象层
SAL有助于分离北向应用程序和南向协议插件。 SAL是控制器的模块化设计的中心部分,该模块支持多个南向协议。 拓扑管理器使用SAL提供的设备发现之类的服务来构建拓扑和设备功能。 插件提供有助于构建服务的功能。 如上所示,控制业务逻辑将服务请求发送到SAL,服务管理器通过插件管理器将它们映射到相应的插件,并使用最合适的插件与网络设备进行交互。
B.模型驱动的服务抽象层
为模型驱动的服务抽象层(MD-SAL)建立了新的体系结构。 控制器的插件可以是服务/数据使用者或服务/数据提供者。 提供商通过其API在此生成服务和数据。 消费者消费提供者提供的服务。 例如,OpenFlow插件用于添加,修改和删除交换机中的流。 作为OpenFlow插件服务的使用者之一的转发规则管理器为客户端提供了高水平的流编程服务。 这提供了组合北向和南向API的机会。 YANG使用一种用于数据和服务抽象的建模语言。 它提供:1建模单个系统组件。 2定义关系和语义元素。 3对控制器组件提供的功能和XML数据的结构进行建模。
C. Karaf:
可以将应用程序和组件部署到由OSGi运行时组件Apache Karaf提供的轻量级容器上。 Karaf的某些功能包括动态配置,热部署,供应,本机OS集成,日志记录系统,远程访问,管理实例。 下载OpenDaylight控制器软件包后,它将附带所有功能,并且必须手动安装这些功能。 Karaf帮助安装功能。
插件
A. OpenFlow插件
OpenFlow接口可实现SDN架构的转发层和控制层之间的交互。 它有助于实现OpenFlow。 它支持OpenFlow 1.0和OpenFlow 1.3x。 它基于模型驱动的服务抽象层。
OpenFlow 1.3插件支持错误处理,消息处理,状态管理,映射功能,连接处理,事件处理以及传播到上层的功能。
OpenFlow插件功能可以分为四个区域,如下所示:
设备管理器:设备管理器提供了与交换机的低级交互。 它有助于跟踪并执行对请求实体的响应分发。
连接管理器:确定交换机功能和身份并提供早期协商。
统计管理器:它有助于维持计数器与开关之间的同步。
RPC管理器:它有助于将MD-SAL请求路由到设备。
B.SNMP插件
SNMP是用于网络管理的简单网络管理协议。 它用于从交换机,路由器,打印机等收集信息。此插件使控制器和应用程序可以使用SNMP与设备进行交互。 南行插件可帮助充当SNMP管理器的应用程序与充当代理的设备进行交互。 SNMP插件包括:SNMPv1,SNMPv2,SNMPv3支持,作为RPC调用的简单API,使应用程序能够执行以下功能的API:GetRequest,SetRequest,GetNextRequest,GetBulkRequest,Trap支持,InformRequest。 SNMP使用MIB与网络设备进行交互。 MIB的添加包括获取与MIB对应的.my和.oid文件。 在与SNMP插件一起使用之前,将MIB文件转换为YANG模型。 名为“ smidump”的工具有助于将MIB转换为YANG模型。 通过执行以下命令来安装SNMP插件:
feature:install odl-SNMP-plugin
我们使用了两个北向API,即SNMP GET和SNMP SET。 它们具有以下字段Ipaddress,oid,get-type,community。 使用这些北向API的http请求URI的格式如下:
http://localhost:8181/restconf/operation/snmp:snmp-get http://localhost:8181/restconf/operation/snmp:snmp-set
C. RestConf插件:
在OpendDaylight控制器中,Restconf被打包到Karaf捆绑软件/功能中。 下载ODL软件包后,必须手动安装。
API资源包含RESTCONF功能的访问点和状态。 可以通过URI“ / restconf”访问它。 Restconf在端口8181上侦听HTTP请求。 Restconf启用控制器中的数据存储。 有两个数据存储:
- config - contains data inserted via controller
- operational - contains other data
这表示操作数据存储。 它包含将由客户端检索的统计数据和操作数据资源。 客户端无法创建或删除它。
请求和响应数据可以采用JSON或XML格式。 请求数据(输入)的媒体类型是通过HTTP标头中的“ Content-Type”字段设置的。 响应数据(输出)的媒体类型在HTTP标头的“接受”字段中设置。
应用方法
该应用程序用于监视网络并获取设备的实时数据。 该应用程序是使用python使用以下库编写的,其中使用了以下库:httplib2,json,sys,os,crypt,getpass,OrderedDict。在运行该应用程序时,它将对用户进行身份验证并向所选用户提供操作,获取拓扑,获取链接统计信息, 获取系统统计信息,使用SNMP-GET,使用SNMP-SET,实时监控,退出。
A. 获取拓扑,获取链路信息
使用的插件-RESTCONF,OpenFlow。 这些操作将调用topology(),linkStats()方法,这些方法将HTTP请求发送到RESTCONF接口,并从OpenDaylight控制器的数据存储中获取数据,并发送带有JSON数据的响应。 解析此JSON内容以获得拓扑信息,该拓扑信息又呈现给用户。
B. 获取系统数据
使用的插件-RESTCONF,SNMP。 此操作将从用户获取IP地址,并获取网络中相应主机的系统统计信息。 该方法将HTTP请求发送到RESTCONF接口。 SNMP-GET请求被发送到相应的设备以提取数据。 此数据存储在ODL控制器的数据存储中。 HTTP响应与JSON数据一起发送到应用程序。 解析此JSON内容以获取系统统计信息,例如系统描述,CPU使用率,内存使用率,磁盘使用率。
C.使用SNMP-GET:
使用的插件-RESTCONF,SNMP。此操作将从用户获取IP地址,OID,获取类型和社区,并获取网络中相应主机的系统统计信息。此方法将HTTP POST请求发送到RESTCONF接口。 SNMPGET请求被发送到相应的设备以提取数据。此数据存储在ODL控制器的数据存储中。 HTTP响应与JSON数据一起发送到应用程序。解析此JSON内容,以向用户提供所请求OID的值。
D.使用SNMP-SET:
使用的插件-RESTCONF,SNMP。此操作将获取IP地址,OID,社区和为网络中相应主机设置的值。此方法将HTTP POST请求发送到RESTCONF接口。 SNMP-SET请求发送到相应的设备,以更改相应的OID的数据。
E.实时监控:
在我们的应用程序中,我们正在对旧设备和OpenFlow设备进行实时监控。
a. 监视旧版设备:
通过此操作,我们可以了解旧版设备的通信和统计信息。有两个主要函数,分别是snmp()和trap()。第一个使用“tcpdump”并监听端口161以获取所有通信数据。第二个侦听端口162,并使用“tcpdump”转储所有陷阱消息。默认情况下,这两种方法以pcap文件的形式存储数据,可用于分析数据包。
b. 监视OpenFlow设备:
运行应用程序时,默认情况下会执行此操作。 这有助于监视OpenFlow交换机。 在运行应用程序时,它将获取使用方法topo()的拓扑详细信息。 然后,它执行方法checkTopo()以获得拓扑中存在的许多节点和链接的详细信息。 此方法在永远循环中运行,以获取链接和节点详细信息。 trackLinksUp()和trackNodesUp()分别用于查找任何新添加的链接和节点。 trackLinksDown()和trackNodesDown()用于分别找出任何已删除的已添加链接和节点
结果和评估
为了测试管理系统的设计和实现,我们使用了OpenDaylights SNMP插件。 我们的应用程序基础结构包括运行OpenDayLight控制器的Ubuntu VM,用于将不同节点连接到控制器的集线器,一个旧版Cisco c3600路由器,两个OpenVswitch管理Docker容器以及五个Ubuntu Docker容器。 我们利用Internet Docker容器在系统中启用DHCP IP寻址方案,并在Ubuntu Dockers中更新其他存储库以及SNMP守护程序。 拓扑如图所示,其中OpenVswitch的eth0接口充当管理接口,负责通过集线器与控制器进行通信。
主要是这个论文直接在github找代码看到的,然后想试试看里面的简单拓扑是如何搭建以及用了什么平台跑的。