[0047] 下面结合实施例来对本发明做进一步的描述,详细说明如下:
[0048] 如今互联网正处于高速发展时期,流量分类已被广泛应用到多个领域,QoS提供、ISP运营商计费统计、安全相关的应用、入侵检测系统等均有涉及。但随着互联网网络流量的急剧变化,尤其是近年来加密流量占比不断上升的情况下,传统的基于DPI技术的流量解析方法以及基于端口号的流量分析技术已稍显逊色,而传统的机器学习方法又太多地依赖人工选择的特征,如果这些特征集太小,则会严重限制学习结果的泛化性,并且特征工程的提取纷繁复杂,需要通过转换坐标轴的方式来寻找数据的最优分布空间,或是采用特征转换的方式,提取相互独立的特征属性,从而达到数据降维、减少数据冗余的目的;在流量类别持续增加的今天,传统的基于机器学习的方法学习率稍显不足。因此我们决定采用基于深度学习的方法对加密流量进行分类研究。网络数据流量在时空上是具有很强的连续性的,例如在访问一个网页以及进行文件的上传或下载时,都需要先进行TCP的三次握手,建立一个稳定的连接,那么这就意味着在一小段的时间里,该网络中会充斥着大量同种类型的流量;这就为接下来的研究提供了一个灵感,或许可以从流量在时空上有继起这一特性出发,通过分析涉及时间的数据来研究分类算法。
[0049] 本发明的加密流量分类实验整体流程如附图1所示,总体分为三大部分,分别是数据预处理、模型搭建与训练和模型预测。具体说明如下:
[0050] 步骤1,对网络流量数据进行预处理;如图2所示:
[0051] 步骤1.1,利用Python的scipy.io库将ISCX VPN 2016数据集中的data导入。
[0052] 步骤1.2,数据导入成功后,将data划分为样本和标签两部分。
[0053] 步骤1.3,对样本进行中心化、归一化处理。中心化是指让样本数据减去样本的均值,从而达到样本总体呈现以0为中心的正态分布目的;归一化是指让样本数据除以样本的标准差,最终使得样本数据绝对值变为0~1之间的小数,让数据在计算时更加迅速,从而加快模型的收敛。
[0054] 步骤1.4,将标签转化成one‑hot码格式。
[0055] 步骤1.5,将处理好的标签和样本划分为训练集和测试集(测试集占比为总数据集的30%),并将集合中的数据随机打乱。
[0056] 步骤2:设计搭建深度学习模型;
[0057] 步骤2.1,搭建GRU模型。在构建的GRU模型之中,有两层GRU层,一层dropout以及一层dense层。第一二层均为GRU层,每层均有50个神经元。再加入一层dropout层,并将失活因子设置为0.2,即在经过dropout层时,随机让20%的神经元休眠,从而达到预防模型出现过拟合的作用。最后加入一层dense层,将上一层的输出进行全连接,输出7个0~1的数字作为对流量类别进行预测的结果,激活函数选择sigmoid函数;如图3‑图6所示;
[0058] 步骤2.2,搭建LSTM模型。在构建的LSTM模型之中,共有4层LSTM层,4层dropout层,1层全连接层,1层激活层。首先是四层LSTM层,每层各50个神经元;在每层LSTM层后,均设置有一个dropout层,让20%的神经元随机地失活,防止模型出现过拟合现象。在LSTM层的前三层中,我们将参数return_sequences设置为True,目的是让LSTM层中的输出序列返回全部的时间步的隐藏状态值,更利于研究输入数据间的时空序列关系。最后是一层完整的全连接层输出7类结果的预测,并用softmax作为一个激活的函数;如图7‑10所示;
[0059] 步骤2.3,搭建BiGRU模型。在构建的BiGRU模型之中,使用了2个BiGRU层,1个timeDistributed层,1个全连接层以及1个GlobalAveragePooling1D层。首先是一层BiGRU层,每侧GRU层设置80个神经元,共160个神经元,采用ReLU函数作为激活函数,并将随机失活因子设置为0.3,即让30%的神经元随机失活,加快模型的收敛速度。模型中的merge_mode是指前向和后向GRU模型的结合方式,实验中将其设置为concat,即拼接模式。在双向GRU层后紧接着是一层批标准化层,目的是为了防止模型的梯度消失,加快模型的收敛。然后加入一层timeDistributed层,在时间维度上进行全连接,为输入中的每个时间步从序列中分别输出一个时间步,全连接神经元个数设置为80,并选择ReLU函数作为激活函数。再往模型中加入一层BiGRU层以及批标准化层,各层的参数配置与第一次配置的BiGRU层和批标准化层相同。紧接着是一层全连接层,共有7个神经元,对上层的输出进行全连接,输出7个0~1之间的数字,选择softmax作为激活函数。最后是一层GlobalAveragePooling1D层,其作用是为时域信号施加全局平均值,池化后得到最终预测结果;如图11‑14所示;
[0060] 步骤2.4,搭建BiLSTM模型。在我们构建的BiLSTM模型中,有2个BiLSTM层,1个LSTM层以及1个全连接层。首先使用引入了一层BiLSTM层,每侧LSTM设置80个神经元,共160个神经元,并设置dropout值为0.3,即可以让30%的神经元随机失活,避免过拟合现象的发生。然后引入一层LSTM层,同样将dropout值设置为0.3,让30%神经元随机失活,加快模型的收敛速度;再添加一层BiLSTM层,该层的各参数设置与第一次添加的BiLSTM层相同;最后添加一层全连接层用作模型的预测结果输出,全连接层中有7个神经元,最终会输出7个0~1之间的数表示7种流量类型的预测结果;激活函数采用的是softmax函数;如图15‑18所示。
[0061] 步骤2.5,搭建CNN模型。在我们构建的CNN模型中,有2个1DCNN层,1个dropout层,1个MaxPooling1D层,1个展平层以及2个全连接层。先往模型中添加两层1DCNN层,其中,每个1DCNN层中过滤器的数量为64个,卷积核的数量为3,激活函数选择的是ReLU函数,dropout值设置为0.1,即随机让10%的神经元失活,加快收敛速度,防止过拟合现象的发生。添加一层MaxPooling1D层,对数据进行降维,简化之后的计算量,池化层的数量设置为2。再往CNN模型之中加入一层展平层,将从上一层得到的多维数据转化成一维的数据,使其能从卷积层直接过渡到全连接层。紧接着加入一层全连接层,对上层输出结果进行全连接,并将结果传输至下一层;在第一层全连接层中,我们设置了100个神经元,并将ReLU函数作为模型的激活函数。最后再加入一层全连接层用作模型的最终预测结果的输出;在该全连接层中,共有7个神经元,7个神经元分别输出7类不同流量的预测结果,激活函数为softmax函数;如图
19‑22所示。
[0062] 步骤3:利用训练数据集对模型进行训练;训练的小批次样本量为628,每次训练5个批次。
[0063] 步骤4,对模型进行评估。模型评估的性能好坏的标准主要有以下七类,分别为:模型的准确率(ACC)、误报率(FPR)、损失率(Loss)、精准率(Precision)、召回率(Recall)、F1值(F1‑Measure)以及模型的运行时间。在本次实验中,我们还给出了模型在多分类情况下的ROC曲线图。ROC曲线常用于二分类的模型之中,用于衡量模型分类的效果;ROC曲线与下坐标轴围成的面积称为AUC(Area Under Curve),AUC的面积越大,表示分类的效果越好。本实验中采用的深度学习模型均为多分类模型,其ROC曲线表示的是模型对每一类加密流量的分类效果。在本次实验中我们用于分类的加密流量共有7类。
[0064] True positives(TP):指的是样本本身为正例,并在经过模型预测之后,被成功划分成正例的样本个数。
[0065] False positives(FP):指的是样本本身为负例,但在经过模型预测之后,被错误地认为是正例的样本个数。
[0066] False negatives(FN):指的是样本本身为正例,但在经过模型预测之后,被错误地认为是负例的样本个数。
[0067] True negatives(TN):指的是样本本身为负例,并在经过模型预测之后,被成功划分为负例的样本个数。
[0068] 准确率(ACC)计算公式:
[0069]
[0070] 误报率(FPR)计算公式:
[0071]
[0072] 精准率(Precision)计算公式:
[0073]
[0074] 召回率(Recall)计算公式:
[0075]
[0076] F1值(F1‑Measure)计算公式:
[0077]
[0078] 多分类中损失率(Loss)计算公式:
[0079]
[0080] (其中i表示样本,y表示实际的标签,a表示预测的输出,n表示样本总数量)[0081] 步骤5,实验数据分析。
[0082] Loss ACC Precision Recall F1‑score FPR Run timeGRU 0.84 0.71 0.25 0.94 0.39 0.46 70.14s
LSTM 0.059 0.71 0.79 0.59 0.67 0.026 136.55s
BiGRU 0.056 0.75 0.81 0.62 0.70 0.024 108.26s
BiLSTM 0.059 0.71 0.79 0.61 0.69 0.025 356.97s
CNN 0.74 0.73 0.76 0.70 0.73 0.035 8.63s
[0083] 从模型运行后的结果来看,BiGRU模型有着最好的分类结果,多项性能指标在这五个模型之中都处于优秀地位,唯有运行时间,相较于单一模型来说显得比较慢,GRU模型在本次实验中表现稍显逊色,有着较大的Loss值和误检率,精确率较差。LSTM和BiLSTM模型在本次实验中表现中规中矩,除BiLSTM模型有较长的运行时间外,二者各项性能指标间的差距并不大。实验中最让人意外的是CNN模型;CNN模型中的各项性能都有着不俗的表现,而且运行时间较快,准确率较高,在多个指标更是超过了对时序敏感的RNN模型;反观几类不同的RNN模型,除GRU模型分类性能较差外,其余三类模型差距不大;这种种现象都表明着:影响加密流量分类效果的可能不仅仅只有时间,还存在着许多暂时未知的因素。
[0084] 对图像处理效果较好的CNN模型在本次加密流量分类中却展现出了非常优秀的分类性能,在某些方面甚至还超过了一些对时序分类效果较好的RNN模型。各模型比较的结果确实超乎了之前的预期,同时也清楚地表明:影响加密流量分类效果的因素不仅仅只有时间而已,还存在着许多未知的因素,这些因素共同作用并影响着流量分类的效果。加密流量的分类不是一件简单的事情,还需要后续的不断学习和研究,继续挖掘其潜在的联系。
[0085] 加密流量的分类问题犹如一个不透明的沙箱,里面的具体结构和运行原理很难被全部参透。只有不断地试验,大胆推测猜想,并根据实验的结果来找到其内在关联,反解出其内部细节,才能有更进一步的突破。但加密流量分类的前途是光明的,相信在经过后继学者的不断努力和尝试之后,在不久的将来,其内在的原理皆会被参破。加密流量分类的难题终会得到解决,“大数据”时代正在向我们招手。