于 帅,董育宁,邱晓晖
(南京邮电大学 通信与信息工程学院,江苏 南京 210003)
网络流量分类(Network Traffic Classification,NTC)被用于服务质量(Quality of Service,QoS)保证[1]、流量工程,以及恶意软件检测等,是一个热门的研究领域[2]。 近年来随着加密技术如VPN、TOR等的应用[3],以及视频应用的大量增加,使这项任务变得更加困难。
目前,主要的NTC 方法采用基于统计特征(Statistical Feature, SF) 的 机 器 学 习( Machine Learning,ML)[4]方法;通过人工选择的特征,应用监督学习方法进行分类,如决策树[5]、随机森林[6]、支持向量机(Support Vector Machine,SVM)[7]、K 均值[8]等。 这些方法存在一些缺点。 例如,人工选择特征会花费大量的时间,因此,传统ML 在特征选择(Feature Selection, FS)上存在较大的挑战;深度学习(Deep Learning,DL)[9]能够自动从原始数据中读取特征,克服了手工选取特征的弊端,但是在融合特征的利用率、有效性等方面仍有待改进。
鉴于此,本文提出一种新的基于DL 的方法,能够对细粒度流量取得较好的分类效果。 这里所说的细分类是将同一类型的应用如音频业务、视频业务等,细分为子类,例如视频类按照清晰度细分类[10]。对每一种应用流量提取原始统计特征、特征融合(Feature fusion, FF)[11],特 征 融 合 对 原 始 特 征(Original feature,OF)起到扩展特征信息的作用,然后生成灰度图并使用卷积神经网络(Convolutional Neural Networks,CNN)[12]进行分类。 本文的主要贡献有以下3 点:
(1) 设计了一种新的流量表征思路,将特征融合的思想用到流量分类之中。 将原始特征和融合特征生成图像使用CNN 模型分类,相较于传统ML 方法能够自动寻找、更新特征。
(2) 设计了新颖的FF 算法,使用多种运算对OF 进行扩展,将几十个OF 扩展到上万个。
(3) 对不同粒度NTC 均取得了较好的效果;相较于已有方法,准确率和运行时间上有明显的优势。
目前解决NTC 的方法主要分为4 类。 (1) 基于有效载荷的流量分类方法,也称作深度包检测(Deep Packet Inspection,DPI)[13]。 (2) 基于端口的方法[14]。 但随着动态端口号的使用,这两种方法均不能用于加密流量分类。 (3) 基于统计和ML 的方法:通过手工提取相关特征,并应用复杂模式或监督学习算法实现流量分类。 (4) 基于DL 的方法,也被称为端到端的方法。 端到端是指将特征提取、FS和流分类集合到一个框架中。 端到端方法不依赖于手工选择特征,通过自动学习特征实现对网络加密流量的分类[15]。
Zhang 等[16]提出了一种加密流量分类方法,可以过滤和标记未知的应用流量。 He 等[17]在“ISCX VPN”数据集上取每个流的前90 个数据包,在“ISCX non⁃VPN”上取前20 个数据包进行实验,准确率有所提高。 Liu 等[18]提出了FS⁃Net 框架,并应用双向门控循环单元(bidirectional⁃Gating Recurrent Unit,bi⁃GRU)对加密流量的序列特征进行处理。Yao 等[19]实现了一个基于长短记忆神经网络(Long Short Term Memory,LSTM)的模型,将每个流的前10个数据包作为模型输入。 作者通过可训练的注意向量,应用注意机制观察每个数据包的贡献。 Huoh等[20]将原始字节和元数据转换为有向图的形式,在不同的数据集上使用图神经网络进行分类,改善了分类效果。
文献[5]提取95 个SF,并使用决策树分类器进行分类,取得了不错的分类结果。 Salman等[21]提出了一种基于SF 的图片生成方式。 首先提取流中前n∗n个包的到达时间间隔(t)、数据包大小(packet size, ps)、协议(p)、流方向(d)做成一个数组[ps,t,p,d],并将这些数据作为一幅n∗n的RGBA 图像的像素点;之后通过CNN 进行分类,得到了较好的分类结果。 Shapira等[22]使用时间长度为60 s 的上行流数据包信息生成图片。 首先将上行时间和ps 规整到0 ~1 500,作为灰度图片的横纵坐标,再将单位时间内的包数目规整到0~255 作为图片的像素点,通过CNN 进行分类。 孔镇等[23]在文献[22]方法的基础上增加了下行流数据包信息,在两个真实数据集下进行实验,效果较原方法有所提高。 文献[21-22]都是通过五元组生成图片,只使用了时间、ps、协议、IP 地址或者其中的几类。 然而,对于一些很有用的信息,如最大包、最小包、有效IP 数、子流的特征等没有很好地利用。 由于OF的数目不多,不足以生成大小合适的灰度图片。
受到以上启发,本文提出一种基于FF 的图片生成方式,将OF 通过FF 扩展到21 616 个特征,按每个特征对应一个像素点,生成灰度图片,最后输入到CNN 之中。
实验采用了两个真实网络数据集:“ISCX non⁃VPN”[24]数据集,下面简称为InVD,是2016 年NewBrunswick 大学的Gerarard Drapper 团队采集完成的。 本文使用了其中的4 个网络应用类型,分别是视频、语音通话、聊天、IP 语音。 视频数据集(Video Dataset, VD)是2019—2020 年期间,本实验室在南京邮电大学校园网使用Wireshark 软件采集得到的,共约58 GB。 它细分为6 个子类,每一种类型都包含至少两种应用的流量。 应用包括虎牙、斗鱼、腾讯视频、爱奇艺视频和优酷视频。表1 和表2 分别给出了这两个数据集的具体信息。本文所提到的数据流,定义为具有相同五元组的数据包集合,具体为源IP、源端口、目的IP、目的端口、传输层协议。
表1 VD
表2 InVD
数据预处理分为5 步。 (1) 提取数据流,通过Wireshark 采集的流量储存在.pcap 文件中,提取得到的双向数据流中包含数据包的到达时间、源IP 地址、目的IP 地址、传输协议、ps 五个信息。 (2) 删除空文件及重复文件。 (3) 流量分割,用长度为30 s的流段进行试验。 (4) 按应用类型对流段进行特征提取,对于每一个30 s 的流样本,提取上行、下行、整体流的56 个原始SF,具体特征信息如表3 所示。本文将TCP、UDP、HTTP 设置为有效IP,有效IP 比则表示传输协议为有效IP 的数据包数目与总数据包数目的比值;子流定义为源地址相同且连续的一组数据包,子流特征中均值、标准差、离散系数、信息熵都是以各子流的数据包数目求得,如均值指平均每个子流中包含数据包的数目;离散系数为标准差与均值的比值(每个应用类别提取的特征文件中,列表示某个具体OF,行总数为样本数)。 (5) FF,为避免FF 过程中,数值大的特征对小特征的影响,首先对56 个OF 按列进行归一化,见式(1)。 不重复任取OF 中的两个特征进行一种运算,会产生C256个融合特征,本实验用了14 种算数运算(式(2)~(15)),生成14xC256种融合特征,加上OF,共计21 616个特征。
表3 原始SF
通过FF 得到的21 616 个特征,规整到0~255并填充灰度图像(gray level image,gli)的每个像素点,可以得到一个140×140 的gli。 按照特征排列顺序的方式,将前19 600 个特征输入进gli 之中,即得到不同应类别的gli。 图1 展示了OF 转换成图片的流程,f表示特征值,p表示像素值,生成图片的前56个像素值为原始特征。 图2 展示了本方法使用30 s流生成的图片样例。
图1 生成图片流程
图2 生成的图片样例
使用CNN 对转换后的gli 进行分类。 典型的CNN 架构由输入层、输出层和隐藏层组成。 隐含层包括卷积层、汇聚层、激励层、全连通层。 输入层对初始数据进行预处理;卷积层提取数据的特征;池化层选择卷积层提取的特征,减少参数数量,防止过拟合;激励层非线性地映射卷积层的输出;全连接层集成特征表示;输出层输出预测结果。 本实验使用TensorFlow[25]平台构建了模型。 结构为输入层⁃卷积层⁃池化层⁃卷积层⁃池化层⁃卷积层⁃全连接层⁃全连接层⁃softmax 层,卷积核大小为5×5,池化层采用最大池化,核大小为2×2,图3 描述了本实验的流程。
图3 本文方法流程图
在tensorflow 上搭建CNN 模型进行训练和测试;实验环境是Windows 10,CPU 为i5⁃10300,内存为32 GB。 实验采用五折交叉验证,并按4 ∶1 将数据集分为训练集和测试集。 实验参数的设定:learning_rate =0.01、train_step =300、batch_size =40;
使用不断下降的学习率来防止过拟合,每50 步,学习率降为原来的0.8;优化器使用Adma,Loss 函数为交叉熵损失值与正则化损失值之和。
实验使用总体准确率(acc),精准率(p)和f1 测度(f1)这3 个指标进行性能评价。
式中,r=TP/(TP+FN),TP 表示正确分类为G类的样本数,TN 表示正确分类为非G类的样本数,FP 表示错分为G类的样本数,FN 表示错分为非G类的样本数。
在流长度(Flow Duration,FD)为0.1 s、1 s、30 s和60 s 情况与文献方法比较,同时比较了使用ShuffleNet[26]模型,以及用56 个OF 在随机森林模型下的总体准确率。 表4 和表5 分别给出了不同方法在两个数据集上的acc。 为了更清楚地看到本方法与文献方法在各类别的表现,表6 和表7 分别给出了在两个数据集上30 s 流长度下,不同应用分类的p和f1 测度;图4 与图5 分别给出了在30 s 下的混淆矩阵(未给出数据值为准确率低于40%)。
表4 InVD 不同FD 下各种方法acc(均值±标准差)比较 %
表6 使用30 s 流在InVD 下的p 和f1(均值±标准差) %
表7 使用30 s 流VD 下的p 和f1(均值±标准差) %
图4 30 s 流在InVD 上的混淆矩阵
3.2.1 使用30 s 流的训练和测试时间对比
表8 是使用30 s 流的训练和测试时间对比。由于文献[22]方法用于训练的图片大小为1 500×1 500,所以训练和识别时间较长。 文献[5]为传统ML,只记录了每个样本的识别时间。
表8 train(/epoch)+test(/样本)时间对比 ms
3.2.2 30 s 流下的acc 曲线及loss 曲线
图6 和图7 画出了使用30 s 流本文在两个数据集上的acc 和loss 函数的迭代变化曲线。
图6 InVD 下acc 和loss 曲线
图7 VD 下acc 和loss 曲线
从表4 和表5 可以看出,对于不同长度的流,本方法的acc 较其他方法有明显的提高。
对于InVD 即粗粒度分类上,本方法较文献[5]和[22]均有不同程度的提升;在0.1 s 流时提高较为明显,较文献[22]和[5]方法分别提高了19.69%和2.29%;使用60 s 的流,本文方法的acc 达到了99.89%,比文献[22]和[5]分别提高了0.86%和2%。 使用30 s 的流,本文方法为99.65%,比文献[22]和[5]分别提高了0.84%和1.93%;使用1 s 的流,本文方法为99.50,比文献[22]和[5]分别提高了9.35%和2.36%。
对VD 即细粒度分类上,本文较两个文献方法分类性能也有明显的提升。 其中文献[22]方法对视频流的分类效果很差,使用<30 s 的流,acc<50%;使用60 s 的流,acc 为88.1%,比本文方法低了11.77%。 文献[5]同样没有本方法在细粒度时表现得好,对60 s 的流只有92.53%,而本文是99.87%,相较提高了7.34%;对0.1 s 的流,文献[5]的acc 降低得比较明显,acc 比本文低了12.24%。
文献[22]将上行流数据包到达时间与ps 规整到1 500,并将单位时间间隔中具有同样ps 的数量作为像素值,在粗粒度的分类上取得了较好的效果,但在细粒度上的分类效果并不好。 其原因在于其像素点只通过ps 的数量来表示,这种特征过于单一,其分类结果易受ps 的数值范围影响。 对于InVD,不同应用上行流数据包的大小在0~1 480 的范围内有多种不同的取值;而在VD 中,其上行流ps 基本为某一个固定值,所以对于VD,生成的图片中大部分不包含任何有用信息(像素点为空值)。 而在粗粒度分类上,由于存在不同的ps 值,所以不同应用流量生成的图片具有较大的差异性,分类的结果比VD 好。 文献[5]使用95 个SF+决策树分类器。 粗粒度分类时,acc 比较稳定,在98%到96%之间,但相比本文依然低了约2 个百分点。 本文使用FF 将特征数增加到上万个,并且DL 能够提取更深层次的特征,所以准确率更高。
本文在粗粒度上准确率已经接近100%,但在细粒度分类上,表现稍差。 通过图5 混淆矩阵可知,错分情况主要发生在直播720p 和1 080p 之间。 对数据源研究发现,斗鱼直播网站内720p 的视频,帧率不唯一(30 或40 帧);由于同一分辨率下40 帧比30 帧时得到的数据量多,使准确率有所下降。 同样,由于点播720p 中有些数据来源为腾讯视频,采用的是动态帧率,同样造成了本文方法对点播720p识别率低的问题。 在分类时间上,通过表8 可以看出,本文所用的时间较文献[22]有明显缩短,但相比ML 方法偏长。
在使用OF 对比实验中,无论粗分类或细分类,本文都提高了3 到4 个百分点,同样说明本实验的有效性。
综上,可以得出以下结论:对于不同粒度分类,相较于文献[22]方法,本文有更丰富的SF,经过FF后,每一个像素点都对应一个特征值;而文献[22]受限于上行流ps 的数目是否丰富,其像素点只表示ps 的数目,对不同的数据集,分类效果差别较大。从实验结果看,本文是优于文献[22]的。 对于文献[5]方法,同样使用SF 进行分类,但本文不但使用并丰富了SF 的数目,并且结合DL,能够更深层次的提取特征;从分类结果上看,本文也优于文献[5];但是在分类时间上,以及特征的利用率上,本文还需改进。
面对互联网服务不断增长的多样化和精细化需要,优化网络资源分配和提高QoS 极为重要,这也对NTC 的准确性提出了更高要求。 本文提出一种基于DL 的方法,将SF 通过FF 丰富了特征数量;通过将丰富的特征转换为gli,使用CNN 进行分类,在粗粒度和细分类分类上均取得良好的结果。 相较于传统ML 方法,本方法能够更深层次地提取特征。相较于其他DL 方法,本方法使用了大量SF,并对原有的SF 进行扩展和丰富,所以不同应用的图片有更大的差异性。 相较于那些利用有效载荷的DL 方法,本文避免了隐私安全性问题,并且在准确率上也有明显的提升。
不过,本方法也存在有待改进之处:(1) 使用DL 方法进行分类复杂度比较高,训练时间比较长。(2) 通过FF 得到的21 616 个特征只使用了前19 600 个特征,造成特征的浪费;同时,特征中有较多的冗余特征,生成的图片较大,增加了分类的时间。 下一步的任务是对特征进行筛选,去除冗余特征,以达到减少训练时间,且准确率基本不变的目的。