使用机器学习来进行应用识别

分类暂定如下几种

 

应用

说明

常见场景

对应上表

接入

指用户连上网络到可以开始使用网络服务过程,无线指从搜索到信号开始

1x或web认证

 

网络浏览,

Web浏览,

访问门户网站浏览新闻

搜索引擎、网络新闻、网上支付、网络文学、网上银行、微博、旅行预订、团购、论坛、博客、理财

办公生产,

邮件,云桌面,远程登录

接收发送邮件

电子邮件

在线视频,

在线视频网站,或通过软件访问网络视频

在线观看电影

网络音乐、网络视频

在线游戏

一般指MMORPG,特点是受瞬间异常影响大,

在线RPG等

网络游戏

VOIP,

常用H.323,SIP,MEGACO和MGCP

办公电话

 

文件下载

FTP,P2P

下载电影音乐软件

 

社交应用

Qq,微信,Facebook

文字聊天,语音,视频

即时通信


数据采样

数据只能来自于设备端,包括静态参数和动态参数(静态参数指一般不随时间变化的值,如设备内存,物理端口数,用户配置等,动态参数指会和数据流相关随时间变化的值,如运行时间,cpu利用率,内存利用率,温度,丢包率,带宽利用率,端口输出输入速率,延时,抖动等)。

网络应用类型识别目前有许多方法和尝试,比如H3C的NTA系统是根据端口进行区分,华为则通过支持向量机来进行学习识别。

考虑到本课题的方法必须基于网络设备端,且只能基于目前已有功能提供的数据,并且不能对网络设备正常功能和性能产生不良影响,故考虑使用基于流的报文长度特征对网络应用进行分类。

数据流技术是流量识别中一种常用方法,利用数据流以及数据流中报文的某些信息,可将网络上的数据流进行分类,这种分类可加速应用流量的分类,如游戏应用数据流通常是小报文,而P2P流一般称为大报文。基于这样的特点,选取下列网络参数作为采集样本数据组成元素。其中RFC1573中提供了报文总字节数和单播、组播、广播报文个数统计值,且分出入方向,RMON-MIB-1757中提供了不同长度区间报文的统计值,按64、128、256、512、1024为界分为6组数据。

在设备端端口上采样,采样时间间隔内在对应端口的终端上运行各种应用,见下表

 

应用

标签

终端执行动作

网络浏览,

Web

访问网页

办公生产,

Office

收发邮件

在线视频,

Video

在线观看视频

在线游戏

Game

在线游戏

VOIP,

Voip

拨打voip电话

文件下载

download

下载大型文件

社交应用

Sns

qq

 

并计算该时间内各统计值的变化量,得到一个n元组,并打上标签,构建出训练样本。例如,在时间t0对端口1采集上面各统计值数据,然后端口1下联终端开始观看在线视频,到时间t1结束,再次采集一次统计值数据,将结束时间数据减去开始时间数据即得到目标样本,并且该样本标签为“video”。

这里需要注意2点,1:如果某端口上流量变化量太小,视为没有使用任何应用,具体流量阈值需要根据采样数据评估。2:不是所有应用都是长应用,某个应用流持续时间可能比采样时间短,比如VOIP可能通话就1分钟,如果采集间隔是五分钟,则流量特征会减弱。

由于Rmon采集的报文不同长度分布数据是不区分方向的,所以考虑对采样流程改进,除了voip其他类型直接在终端抓包,保存为标准的pcap文件,然后解析出双向不同长度报文的分布数据。具体方法是,采样用标准pcap格式,每类至少10000报文,100个报文提取为一个样本,这样每类至少100个样本。

web:测试建议,如购物 门户 新闻 体育 IT 论坛 博客 政府 邮箱 交通 商业 中选即可 (采样:捕捉http报文 tcp.porteq 80 && http https)

office:测试建议,如邮件,远程登录,svn,(采样:捕捉outlook远程登录)

video:测试建议,优酷网 爱奇艺 土豆网 搜狐视频 凤凰视频 腾讯视频 新浪视频 中选即可(采样:捕捉流量最大ip的双向报文)

game:测试建议 英雄联盟 穿越火线 地下城与勇士 魔兽世界 梦幻西游 qq飞车 传奇 逆战 炉石传说 剑灵 中选即可(采样:捕捉游戏服务器ip的双向报文)

voip:测试建议,公司voip电话即可(交换机上sflow采样捕捉指定ip即语音网关的报文)

