许 刚 王 展 臧大伟 安学军
1(中国科学院计算技术研究所高性能计算机研究中心 北京 100190) 2 (中国科学院大学 北京 100049) (xugang10@ict.ac.cn)
Fig. 1 Traditional data-center topology图1 传统数据中心拓扑结构
随着云计算和大数据的发展,数据中心(Internet data center, IDC)建设迎来高潮.当前数据中心应用如在线零售、搜索、社交网络、云盘、广告推荐系统等通常需要高带宽的稳定网络,然而在网络故障或路由抖动时,这些应用系统经常会在用户访问和业务服务器之间产生路由频繁抖动的情况,路由抖动会导致用户访问和企业收入明显减少.
数据中心网络会频繁发生网络抖动,导致丢包增多、时延增大和吞吐量下降,已成为数据中心的性能瓶颈,严重影响业务的性能和服务质量.当网络发生故障时,故障定位对网工来说是一个非常棘手的问题,现有的解决方案主要包括2种:1)通过搜集网络设备上系统日志使用3-sigma、分段3-sigma、Holt-winters和 ARIMA等机器学习方法进行异常检测[1];2)经验丰富的网工根据自身经验结合故障特征手动解决.然而无论是通过算法还是经验进行故障发现和设备定位普遍都是预测性的,仍然会出现误判和误报的问题,且实时性不高.
针对这一问题,我们提出基于链路状态数据库(link state database, LSDB)的数据中心网络异常检测方法LSAP,通过搜集LSDB,利用改进Dijkstra算法重计算全网路由形成路由择域信息库(routing information base, RIB),根据LSDB快照和RIB快照比对关联链路变化和路由变化进行异常定位,发现网络问题.
传统数据中心网络是由核心层、汇聚层和接入层3层网络设备组成[2].如图1所示,网络呈现出由底层网络的物理服务器到上层网络的核心路由器所组成的3层网络层次结构,其中核心层设备接入上层网络,核心层设备与汇聚层设备相连,汇聚层设备与接入层设备相连,接入层设备与底层物理服务器相连.核心层位于全局网络的顶端,核心层的路由连接在整个数据中心网络中起到关键的作用,通常会在设备之间建立冗余连接提高网络稳定性.
伴随着业务访问量的增长,数据中心所需的服务器数量也在持续增长,为满足用户访问BAT(Baidu Alibaba Tencent)数据中心平均每月就有2 000台以上的服务器上线.为降低数据中心计算节点间的通信延时,减少网络中间层次、网络扁平化势在必行.如图2所示,网络扁平化后对核心设备交换能力要求降低,网络既能快速收敛,又能满足服务器快速上线的需求.
Fig. 2 Flat topology图2 扁平拓扑结构
网络数据是进行故障检测、故障定位和流量分析的原始数据,它能够体现出当前网络状态和流量特征,通过对多维度网络数据的分析、统计和计算,建立网络模型,实时监控网络,具体数据分类如表1所示:
Table 1 Network Data Classification表1 网络数据分类
1) 网络探针数据[3]
2) 流数据
流数据是指通过对流经网络设备的数据包的头部进行分析,采集经过设备的流信息.流数据并不检测流经设备的所有数据包,而是根据采样比进行采样、分析和统计.流数据主要包括数据流的源地址、目的地址、源端口、目的端口和数据大小,通过流数据能够用来检测异常的数据流[4-5].目前成熟的流数据采集技术包括Cisco的NetFlow技术、Huawei的NetStream技术和Juniper的sFlow技术等,NetFlow技术应用范围最广,一共包括V1,V5,V7,V8,V9这5个主要的实用版本.
3) 路由协议数据
路由协议是指通过在路由器之间共享路由信息来支持可路由协议.路由信息通过在相邻路由器之间泛洪,确保所有路由器同步路由信息并进行路由收敛,从而知道到达目的路由器的路径.通过与数据中心内网络设备建立连接关系,就可以采集到域内路由信息并构建网络拓扑和获取设备间链接状态.路由协议数据能够进行异常检测和故障定位,但是难点在于如何获取全网路由信息,利用采集的路由信息检测异常和定位.本文进行异常检测和故障定位的源数据就是数据中心网络中链路状态数据库(LSDB)数据,通过LSDB复原路由表,比对LSDB快照和路由表快照进行检测和监控.
4) 网络管理协议数据
网络管理协议是一种提供给网络管理员用于网络监控的工具,具体包括链路状态信息、网络流量统计、设备信息、网络参数等多维度全方面信息,是进行异常检测中普遍使用的监测数据.由于该类型数据能够提供详细的网络信息,因而通过将不同设备间的网络管理协议数据进行关联分析就能够进行异常检测[6-9].简单网络管理协议(SNMP)是基于TCPIP的网络上使用最为广泛网络管理模型,既可以管理最简单的网络实现基本的管理功能,又满足大型复杂网络的管理需求.SNMP是由一系列协议组和规范组成的,提供了一种从网络设备中收集网络管理信息的方法.
近年来,国内外在路由异常检测及分析方面的研究工作有很多,相关方向的研究、文章有很多.现在数据中心中还没有成熟的路由异常检测和分析工具,在路由异常定位方面相关研究也非常有限.国外的公司和大学如Google,Facebook,AT&T、哥伦比亚大学大学等高校已经对路由检测开展了一些研究,国内清华大学、国防科技大学等大学在协议主动测试和被动测试方面进行了大量的研究和开发,阿里巴巴数据中心和百度数据中心也在进行路由异常检测方面相关研究.从这些研究成果中总结出以下3种路由检测方法:
1) 基于SNMP协议的网络监测系统利用SNMP MIB库提供的网络信息构建网络拓扑和监控端口等,使用trap功能实现异常发现和告警.现在比较成熟产品包括Tivoli NetView和MasterScope等,该类产品优势在于能够实现拓扑构建、网络性能分析和异常告警,但是路由异常功能在异常检测中实现的功能较少,未实现路由异常定位且需要使用日志信息和其他监测工具辅助,增加了网络负担和部署负担.
2) Shaikh等人[10-11]和Zhang等人[12]在IGP(内部路由协议)路由异常检测方面贡献突出,分别阐述了IGP内路由检测方法并进行了实验验证.Shaikh在OSPF协议方面进行大量研究,他首先从运行OSPF协议的大型网络中学习OSPF协议运行行为,主要是对链路状态通告行为的分析.在进行大量实验后,Shaikh开始研究利用OSPF协议构建网络拓扑,通过被动监听网络数据流构建拓扑结构,最后比较了利用OSPF协议构建拓扑和利用SNMP协议构建拓扑在可靠性和实时性上的差异[10],总结出由拓扑结构改变或其他原因产生的网络异常信息,并提出一种OSPF路由监测系统的实现方法.Shaikh等人[10-11]指出该系统能够有效地发现网络中的拓扑异常.但是Shaikh等人[10-11]只是通过协议获得了网络拓扑信息,并只能发现拓扑改变,在功能上和性能上不能完全用来检测路由异常.
3) 在域间路由协议(border gateway protocol, BGP)路由异常监测工作中,以Oregon大学的Route Views项目[13]、RIPE NCC的RIS项目[14]、UCLA的Zhang[15]以及哥伦比亚大学的Al-Musawi等人[16]为代表主要进行域间路由异常检测工作,这些工作主要面向公共的BGP 路由数据服务、BGP路由动态行为的可视化、基本的安全监测服务3个方面.
本文研究与上述研究不同之处主要存在于4个方面:
1) 提出一种新型方法导出数据中心OSPF和ISIS网络内的全网路由信息,为复原路由表提供原始链路状态信息.
2) 利用改进Dijkstra算法复原路由表,提出改进算法并给予理论验证.
3) 相比于Shaikh等人[10-11]、Zhang等人[12]、Al- Musawi等人[16]研究的内容都是路由异常问题,本文研究内容基于数据中心内部路由异常,而不是域间路由异常;与Shaikh等人[10-11]和Zhang等人[12]不同的是不仅仅能够发现路由异常,还能够迅速进行异常源头定位.
4) 除路由异常检测外,利用链路状态数据库实现路由攻击和异常定位.
本节主要介绍如何通过LSAP进行路由异常检测.如图3所示系统的主要组成部分.首先通过软件路由器或者开启BGP-LS协议采集网络路由信息,导出IGP协议中的LSDB,由于在每个区域内路由器定期同步链路状态数据库,因而我们只需要采集所有区域而不是所有路由设备的LSDB,采集方案我们优先选择BGP-LS,软件路由器作为备选采集方案,然后根据改进的Dijkstra算法计算路由表(RIB),最后比对LSDB 快照和RIB快照进行快速发现链路状态变化和路由变化等.
Fig. 3 Anomaly detection process of LSAP图3 LSAP异常检测流程
在本文中我们优先选择BGP-LS,软件路由器作为备选采集方案导出LSDB,数据中心网络按区域划分收集.数据中心通常会维护一张网络设备信息表,包括设备名、路由协议类型、区域号、设备型号、设备厂商、部署时间等.在本系统部署之前我们会要求设备厂商提供部署BGP-LS协议的设备型号集合B.设:
Ii={ISIS第i个区域内路由器集合}=
{Dk|Dk∈R且Dk拥有相同区域号};
I={ISIS区域所有路由器集合}=∪Ii;
Oi={OSPF第i个区域内路由器集合}=
{Dk|Dk∈R且Dk拥有相同区域号};
O={OSPF区域所有路由器集合}=∪Oi.
算法1. LSDB采集算法.
① 遍历所有ISIS区域;
② 遍历判断ISIS区域内设备类型是否属于B;
③ 记录设备的采集类型,1表示采集方案为BGP-LS,0表示采集方案为Zebra的采集方案;
④ 遍历所有OSPF区域;
⑤ 遍历判断OSPF区域内设备类型是否属于B;
⑥ 记录设备的采集类型,1表示采集方案为BGP-LS,0表示采集方案为Zebra的采集方案.
现存的路由表获取方法大致分为3种:登录路由器CLI收集、厂商提供和网络收集.登录路由器查看往往需要手工辅助,受限于数据中心内路由器数量庞大和不同厂商路由器的路由表格式不同,该方式获取路由表可行性较低;厂商提供往往需要配置专用路由器提供对外输出路由表接口,该方式获取的路由表精确快速,但是价格较为昂贵,非专用路由器无法直接导出路由表数据;网络收集主要是利用网络内泛洪链路状态信息,利用路由计算算法复原路由,该方式性价比较高,提供较为准确的路由表,速度上仅低于专用路由器.
在导出的LSDB可以获取各区域中的拓扑链接关系以及连接权值Metric,即可形成赋权图G=(V,E,W),设节点v0,v1,…,vm∈V,边e1,e2,…,en∈E,W为边(i,j)∈V对应的wi j的集合.加权图用邻接矩阵A表示,规定:若vi和vj之间没有链接,则ai j=∞;若vi和vj之间存在链接,则ai j=wi j,即为相连路由器之间Metric值;若i=j,则ai j=0.在用链路邻接矩阵是指行到列之间路径条数.在用链路邻接矩阵U表示,规定:若vi和vj之间没有链接,则Ui j=0;若vi和vj之间存在链接,则Ui j表示相连路由器之间Metric为ai j的条数.
2.2.1 Dijkstra算法的基本思想
Dijkstra算法是指在一个赋权图查询2个指定顶点vi和vj之间的最短路径.该算法是一个求解最短路问题的算法,不仅能够找到最短的(vi,vj)路径,而且可以给出vi到G中所有顶点最短路径.
最短路径的计算步骤如下:
设S表示已求得的从vi出发的最短路径的终点集合;
m阶标识矩阵R,存储已求得的从vi到其他顶点vj的所有最短路径上的此顶点的前驱顶点.
① 初始化S和R,S={vi},R=(ri j).
② 选择vm,使得:
aim=min {aik|vk∈V-S},令S=S∪{vm}.
③ 修改从vi出发到集合V-S中所有节点vk的最短路径长度.
如果:amk> 0且aim+amk 则修改为aik=aim+amk. ④ 重复操作②③共n-1次,即可求得从vi到其余各定点vj的最短路径长度. 但是,Dijkstra算法只能求得节点间一条最短路径,不能保存所有最短路径且②③操作需重复n-1次,本文首先优化Dijkstra算法,解决大规模网络节点和链路过多路由计算时间过长的问题. 2.2.2 Dijkstra算法的优化 在网络中心的网络模型有2个特点: 1) 由于数据中心网络配置现状,同一层次路由器间接口链路的Metric值通常是相等的(存在不相等情况); 2) 鉴于特点1和数据中心冗余链路的存在,节点之间总度量相等链路具有多条;从单节点到其余节点总度量相等的个数有多个. 优化采取的方案是: 优化的目标是提高集合S的效率,最大程度地加快增加S中与最短距离路径相关的顶点的计算和减少S中与最短距离路径无关的顶点的计算. 选择新节点加入S时,不仅只选择一条最短路径的节点加入S,而是将最短路径相等的所有节点加入S; 选择新节点加入S时,不仅只选择离vi最近的顶点加入集合S,而是向着从vi到vj最短路径不断逼近的目标而选择顶点加入集合S. 标识矩阵R用来存储从vi到其余各顶点的所有最短路径的此顶点的前驱顶点,即若从vi到vj的一条最短路径为vi,v2,v4,…,vj,在此路径中,v2是v4的前驱顶点,则R[2][4]=1,否则R[2][4]=0. 优化最短路径的计算步骤如下: ① 初始化S和R,S={vi},R=(ri j). ② 选择aim相等的所有节点vm,S′={vm}且S′⊆V-S使得aim+hopsm×metricmin=min {aik+hopsk×metricmin|vk∈V-S},令S=S∪S′. hopsm:vm至vj节点之间的跳数,目前数据中心内多种业务并存,通过即时通信客户端运行主动探测工具ping和traceroute命令获取数据中心内部节点间时延数据和跳数; metricmin:区域内最小Metric值,相同区域内Metric值相差不大. ③ 修改从vi出发到集合V-S中所有节点vk的最短路径长度. 如果:amk>0且aim+amk 则修改为aik=aim+amk. ④ 重复操作②③直至求出最小ai j,即可求得从vi到其余各定点vj最短路径长度. ⑤ 将最短路径按照前驱节点规则添加到R中. 从优化最短路径的计算步骤中可以发现,优化算法是相似于Dijkstra算法的,但对顶点的选择是不同的.在Dijkstra算法中,不断选择离vi最近的一个顶点加入到集合S,而没有考虑最短路径的顶点个数和把vi,vj同时联系起来考虑.在优化算法中,向着vi和vj最短路径的不断逼近的目标而选择顶点加入集合S中,因此,在集合S包含的是在vi和vj最短路径局部范围内的部分节点,而并不计算全部节点.在这种情况下,优化算法的集合S和②③迭代次数相较Dijkstra算法的集合S和②③迭代次数小得多、少得多. 2.2.3 Dijkstra改进算法正确性证明 Fig. 4 Shortest path graph from vi to vj图4 vi到vj最短路径 在改进算法中vj加入S时: 1) 若mqS时 已求得最短距离A(vi,mq)+(hops(mq,vj)×metricmin)≥A(vi,vj)+0=A(vi,vj),由于hops(mq,vj)×metricmin≤A(mq,vj)=a(mq,vj),因此可以推出A(vi,vq)+a(mq,vj)≥A(vi,vj). 2) 若mq∈S时 当mq加入S时A(vi,vj)=min {A(vi,vj),A(vi,mq)+A(mq,vj)}=min {A(vi,vj),A(vi,mq)+a(mq,vj)},记为A1(vi,vj). 由Dijkstra改进算法可知vp加入S时修改了A(vi,vj)值,因而当vp加入S时A(vi,vj)=min {A(vi,vj),A(vi,vp)+A(vp,vj)}=A(vi,vp)+a(vp,vj),A(vi,vj)即为改进算法求取的最终vi到vj的最短距离. ① 当mq先于vp加入S时,vp加入S时修改了A(vi,vj),A(vi,vj)=A(vi,vp)+A(vp,vj) ② 当mq后于vp加入S时,vp为最短路径的最后节点,mq加入S时并未修改A(vi,vj),A1(vi,vj)=A(vi,vj)≤A(vi,mq)+a(mq,vj). 综上所述,不论mq何时加入S中,可得 A(vi,vj)≤A(vi,mq)+a(mq,vj). (1) 根据假设在vi到vj存在的最短路径为vim1m2m3…mqvj,最短路径为A′(vi,vj). A′(vi,vj)=A′(vi,mq)+A′(mq,vj)= (2) 因为改进算法求出最短路径为A(vi,vj),根据假设已知最短路径为A′(vi,vj),因而 A′(vi,vj) (3) 将式(1)(2)带入式(3),可以推出: A′(vi,mq)+a(mq,vj)=A′(vi,vj)A(vi,mq)+a(mq,vj), 可得:
A′(vi,mq)+a(mq,vj).