download:测试建议(ftp,http,p2p(bt,迅雷)即可(采样:ftp,http,p2p(bt,迅雷),bt基于多ip抓报文)

sns:测试建议,qq,微信即可(采样:基于通讯工具的端口抓包netstat -aon | tasklist,微信抓取看下能否通过有线网络捕捉 或者 pc版)       

无监督学习

首先考虑使用聚类方法来对数据进行分类,这里没有使用到数据的标签。因为后续需要使用该算法结果对新的输入进行分类,所以需要使用能够支持增量分类的方法,从而排除了CURE算法,而DBSACN算法因为需要预先指定邻居数(资料16),也视为不支持增量分类。

这里采用KMeans和KMedoid算法(两者对比:K-MEANS算法产生类的大小相差不会很大,对于脏数据很敏感,KMedoid算法改善了对噪声敏感问题,但时间复杂度较大)。

根据前面列举的网络参数,采集了47组数据并使用两种聚类算法进行分类,从结果来看两种算法都无法正确对类型进行分割,其中KMeans将所有数据识别为一类,完全无法区分,而KMedoid算法除了对办公应用较好区分,其他几类甚至连中心都无法区分开来(见下表)。

分类中心(字母表示应用,数字表示该类应用中第几个样本)

该类集合(数字表示全局样本序号,后面字母加数字见前面所述)

office2

( 11 game1 ) ( 12 game2 ) ( 18 office1 ) ( 19 office2 ) ( 20 office3 ) ( 21 office4 ) ( 23 office6 ) ( 44 web9 )

web6

( 26 vedio3 ) ( 28 vedio5 ) ( 41 web6 ) ( 45 web10 ) ( 46 web11 ) (47 web12 )

web7

( 13 game3 ) ( 15 game5 ) ( 16 game6 ) ( 17 game7 ) ( 22 office5 ) ( 29 vedio6 ) ( 36 web1 ) ( 37 web2 ) ( 38 web3 ) ( 42 web7 ) ( 43 web8 )

video4

( 3 download4 ) ( 4 download5 ) ( 14 game4 ) ( 27 video4 ) ( 32 video9 ) ( 39 web4 ) ( 40 web5 )

video7

( 0 download1 ) ( 1 download2 ) ( 2 download3 ) ( 5 download6 ) (6 download7 ) ( 7 download8 ) ( 8 download9 ) ( 9 download10 ) ( 10 download11 ) ( 24 video1 ) ( 25 video2 ) ( 30 video7 ) ( 31 video8 ) ( 33 video10 ) ( 34 video11 ) ( 35 video12 )

 

因为前面采样数据中只有报文字节总数和各类报文个数,而没有报文平均长度,从业务特征来看报文长度更能体现流量特性,故考虑新增两个参数:

averInOctets=ifHCInOctets/(ifHCInUcastPkts+ifHCInMulticastPkts+ifHCInBroadcastPkts)和averOutOctets=ifHCOutOctets/(ifHCOutUcastPkts+ifHCOutMulticastPkts+ifHCOutBroadcastPkts),同时消去冗余数据ifHCInOctets和ifHCOutOctets。

参数改造后,再次用KMedoid算法分类得到结果如下表

 

分类中心(字母表示应用,数字表示该类应用中第几个样本)

该类集合(数字表示全局样本序号,后面字母加数字见前面所述)

准确率

download4

( 3 download4 ) ( 4 download5 ) ( 8 download9 ) ( 9 download10

) ( 10 download11 ) ( 19 office2 ) ( 27 video4 ) ( 28 video5 ) ( 29 video6 )

56%

game7

( 17 game7 )

100%

video8

( 0 download1 ) ( 1 download2 ) ( 2 download3 ) ( 5 download6 ) (6 download7 ) ( 7 download8 ) ( 15 game5 ) ( 24 video1 ) ( 25 video2 ) ( 30 video7 ) ( 31 video8 ) ( 33 video10 ) ( 34 video11 ) ( 35 video12 ) ( 39 web4 ) ( 40 web5 )

44%

web12

( 11 game1 ) ( 12 game2 ) ( 13 game3 ) ( 14 game4 ) ( 16 game6 ) (18 office1 ) ( 20 office3 ) ( 26 video3 ) ( 32 video9 ) ( 36 web1 ) ( 37 web2 ) ( 38 web3 ) ( 41 web6 ) ( 42 web7 ) ( 43 web8 ) ( 44 web9 ) ( 45 web10 ) ( 46 we

b11 ) ( 47 web12 )

52%

office6

( 21 office4 ) ( 22 office5 ) ( 23 office6 )

100%

 

可以看出根据新的参数,拆分出的类型中心符合预期,但每类中还是有混杂其他类型,整体准确率只有70%,某个类型甚至准确率还不足50%

仅使用聚类算法效果来看,区分度并不高,一种可能是目前采集的网络参数还需要增加种类( 这个要继续分析 [l1] ),还有一种可能是受本身数据类型影响(这两种算法只能发现球形或凸形聚类类型,参考资料17,而目前采集的网络参数集形态并不知道)。此外,聚类算法中没有体现出不同属性的权重(备注:目前基于权重的聚类算法有两类,一种是通过人工设置权重

监督学习

这部分描述对采集的数据通过监督学习方法进行应用识别的过程

1.      根据前面选定的网络采样参数,以及对应标签,开始训练。对于样本数目,参考资料15中的建议:“要训练出一个性能良好的模型,所需训练样本数量应是模型参数数量的10倍。”,所以这里至少要140个训练样本,而且要得到良好的训练模型,样本数量应该还要更多。

2.      使用BP算法得到拟合公式(决策树适合属性值为离散的目标函数值也为离散的情形,所以这里不考虑使用决策树。由于前面聚类方法效果不好,这里也暂不采用RBF进行学习),由前可知输入层节点数为14,因为有7类应用,输出层节点为7,即对每一个流量组,输出7个值,分别表示该流量变化量所代表应用的概率。考虑选择反向传播算法,原因是目标函数可以实数值(决策树一般是离散值),且对训练样本的容错性好,训练完成后求值速度快。

3.      通过检测样本判断正确率。

 

训练完成得到4个矩阵,分别是:

l  输入层到隐含层的权重矩阵;

l  隐含层到输出层的权值矩阵;

l  隐含层的阈值矩阵;

l  输出接点的阈值矩阵;

 

对训练出来的权重矩阵,输入测试样本,即可得到一个六元组,每个元素表示对应应用标签的计算值,如果为1,表示样本匹配该应用,如果为0,表示样本不匹配该应用。现在将测试样本带入进行计算,以检测上面训练结果的准确度。对样本输出进行如下转换,取每列中的最大值为1,其余设为0。然后再和测试样本的标签对比,计算神经网络预测的准确率。计算公式为match_ratio=1-预测错误个数/总预测个数,平均准确率为83%,最高准确率有90%,说明在单一应用的条件下,使用该模型对应用标签计算的准确率较高。

改进的BP算法:上述算法里权值矩阵、阈值矩阵的初值均是随机的。如果把之前训练中,挑出准确率最高的网络的权值矩阵、阈值矩阵拿来做初值,那么是否训练更快、更好。具体的,第二次训练开始,在之前训练的网络中储存准确率最佳的网络,并将此网络的权值阈值作为新训练网络的初值。实践结果:单一采样平均可以从80%提升到95%。准确率有明显提升。

下一步继续采集样本,和前一步不同的是,采样时运行多个应用,即样本标签中有多个1,比如同时运行web和video,对应标签为<1,0,1,0,0,0,0>,。混合采样最终得到254个样本,按4:1的比例拆分为训练样本和测试样本,训练完成后,对测试样本进行预测,预测前先进行预处理,即结果中每列中大于0.5的值设为1,其余的设为0。比如<0.1,0.9,0,0,0,0,0>经过预处理变为<0,1,0,0,0,0,0>。这样就使得标签里全部是非0即1的数值。

接下来将处理后的标签与测试样本的标签作对比,计算神经网络预测的准确率。混杂应用准确率具体计算方法是:按标签中应用的命中率来计算,也就是检查标签中为1的有几个预测正确,几个错误,将(正确的数/应用总数)视为准确率。比如,测试标签为<0,1,1,1,0,0,0>,而计算出来的标签是<1,1,1,0,0,0,1>,则这里应用总数为3,预测准确的应用为第二个和第三个,故正确数为2,最终计算出准确率为(2/3)=66%

通过以上方法采样训练得到,混杂应用的平均准确率为76%,最高值83%

针对混杂采样加入后,准确率降低的原因分析:不同应用数据流量混杂在一起,无法突出应用特征,比如报文长度大的流量掩盖掉报文长度小的,若干个长度较小报文的字节总数叠加等于一个报文长度大的。

 

由于单一识别准确率较高,考虑利用sflow采样特征,即sflow对每个报文采样提供了源mac、目的mac、源ip、目的ip、源端口、目的端口、报文长度这些信息,将采样的数据按目的端口分类,目的端口相同的归到一类,这一类视为一种应用,然后根据报文长度生成数据采样中的样本形式(这里有个要求,需要同一目的端口的报文大于某个阈值,否则不能很好的模拟出样本形式),并用单一应用训练出来的网络进行识别,最后将所有识别出来的应用按比例合并。

比如,sflow采样到目标端口为6633的报文有11个(可能mac地址和ip地址不同),将这11个报文的长度按[64,128,256,512,1024]为界统计个数,然后模拟出前面数据采样的比例:"99 0 0 99 0 0 0 3 0 8 0 0 214 214",该序列中前6项,即单播广播组播比例暂时按固定值输入,最后两项报文平均长度按采样报文长度和/采样报文个数来算,出入方向相同。最后将该序列作为输入,放到单一网络中计算,得到

0.0     1.0    0.0     0.0     0.0    0.0     0.0,

即预测该流应用是office。如果出现一个以上非0值,则取最大为1,其他为0。按此方法,对采样个数大于某阈值(暂定1个)的流进行计算,得到一个应用向量列表,再按流中报文个数比例求和,得到总的应用比例。以下是3次采样统计的应用比例

Web

Office

Video

game

Voip

Download

sns

35.73

0.48

21.1

0.0

3.84

23.5

15.35

41.23

0.0

9.94

0.42

14.38

30.87

3.17

32.75

0.0

13.63

0.0

5.05

30.11

18.46

 

由于sflow采样是在汇聚交换机上进行,而非接入交换机所以这部分数据没有标签,无法进行准确率计算,只能根据人工判断。从比例结果中看,office和video这2类应用比例和实际情况出入较大,其他类型的应用较符合实际情况。

通过试验,sflow采样流中有68%可以根据端口号来进行应用分类,剩下32%根据神经网络进行分类,理论准确率为68%+32%×0.90=96%,即为采样中流的应用分类准确率。因为sflow默认采样是18192,所以这里只能判断出现哪些应用,而不能判断有哪些应用遗漏。改进方法:延长采样时间,即应用分类重点是反映终端用户稳定使用网络服务的情况,不考虑某些短时间(比如5分钟)或者临时应用(偶尔使用一次)。

为了提升准确率,还添加了一些额外的判断策略。知名端口除了可以用来判断应用类型,也可以用来判断不是哪些应用类型。例如80端口不可能是voip。Sflow中采样的IP地址如果源地址和目的地址都是局域网地址,则应用类型不会为game。

 

实际准确率计算方法:将该算法部署在实际网络中,对每个终端用户应用计算,如果终端用户在运行4个应用,算法计算匹配3个,则准确率为3/4=75%。

验证

目标地址识别

不同终端即使在使用相同的应用,其应用的目标地址也可能不同,例如访问国内视频网站和国外视频网站,使用HTTP下载和使用P2P下载。所以可能浏览网页A速度快,体验分数高,而相同网络环境下浏览网页B速度慢,体验分数低。所以如果能识别出终端应用具体的目标地址,可以更精确的度量出网络体验值。

考虑几种报文采样方案:镜像功能需要专门网络分析仪接到设备端,且完全镜像数据量太大。IPFIX只在高端交换机上支持,因此目前考虑的方案是sflow,通过间隔采样,在收集器主机上捕捉sflow报文并解析内容。具体方法是在设备端使能sflow采样,在设备端使用wireshark命令行工具监听sflow端口捕捉并解析sflow报文。为了不影响设备端性能,sflow采样间隔不能过于频繁,默认值是8192个报文采样一个。

识别报文的目标地址后,下一步就是识别出该报文的应用。由于sflow采样只提供了报文头部,其包含信息有MAC地址,IP地址,协议类型,端口号,报文长度,而目前应用识别则主要依赖报文负载内容解析,所以只能根据协议类型、端口号、报文长度这几个信息来做有限的推测。

         某些应用可以根据知名端口来判断,比如邮件、远程登录等办公应用,而web、下载或视频则可能都使用80端口来进行。



你可能感兴趣的:(使用机器学习来进行应用识别)