精华内容
下载资源
问答
  • 网络流量领域公开数据

    万次阅读 多人点赞 2019-05-29 10:35:32
    流量分类领域数据集 本博客持续更新,收集平常读论文时提高的公开数据集。 数据集详情 http://traces.cs.umass.edu/index.php/Network/Network 系列: 这个网站提供了该学院很多数据集,这些数据集是他们发表论文时...

    本博客持续更新,收集平常读论文时提高的公开数据集。

    1. 马萨诸塞大学系列

    http://traces.cs.umass.edu/index.php/Network/Network 系列:
    这个网站提供了该学院很多数据集,这些数据集是他们发表论文时提取的,然后公开出来。

    1.1 WebIdent 2 Traces

    数据集描述:
    A collection of traces of web requests and responses over an encrypted SSH tunnel. The collection spans traces of connections to 2000 sites, collected four times a day over several months from February 2006 through April 2006. Each connection was encrypted; the traces include only the TCP headers, and not the payload.

    2000个网站的SSH隧道上SSL连接的流量,只有TCP 头,PCAP大约2.5G 。
    这个数据集是标注好了的。label: website。

    地址:http://skuld.cs.umass.edu/traces/network/README-webident2

    2. WIDE Project项目

    http://mawi.wide.ad.jp/mawi/

    该项目是日本和美国的合作项目,该项目会按照不同的时间周期(如每天的某分钟,每个月)采集从日本到美国的某条骨干网络的网络流量,里面一共涉及了7个采样点,其中C-D采样点采集的是IPv6的数据包。时间跨度特别大:从2001年到2018 都有。

    网络流量做了数据脱敏,里面的IP地址是经过处理的,而且只有IP包头。

    当然这个数据集更适合做测量,因为它是没有标注过的。

    3.Youtube 加密视频流量标题识别数据集

    数据集地址:
    http://www.cse.bgu.ac.il/title_fingerprinting/
    数据集描述:
    作者采集了10000个Youtube视频流量,其中包含100个视频,每个视频观看100次。然后每个pcap,都有标注好对应的视频标题。pcap都没做数据脱敏,就是原始的pcap数据包。

    例如:
    http://www.cse.bgu.ac.il/title_fingerprinting/dataset_chrome_100/Hollyweezy/Train/
    这个目录下有100个pcap,其中 Hollyweezy,就是他的视频标题。

    同时作者该采集了一些带延时和丢包的数据包用来作为测试集。

    作者的工作就是建立模型识别加密视频流量对应的视频标题。

    4.流量分析对抗实验数据集

    这个数据集需要自己根据源码自己生成:
    https://github.com/kpdyer/website-fingerprinting.git
    源码生成的结果是会访问2000个 website 和775个SSH的Sockets代理的website的流量,里面的还有11个流量混淆的方法(包括包长填充等)可供选择,里面还有11个流量分类器。

    5. 网络防御比赛的数据集

    里面有SSL的数据包,尚未标注好的。可以作为协议格式自动化推断的数据包。

    https://www.netresec.com/?page=MACCDC

    6.Tor流量

    一般来说Tor上面的加密流量分类叫做webfingerprint attack,这个领域有很多公开的数据集,但是这个领域的很多数据集一般只给出cell的方向序列。例如:
    [-1,1,1,-1,-1,…] 是{1,-1}的序列。正负号表示cell是Outgoing还是ingoing。每个cell的实际大小一般是512,因此可以根据cell的方向序列推断出cell的大小序列,只需要乘以512即可。
    常见的数据集有:

    6.1. AWF模型

    https://github.com/jmhIcoding/DLWF?organization=jmhIcoding&organization=jmhIcoding

    里面有 Closed World ,Open World ,Concept drift 等流量。有100,200,500,900个类别的分梯度的标注数据,每个类别有2500条数据。这个数据集还是很大的!

    6.2. Deep fingerping数据集

    https://github.com/deep-fingerprinting/df 这个是深度学习的一个数据集,里面有95个类别。训练集有75000多个样本,测试集和验证集还各有9500条样本。

    7. Tor流量

    URL:
    http://home.cse.ust.hk/~taow/wf/data/
    这里也是标注好的tor的website的流量,里面的数据都是基于cell的,都是+1,-1的序列。但是原始数据都带了相对时间戳。
    有100多个类别,每个类别有100个左右的trace。

    在这里插入图片描述
    http://home.cse.ust.hk/~taow/wf/data/walkiebatch-defended.zip 是使用walkie-talkie手段构造的逃逸样本。

    8 Andrubis 数据集

    https://drive.google.com/drive/folders/1IXa3IJS9zJS4vggpyU7yda8f7jZjz4gB
    介绍:
    这个数据集超大,包含了103万个Android APP的带标注的流量数据,而且是pcap原始数据包。这个就很棒啊。

    这个数据集包括了正常APP和恶意APP,是否正常是通过VirusTotal来判断的。
    每个APP在Android模拟器里面跑4分钟。

    9. Browser 数据集

    https://drive.google.com/open?id=1wOdrfazbrcMDrL0NfA4GLoWegtPqkPj3
    在三星Note4 安卓6.0.1设备上使用Chrome,Firefox,三星自带流量和UC浏览器访问Alexa Top 1000的站点。 每个站点访问15秒。
    这里是为了分类不同的浏览器。

    10.Cross Platform数据集

    PPT链接:https://www.ndss-symposium.org/wp-content/uploads/2018/03/NDSS2018_05B-2_Ren_Slides.pdf

    Cross Platform dataset: https://recon.meddle.mobi/cross-market.html
    The Cross Platform dataset [51] consists of
    user-generated data for 215 Android and 196 iOS apps. The
    iOS apps were gathered from the top 100 apps in the App
    Store in the US, China and India. The Android apps originate
    from the top 100 apps in Google Play Store in the US and
    India, plus from the top 100 apps of the Tencent MyApps and
    360 Mobile Assistant stores, as Google Play is not available in
    China. Each app was executed between three and ten minutes
    while receiving real user inputs. Procedures to install, interact,
    and uninstall the apps were given to student researchers who
    followed them to complete the experiments while collecting
    data. We use this dataset to evaluate both the performance
    of our method with user-generated data and the performance
    between different operating systems.
    这个数据集做了相同APP不同版本之间的分析。
    这个数据集有pcap文件。数据集有大约8个G
    在这里插入图片描述
    数据下载地址:https://drive.google.com/drive/folders/1cmG_5FIAh1DOGPI9el1K5WD9fUIpfw-x

    11.ReCon dataset:

    https://recon.meddle.mobi/appversions/
    The ReCon AppVersions dataset [52, 53] consists
    of labeled network traces of 512 Android apps from the
    Google Play Store, including multiple version releases over
    a period of eight years. The traces were generated through
    a combination of automated and scripted interactions on five
    different Android devices. The apps were chosen among the
    600 most popular free apps on the Google Play Store ranking
    within the top 50 in each category. In addition, this dataset
    contains extended traces of five apps, including multiple version releases. The network traffic of each of these five apps
    was captured daily over a two-week period. In this work, we
    refer the AppVersions dataset as ReCon and to the extended
    dataset as ReCon extended.
    里面的数据主要是基于载荷的。
    数据下载地址:https://recon.meddle.mobi/appversions/raw_data.tar.gz

    12. CIC数据集

    https://www.unb.ca/cic/datasets/
    这个网站上面的数据集特别多,主要是一些入侵检测、恶意软件的数据集。
    还有TOR的,这个可以!!!
    在这里插入图片描述

    12.1 Android 恶意软件流量

    介绍页面:https://www.unb.ca/cic/datasets/andmal2017.html
    数据页面:http://205.174.165.80/CICDataset/CICMalAnal2017/Dataset/PCAPS/

    We installed 5,000 of the collected samples (426 malware and 5,065 benign) on real devices. Our malware samples in the CICAndMal2017 dataset are classified into four categories:

    Adware 广告软件
    Ransomware 勒索软件
    Scareware 恐吓软件
    SMS Malware 短信恶意软件

    Our samples come from 42 unique malware families.

    数据有426个恶意软件,5000多个正常软件的流量。
    这些恶意软件可以分为4大类,共42个家族。
    在这里插入图片描述

    12.2 Investigation of the Android Malware (CICInvesAndMal2019)

    这个数据集是对上面这个数据集的丰富,主要是把以下信息加进去了:
    which includes permissions and intents as static features and API calls and all generated log files as dynamic features in three steps (During installation, before restarting and after restarting the phone).
    APP的种类是没有变的。

    12.3 Android Adware and General Malware Dataset

    CICAAGM dataset is captured by installing the Android apps on the real smartphones semi-automated. The dataset is generated from 1900 applications with the following three categories。
    有1900多个应用的流量,其中有400个恶意软件。其中剩余的1500多个应用可以当做普通app流量分类的openworld的数据集来使用。
    https://www.unb.ca/cic/datasets/android-adware.html
    这个数据集里面的广告软件特别多,有250个。

    12.4 恶意URL数据集

    URL: https://www.unb.ca/cic/datasets/url-2016.html
    下载链接: http://205.174.165.80/CICDataset/ISCX-URL-2016/Dataset/ISCXURL2016.zip

    Benign URLs: Over 35,300 benign URLs were collected from Alexa top websites. The domains have been passed through a Heritrix web crawler to extract the URLs. Around half a million unique URLs are crawled initially and then passed to remove duplicate and domain only URLs. Later the extracted URLs have been checked through Virustotal to filter the benign URLs.

    Spam URLs: Around 12,000 spam URLs were collected from the publicly available WEBSPAM-UK2007 dataset.

    Phishing URLs: Around 10,000 phishing URLs were taken from OpenPhish which is a repository of active phishing sites.

    Malware URLs: More than 11,500 URLs related to malware websites were obtained from DNS-BH which is a project that maintain list of malware sites.

    Defacement URLs: More than 45,450 URLs belong to Defacement URL category. They are Alexa ranked trusted websites hosting fraudulent or hidden URL that contains both malicious web pages.

    12.5 VPN-noVPN 数据集

    刷水文必备的数据集。。。
    https://www.unb.ca/cic/datasets/vpn.html
    7大类网络服务,各自都有VPN和非VPN的流量:We captured a regular session and a session over VPN, therefore we have a total of 14 traffic categories: VOIP, VPN-VOIP, P2P, VPN-P2P, etc.
    在这里插入图片描述

    13. Stratosphere IPS数据集

    https://www.stratosphereips.org/datasets-overview
    这个IPS有提供比较多的数据集,更多是僵尸网络的数据集。
    在这里插入图片描述

    14. mirage数据集

    这个数据集包含了20个移动应用的数据,主要有如下一些字段:
    每条流前30个包的:包长序列、到达时间序列。
    以及整条流的一些统计信息。
    在这里插入图片描述
    论文地址:http://wpage.unina.it/antonio.montieri/pubs/MIRAGE_ICCCS_2019.pdf
    数据集网址:http://traffic.comics.unina.it/mirage/
    因为这个数据集只分享了前30个IP数据包的长度,因此不适合做包长序列的模型,但是它暴露了前30个包的载荷。适合做以载荷为主要输入的模型。
    label: 应用名

    15. CRAWDAD apptraffic数据集

    The traceset consists of 9 different Android video app packet captures and 1 mixed app packet capture on a Moto X 2nd generation smartphone.
    9个安卓视频App,和一个混合的app 构成的待标注的数据集。
    数据是原始的pcap文件,文件夹共5GB多。
    label: 应用名
    主页:https://crawdad.org/iitkgp/apptraffic/20151126/index.html

    展开全文
  • 基于深度学习的网络加密流量分类与入侵检测框架基于深度学习的网络加密流量分类与入侵检测框架I. 介绍II. DFR框架A. 预处理过程B. DFR过程1. 基于一维CNN的DFR分类器2. 基于LSTM的DFR分类器3. 基于SAE的DFR分类器4. ...

    写在前面:
    本文翻译供个人研究学习之用,不保证严谨与准确
    github链接:https://github.com/WithHades/network_traffic_classification_paper
    本文原文:Zeng, Y., Gu, H., Wei, W., & Guo, Y. (2019). Deep-Full-Range: A Deep Learning Based Network Encrypted Traffic Classification and Intrusion Detection Framework. IEEE Access, 7, 45182–45190. https://doi.org/10.1109/ACCESS.2019.2908225

    基于深度学习的网络加密流量分类与入侵检测框架

    摘要
      随着网络流量多样性的迅速发展,对网络流量的理解变得更加关键和强大。以前,流量分类和入侵检测需要专家对各种流量特征和与攻击相关的特征进行繁重的分析,甚至可能需要私有信息。然而,由于特征标签和隐私协议的过时,现有的方法可能不再适应不断变化的网络环境的特点。本文提出了一种基于深度学习的轻量级流量分类和入侵检测框架,称为深度全范围(DFR)。由于深度学习,DFR能够从原始流量中学习,而无需人工干预和私人信息。在这样的框架下,我们提出的算法与使用两个公共数据集的其他最新方法进行了比较。实验结果表明,该框架不仅在加密流量分类的F1-score平均为13.49%,入侵检测的F1分平均为12.15%,而且对存储资源的要求也大大降低。

      关键词: 加密流量分类网络入侵检测深度学习端到端

    I. 介绍

      准确的流量分类是网络基本任务(如提供适当的服务质量(QoS)、网络入侵检测(NID)等)的前提,然而由于以下事实,流量分类变得越来越具有挑战性。第一个是流量的丰富性性和多样性。除此之外,越来越多的应用已经开始应用安全协议,如HTTPS、SSH、SSL等,对网络流量进行加密,以保护用户的隐私;第三个事实是,一些基本信息,如流量或流量持续时间,由于隐私协议和法律的原因,现在不易获取。简单地说,如何在没有私有信息的情况下实现高质量的流量识别,对网络的安全性和服务质量有着重要的影响。
      以往的流量分类方法,如基于端口号的方法和基于数据包检测(DPI)的方法[1],由于其对加密流量的限制,不足以适应现代的流量环境。最新一代的流量分类方法是基于流量统计和机器学习(ML)的,能够同时处理加密和正常的流量,如Atli工作中使用的K近邻(KNN)和决策树(DT)。
      然而,基于ML的方法的性能在很大程度上依赖于人工设计的特性和私有的流量信息。因此极大地限制了它们的准确性和可推广性。此外,基于ML的分类方法通常需要很高的存储和计算资源,这限制了在资源受限的节点(如车辆[3]、家庭网关和移动电话。一个实时的准确的网络流量分类器是网络管理任务和NID系统的基础,因此,迫切需要一种新的分类方法。
      基于深度学习(DL)的方法的特征提取与选择是通过训练自动完成的[4]。这种特性使得基于DL的方法成为一种非常理想的流量分类方法。基于DL的方法的另一个特点是,与传统的ML方法如随机森林、支持向量机和KNN相比,DL具有更高的学习能力。因此,他们需要学习高度复杂的模式,以便在一个框架内获得比以前具有更高准确性及更多功能(如NID、关键链接分析、流量分类等)的方法。考虑到这两个特点,作为一种端到端的方法,基于DL的方法能够有效地学习原始业务和相应的未来业务之间的关系,而不需要大量的劳动和私有信息。
      本文提出了一种新的网络加密流量分类和入侵检测框架,称为深度全范围(DFR),它采用了三种深度学习算法:卷积神经网络(CNN)[5]、长短期记忆网络(LSTM)[6]和stackedauto编码器(SAE)[7]。我们打算使用CNN从空间范围了解原始流量的特征。LSTM用于从与时间相关的方面学习特征。采用SAE从编码特征中提取特征。所有这三个方面结合起来,以获得对原始输入的深入和全面的理解。DFR具有全方位的所关注的结构,能够在一个框架内对加密流量和恶意软件流量进行分类,而无需人工帮助和私有细节。由于我们的框架只会保存在当前流量环境下最有效的模型,因此与以前的方法相比,存储资源需求大幅下降。
      本文的主要工作如下:1)提出了一种轻量级的分类和入侵检测框架DFR。在两个公共数据集上对完成这两项任务的有效性进行了评估,达到了显著的改进效果。2) DFR基于三个DL模型,可以获得对原始流量的深入而全面的理解。3) DFR是一个端到端的框架,不需要太多的人的帮助和数据的私有信息。
      本文的其余部分安排如下。第II节详细说明了DFR和各部分的方法。在第III节中我们通过比较两个公共数据集上的其他最新方法来评估这个框架。最后,第IV节给出了本文的结论性意见。

    II. DFR框架

      在这一部分,我们将详细说明我们提出的网络加密流量分类和入侵检测框架。DFR框架可以分为两个功能模块,如图1所示:预处理过程,DFR过程。

    图1 以ML分支为中心的流量分类方法概述

      表1列出了DFR模型中使用的一些参数的符号和定义。

    表1 DFR模型中参数和符号的定义

    A. 预处理过程

      在此过程中,我们提出的框架将原始网络流量数据转换为IDX格式,这是我们用作以下过程输入的格式。我们预处理原始数据的原因有三个。1)来自网络的原始数据长度不同,这不是DL模型的理想输入格式。2)原始数据包含一些可能影响结果的信息,比如端口号或MAC地址。3)一个统一的格式可以为添加更多的网络应用、维护过程等后续工作铺平道路。图2展示了预处理过程的概述,包括5个步骤。

    图2 预处理过程总览

      包生成是通过包捕获工具Wireshark将连续原始流量数据拆分并另存为PCAP文件的步骤[8]。我们提出的方法将捕捉所有层的双向流,在[9]中,这是进行基于深度学习的流量分类最理想的流量形式。
      流量清洗是消除流量包中干扰数据的一个步骤。这包括TCP或UDP报头和数据链路层中一些与以太网相关的数据,例如MAC地址,因为它们不用于以下过程,甚至可能损害结果。
      流量优化将删除重复文件和空文件,因为这些文件只会损害我们框架的学习能力。
      长度统一将把长度大于900字节的文件修剪为900字节,并在长度小于900字节的文件末尾添加0x00s,以将其补充为900字节。
      IDX填充生成器将这些长度均匀的PCAP文件转换为30字节×30字节的二维格式IDX文件。IDX格式是DL字段[10]中常见的文件格式,对于我们的框架来说也是理想的。如果映射到[0,1],这些文件将被视为灰度图像。在图2中,我们可以看到预处理结果是灰度图像。
      在算法1中给出了预处理过程的进一步细节。在此过程之后,生成一个充满流量图的数据集以供将来使用。

    算法1 预处理过程算法

    B. DFR过程

      正如在图1中展示的,DFR过程是基于三个DL模型,包括CNN、LSTM以及SAE。我们之所以在所有模型中采用L1正则化[11],是因为L1正则化能够惩罚一些权重为0,而L2做不到这一点。这有助于机器学习哪些特征与分类无关,从而获得更好的结果。我们将在下一节中根据实验结果详细说明如何选择L1正则化。

    1. 基于一维CNN的DFR分类器

      我们开发了第一个基于一维CNN的加密流量分类和入侵检测识别器。到目前为止,CNN主要应用于计算机视觉领域,如图像分类、目标检测等。CNN具有很强的逐像素学习图形空间特性的能力。我们打算使用CNN来寻找有助于机器从空间范围对流量进行分类的功能。我们选择1D-CNN而不是流行的2D版本,因为原始的流量格式是按层次结构组织的序列形式,而不是图像。基于CNN的流量分类相关工作[9]表明,1D-CNN比2D-CNN有更高的精度。
      基于一维CNN的DFR分类器如图3所示。它由两个卷积层、两个Maxpooling层、两个局部响应规范化(LRN)[5]层和一个具有Softmax分类器的全连接层组成。在第一阶段,我们将把输入的数据重塑为1×900的形状,然后丢弃高度并集中处理一维数据。分类过程定义如下:
      第一卷积层用32个滤波器处理输入数据,其中每个滤波器的大小为[25,1]。每个滤波器在一次卷积运算后移动一步。卷积层的结果被输入到激活函数中。我们在一维CNN中采用了ReLU[12]激活函数,结果通过最大池处理。在每个步骤中,最大池按如下方式处理[3,1]输入:
    m a x p o o l i n g [ x 1 , x 2 , x 3 ] = m a x ( x 1 , x 2 , x 3 ) (1) maxpooling[x1, x2, x3] = max(x1, x2, x3)\tag{1} maxpooling[x1,x2,x3]=max(x1,x2,x3)(1)
      maxpooling进程的步幅是3。在第一卷积层的末尾,加入LRN层来惩罚这些异常响应或异常响应,以获得更好的泛化效果。然后输出将通过第二卷积层,该卷积层与第一卷积层相似。这两个卷积层之间的唯一区别是,第二卷积层有64个滤波器。最后,数据将通过全连接层。该层是通过在完全连接的层上应用dropout获得的。然后在基于一维CNN的DFR分类器的最后,由softmax分类器获得输出标签。softmax分类器定义如下:
    y ^ = e x p ( O u t j ) ∑ e x p ( O u t i ) (2) \hat{y} = \frac{exp(Out^j)}{\sum exp(Out^i)}\tag{2} y^=exp(Outi)exp(Outj)(2)
       O u t j Out^j Outj是全连接层第j个神经元的输出。 y ^ = { y 1 ^ , y 2 ^ , y 3 ^ , . . . . . . , y N ^ } \hat{y} = \{\hat{y_1}, \hat{y_2}, \hat{y_3}, ......, \hat{y_N}\} y^={y1^,y2^,y3^,......,yN^}是类别的全集。N是类别总数。概率最高的输出表示输入值的类别。我们在这个DFR中使用了Adam[13]优化器。
      对于训练过程,超参数设置为{Epoch,Minbatch,LR,KeepP,N,Lambda},表1描述了这些参数的定义。在算法2中解释了基于1D CNN的DFR训练算法的更多细节。

    算法2 基于1D CNN的DFR训练算法

    2. 基于LSTM的DFR分类器

      第二个DFR是在LSTM[6]的基础上开发的,LSTM[6]是一种用于处理序列表单数据的网络。LSTM是一种利用时间相关信息的递归神经网络(RNN)。假设一段业务是与时间有关逐字节和逐包构建的,来自相似类的业务在时间相关特性上必须具有一定的相似性。我们将LSTM应用到DFR中,帮助机器去学习与时间相关的特性。以前,只有少数工作提到使用RNN对网络流量进行分类。Torres等人[14] 将业务字节数据转换为字符数据,然后应用LSTM来学习字符之间的连接。然而,在我们提出的基于LSTM的DFR分类器中,输入将是一个图。图4说明了我们提出的基于LSTM的DFR分类器的概述。

    图4 基于LSTM的DFR分类器的概述

      如图4所示,基于LSTM的DFR分类器实际上基于三层LSTM模型。对于每一层,基于LSTM的DFR分类器有256个LSTM单元。为了得到更好的推广,我们在LSTM模型的每一层都应用了dropout。在LSTM模型学习了与时间相关的特性之后,数据将通过方程(2)中描述的softmax分类器。最后,可以在DFR结束时检查结果标签。值得一提的是,我们在这个DFR中也使用了Adam优化器。训练基于LSTM的DFR分类器可以使用1D-CNN的DFR分类器中定义的相同的超参数,这些超参数被设置为{Epoch,Minbatch,LR,KeepP,N,Lambda}。算法3释了基于LSTM的DFR分类器的训练。

    算法3 基于LSTM的DFR分类器的算法

    3. 基于SAE的DFR分类器

      最后一个DFR的核心是两个SAE。一般来说,自动编码器是一种用于自动特征提取的半监督学习方法。SAE是自动编码器的变体之一,它能够逐字节地扫描数据以发现编码特性。图5展示了我们基于SAE的DFR分类器的概述。

    图5 基于SAE的DFR分类器的概述

      第一步是将图形重塑为1×900的形式,因此我们可以将输入与第一个编码器完全连接。图6显示了训练这两个sae的过程。从图6可以看出,这两个SAE是分别训练的。第一个编码器有1000个神经元,它们与900个输入紧密相连并且有900个输出。训练编码器1的目的是获得一个编码器,该编码器能够产生与900个输入具有最小方差的900个输出。在编码器1经过训练后,我们将其堆叠在DFR中并应用sigmoid[15]激活函数。编码器2有1500个神经元,与编码器1的输出紧密相连。然后,我们将通过减少输入2和输出2之间的差异来训练编码器2,这与编码器1的训练相似。我们将在DFR中叠加它,同时应用一个sigmoid激活函数。最后,数据将通过等式(2)中定义的softmax分类器并输出结果。需要注意的是,在这两个SAE叠加到DFR中之后,将开始微调训练过程,以获得最终的模型。

    图六 两个编码器的训练过程

      由于SAEs的两个训练过程是分离的,因此一些超参数与前两个DFRs不同。所有超参数都将设置为{Epoch、EpochFin、Lambda、LambdaFin}和Setsame={Minbatch、LR、KeepP、N},其中Setsame与前两个DFRs定义相同。Epoch是两个SAEs训练过程的epochs,不能设置为一个非常大的数。二次训练过程中的一个大的epoch会误导模型与训练数据的过度拟合。EpochFin是微调过程中的epoch,这个数不受Epoch的限制。Lambda是两个SAEs训练过程中L1正则化的Lambda参数,需要设置为比微调过程中L1正则化的Lambda参数大得多的数,即LambdaFin。原因是小的Lambda不能有效地配合两个SAEs训练过程。在算法4中总结了基于SAE的DFR的训练:

    算法4 基于SAE的DFR训练算法

    4. 选择与保存

      用训练数据对这三个DFR进行训练后,用测试数据对其进行检验。具有最高精度的DFR被认为是最适合当前流量环境的模型。准确度定义如下:
    A c c u r c y = T P + T N T P + F P + F N + T N (3) Accurcy = \frac{TP + TN}{TP + FP + FN + TN}\tag{3} Accurcy=TP+FP+FN+TNTP+TN(3)
      其中,TP为真阳性,即正确分类为特定类别的数量;FP为假阳性,即分类为该类别的错误分类数量;FN为假阴性,即本应分类为该类别,但又被错误分类为其他类别的数量;TN为真阴性,即是正确分类为非特定类别的数量。
      因此,这个模型将是我们保存的模型,并为这个时间单位执行以下分类和标识任务。DFR将以在线方式进行训练,这意味着DFR能够自动更新自身,以适应流量环境。算法5解释了在线式DFR框架过程中的其他细节。

    算法5 在线式DFR框架算法

    III. 评估

      在这一部分中,我们将从加密流量分类效率、入侵检测效率和存储资源需求三个方面来评估DFR框架。

    A. 实验装置

      我们将首先描述我们使用的两个选定数据集。然后,通过训练过程中的超参数细节,揭示了实验的设置。最后,我们将解释我们使用的指标。

    1. 评估数据集

      目前,我们还没有找到既有加密流量又有恶意软件流量的可用公共数据集,因此我们决定分别使用两个选定的公共数据集ISCX VPN non VPN流量数据集[16]和ISCX 2012 IDS数据集[17]来评估DFR框架。
      从ISCX VPN-nonVpn业务数据集[16]中重新生成第一个选择的数据集,以评估DFR对加密业务分类的有效性。ISCX VPN-nonVpn业务数据集最初有7种常规加密流量和7种协议封装流量。由于我们主要关注于评估加密流量分类的效率,因此我们将从7种类型的常规加密流量中选择并标记数据,其中包括网页浏览、电子邮件、聊天、流媒体、文件传输、VoIP和P2P。要注意的是,所有其他6种类型的加密流量都与网页浏览相关,因此,根据[9]的工作,我们放弃了加密流量的这个类别。此外,原始数据集中的一些类比其他类拥有更多的实例,这可能会在训练过程中误导模型。因此,我们精简它们以获得一个平衡的数据集。所选数据集的结构如表2所示。经过标准化处理后,每类流量的数量约为10000例。该数据集按9:1自动分为训练数据集和测试数据集。因此,训练数据集将有52916个案例,测试数据集将有5880个案例。

    表2 数据集1所选择的结构
    表3 数据集2所选择的结构

      第二个数据集是从ISCX 2012 IDS数据集[17]中重新生成的,以评估DFR在入侵检测中的有效性。该数据集包含7天的网络流量,可分为5类,正常、强力SSH、DDoS、HttpDoS和渗透。我们通过选择仅来自有恶意软件流量的天数的数据进行简化。由于与现实生活中的正常流量相比,恶意软件流量预计具有相对较小的规模,因此不会对数据集应用归一化方法。表3展示了所选数据集的结构。最后,将所选数据集按9:1的比例分为训练数据集和测试数据集。

    2. 实验设置

      采用Tensorflow作为实验ML软件框架。我们在Ubuntu18.0464位操作系统上运行评估。处理器为8核Intel I7-7700K CPU,32 GB内存。采用两片Nvidia GeForce GTX1080ti芯片作为GPU加速器。DFR训练过程的超参数如表4所示。

    表4 超参数的设置

    3. 评价指标

      我们使用公式(3)中定义的精度来选择最佳DFR。我们使用三个指标来评估和比较所选DFR与现有方法的性能。即精确、召回和F1分数,定义如下:
    P r e c i s i o n = T P T P + F P (4) Precision = \frac{TP}{TP + FP}\tag{4} Precision=TP+FPTP(4)
    R e c a l l = T P T P + F N (5) Recall = \frac{TP}{TP + FN}\tag{5} Recall=TP+FNTP(5)
    F 1 _ s c o r e = 2 × P r e c i s i o n × R e c a l l P r e c i s i o n + R e c a l l (6) F1\_score = \frac{2 × Precision × Recall}{Precision + Recall}\tag{6} F1_score=Precision+Recall2×Precision×Recall(6)
      其中TP、FP和FN的定义见第II-B.4节。

    B. 实验结果

      我们将首先介绍对加密流量分类效率的评估。实验结果解释了采用L1正则化的原因。然后,评估了入侵检测。最后给出了存储资源需求的比较。

    1. 加密流量分类效率

      在数据集1的测试数据集上,三个经过训练的DFR的精度如表5所示。我们还评估了在本实验中应用L1正则化的有效性。

    表5 加密流量中DFR的准确率

      从表5可以看出,用L1正则化代替L2正则化后,DL模型的平均精度提高了3.37%。这证明了我们在II-B节中对L1和L2正则化的分析,因此我们将仅在DFR框架中应用L1正则化。基于一维CDD的分类精度最高,达到99.85%,因此我们将此模型保存为适合当前网络流量环境的最优DFR分类。
      我们还在同一数据集下比较了DFR框架与两种最新方法的性能。第一种方法是根据文献[16],C4.5 DT。这是一种基于ML的分类方法,需要人工特征。第二种方法是文献[9]中提出的一维CNN分类方法,它与我们在DFR中使用的模型相似,但没有正则化方法和LRN在其一维CNN中应用。

    图7 分类有效性的比较

      如图7所示,与基于ML的C4.5方法和基于DL的1D-CNN方法相比,DFR框架能够获得更准确和健壮的分类结果。DFR框架的F1平均得分为0.9987,与C4.5 DT和1D-CNN的F1平均得分相比,这是令人印象深刻的。精度平均比C4.5提高11.6%,比1D-CNN提高14.9%。所有这些数据都支持这样一个事实:DFR框架能够准确地对加密流量进行分类。

    2. 入侵检测效率

      对于数据集2,基于LSTM的DFR分类器的分类准确率为99.41%,是三种DFR分类器中最高的。然后,我们将DFR框架与Atli的工作[2]中展示的两种基于最新ML的方法进行了比较,这两种方法分别是DT和KNN。这是两种基于ML的入侵检测方法。

    图8 入侵检测效率的比较

      如图8所示,DFR能够保持对真实恶意软件流量的鲁棒性和高检测性能。与这两种方法相比,F1得分的平均改善分别为0.137和0.106。值得一提的是,本文提出的框架能够在F1总分为1的情况下识别HttpDoS恶意软件流量,与DT和KNN相比有较大的改进。所有这些数据都证明了准确的入侵检测能力。

    IV. 结论

      本文提出了一种新的基于DL的加密流量分类和恶意流量检测框架。与目前最先进的基于ML的方法相比,我们的DFR框架不需要选择特征和私有特征细节的繁重工作。此外,在两个公共数据集上的实验结果表明,DFR在加密流量分类和入侵检测方面比现有的方法具有更强的鲁棒性和更准确的性能,并且需要更少的存储资源。

    展开全文
  • 机器学习在网络流量分类中的应用

    千次阅读 2020-06-20 11:24:06
    流量分类 1. IP流定义 2. 有效载荷检测 3. 基于统计的技术 4. 行为技术 5. 机器学习技术 III. 方法 IV.数据收集 A. 网络环境 B. 数据测量 C. 标注任务 D. 讨论 V. 特征提取 A. 基于统计的特征 B. 基于图形...

    写在前面:
    本文翻译供个人研究学习之用,不保证严谨与准确
    github链接:https://github.com/WithHades/network_traffic_classification_paper
    本文原文:Pacheco, F., Exposito, E., Gineste, M., Baudoin, C., & Aguilar, J. (2019). Towards the Deployment of Machine Learning Solutions in Network Traffic Classification: A Systematic Survey. IEEE Communications Surveys and Tutorials, 21(2), 1988–2014. https://doi.org/10.1109/COMST.2018.2883147

    机器学习在网络流量分类中的应用

    摘要
      流量检测是一种发现网络流量中的关系、模式、异常和错误配置等的综合技术。尤其需要注意,流量分类是该领域中旨在识别应用程序名称或Internet流量类型的一个子领域。近年来,流量加密和封装等新技术的兴起降低了传统流量分类策略的性能,使得流量分类成为一项具有挑战性的任务。机器学习作为这一领域的一个新的研究方向,有成功的迹象,例如从加密流量中提取知识,以及更精确的服务质量管理。ML正迅速成为在真实的网络流量场景中构建流量分类解决方案的关键工具;从这个意义上说,本研究的目的是探索该技术在流量分类领域的要素。因此,本文在介绍利用ML技术实现流量分类的步骤的基础上,对其进行了系统的综述。主要目的是了解和确定现有工作为实现其目标所遵循的程序。因此,本文从对该领域进行的分析中发现了一些趋势;通过这种方式,作者希望概述基于ML的流量分类的未来方向。

      关键词: 互联网流量流量分类机器学习流量监控

    I. 介绍

      流量分析是一个从截取流量数据开始,到发现网络中的关系、模式、异常和错误配置等的完整过程。其中,流量分类是该领域中的一个子领域,其目的在于将互联网流量分类为预定义的类别,例如正常或异常流量、应用程序类型(流媒体、网络浏览、VoIP等)或应用程序名称(YouTube、Netflix、Facebook等)。流量检测之所以重要,主要有以下几方面的原因:

    • 故障排除任务:主要目标是定位故障网络设备、设备/软件配置错误、定位数据包丢失点、网络错误等。
    • 安全性:避免恶意软件或防止对私人信息的入侵。
    • 服务质量(QoS)管理,保证最终用户对应用程序或服务的总体可接受性。在这个领域,识别或分类网络中的应用程序的名称或类型有助于处理一些预先定义的情况。例如,从流量中识别不同的应用程序对于管理带宽资源和确保QoS要求至关重要。

      在过去,流量分类依赖于基于端口的方法,其中每个应用程序由其注册的已知端口进行标识,该端口由互联网分配号码管理局(IANA)[1]定义。由于未注册或随机生成端口的新应用程序激增等因素,这种方法变得不可靠和不准确。另一种在这一领域得到广泛应用的方法是深度包检测(Deep Packet Inspection,DPI)。DPI通过在包负载和一组存储的签名之间执行匹配对网络流量进行分类。然而,当隐私政策和法律阻止访问包内容以及协议混淆或封装的情况下,DPI会失败。为了克服上述问题,机器学习(ML)作为一种合适的解决方案应运而生,它不仅适用于流量分类任务,而且适用于预测和新知识发现等。在这种情况下,IP流的统计特征通常是从网络轨迹中提取出来的,并存储起来生成历史数据。这样,就可以用这些历史数据训练不同的ML模型,并用这些模型分析新的传入流。

    A. 相关工作

      在本节中,我们将研究一些综述性论文,以找出进行流量分析(尤其是流量分类)的趋势、挑战和一般步骤。虽然2005年已经开始使用ML进行流量分析,但是由于流量的更新和扩展等原因,一些问题仍然存在。文献[2]回顾了近年来利用ML进行流量分类的研究进展。尽管大多数呈现的工作都是以离线方式部署的,但是作者也提到了在线部署,为ML模型建立了一些关键的操作要求。在最近的一篇综述[3]中,指出了其中的几个问题,并提出了该领域的未来的一些方向。一方面,本文研究了一些主要的流量分类问题,可以总结如下:

    • 可用的数据及其真实性是有限的;
    • 流量分类解决方案的可扩展性是一个挑战;
    • 由于网络的动态性和进化性,需要自适应的解决方案;
    • 解决方案需要正确的验证。

      另一方面,未来的方向鼓励对ML方法进行更严格的评估和比较,鼓励开发用于定义流量真实值的工具,鼓励使用多分类系统等。此外,ML方法需要满足不同的挑战[4]、[5],例如提供的性能、对不断增加的业务量和传输速率的管理,以及重新配置能力。
      文献[6]介绍了这一领域的最新进展,重点介绍了用于流量分类的有监督无监督技术。作者研究了几种基于贝叶斯的分类器神经网络NNs决策树DT的方法。此外,还研究了DBSCAN算法基于期望最大化EMK-均值的聚类技术等。为了概述每种方法的必要改进,给出了一些优缺点。
      加密通信已成为防止网络中传输信息被入侵的一种新方法。ML非常适合分析这些类型的通信,因为它不会侵入数据包内容;例如,在某些情况下,连接的统计行为可能就足够了。在这一背景下,[7]报告了几项关于加密流量的研究的全面回顾。调查研究了一些加密协议、它们的包结构和在网络中的标准行为,以及可以提取用于流量分析的可观察特征。此外,[8]还调查了最常见的流量分类方法。
      目前,网络中的异常流量检测已成为流量分析的重要课题之一。其目的是发现或描述可能影响网络基础设施、业务或个人隐私、数字经济等的恶意或无意的异常情况。流量分析对于这个特定的域是必要的。参考文献[9]提出了一项综合研究,其中ML技术代表了本综述中发现的30%以上的解决方案。这一领域的更多工作见[10]-[12]。
      一般来说,流量分类可以通过多种ML技术,在不同的领域,以不同的目标来实现。然而,在所有的调查报告中,一个主要的问题是缺乏公共数据,这可以被视为应用ML方法的核心资源。此外,定义所收集数据的真实值的困难,以及ML解决方案的实现,是目前ML技术的挑战和限制。另外,另一个重要方面是网络的发展,它需要自适应或自配置的解决方案来保证可靠的通信量。相反,为了能够解决前面讨论过的缺点,研究界需要付出更多的努力。

    B. 本文贡献

      本文试图收集如何以及何时使用ML技术进行流量分类的不同方法、策略和过程。它将研究从监控阶段到实施ML解决方案的过程。主要目的是为打算使用ML技术进行流量分类的领域从业人员提供全面的指导。从这个意义上讲,本文主要研究基于科学界的经验实现流量分类的步骤。值得一提的是,本文的研究集中在IP层的流量分类上。例如,本研究将概述可用于改善运营商网络级别的QoS的方法。简而言之,主要贡献如下:

    • 提供了一个全面的工作流程,以了解如何通过IP流上的ML技术实现流量分类。
    • 研究与文献中相关的工作流程的每个步骤。
    • 提供了一组当前方法根据工作流遵循的路径。
    • 作为最终结果,提供了流量分类问题的一般概述,以及根据先前结果得出的未来方向。

      总结这一部分,值得指出的是,本综述与其他相关工作的主要区别在于提出论文的方法。参考的论文按照将ML技术应用于Internet流量分类领域的一般步骤进行组织。

    C. 本文结构

      本文的其余部分安排如下。第II节简要介绍了流量分类的问题。该节首先介绍ML技术和网络流量的一些基础,最后总结一些最常用的方法。第III节介绍了作者评审论文所采用的方法,该方法基于知识抽取的ML过程。按照前一节的指导方针,第IV节报告了网络中进行数据收集的常用方法。第V节报告了从观察到的流量中提取特征的策略。第VI节介绍了一些减少或选择提取特征的方法。第VII节研究了如何选择ML算法进行流量分类。第VIII节旨在了解文献中为实现ML解决方案所做的努力。第IX节分析了文献的结果,第X节概述了调查报告的结论。

    II. 背景

      在第II-A节中,介绍了ML基础、一般步骤和经典算法的综合。接下来,在第II-B节中,对流量分类方法进行了概述。

    A. 机器学习介绍

      机器学习(ML)技术是识别和分类不同类别的一种非常流行的方法。它的主要目标是赋予计算机自动学习能力,即机器能够在一定条件下从过程中提取知识。ML试图从一组特征或属性中提取知识,这些特征或属性表示过程或者观察到现象的可测量属性。这样,学习过程通过训练不同的模型来执行,即分类、预测或聚类模型;它们的使用取决于问题的特征。知识抽取由一个根据案例研究的历史经验建立的ML模型处理。
      在文献中可以找到不同的ML方法。例如,[13]提出了一组迭代步骤来发现大型数据库中的知识。这项工作报告了将数据转换为知识的传统方法,称为数据库中的知识发现(KDD)。KDD的主要步骤包括数据选择处理转换挖掘和解释/评价。数据挖掘组件指的是数据挖掘方法的应用,这些方法从数据中确定模式。大多数数据挖掘方法都是基于ML技术的。本文介绍了用ML技术实现知识发现的一般步骤。

    1. 数据收集

      此步骤旨在收集有关案例研究的信息。通过建立测量程序,从物理或数字传感器获取数据。这些数据描述了当前或历史状态,用于定义实验环境。一个测试环境由所有的软件、硬件和网络组件,以及其他感兴趣的过程所持有的组件组成。这个测试环境对于使用ML技术构建模型(学习和测试)是必要的。从测试环境中设置的多个场景中捕获和收集样本。

    2. 特征提取FE

      特征提取是最重要的步骤之一,因为它测量或计算可能提供进程状态信息的特征。简言之,FE过程计算反映所收集数据中特定属性不同的度量值。主要目的是获得更好地描述问题的描述符。FE过程的结果是由属性列构成的结构化表,其中每一行是一个样本,还有一个附加的可选列,列的当前状态为每个样本(通常称为标签或类)。如果状态未知,则样本未标记。
      特征提取可以执行数据处理过程以删除不需要的缺失值和清除数据等。最后一个与异常值检测相关,它可能会破坏ML解决方案的性能。此外,可以通过对属性值进行规范化聚合操作来转换数据。在聚合过程中,这些特征被组合成一个对问题更有意义的单一特征。
      在这个阶段,我们可以从一个初步的研究开始来理解数据。例如,使用带标签的数据,可以处理表来查找类不平衡,这是一个或多个类的样本量比另一个类的样本量要高的情况。类不平衡数据可能会使一些ML模型从一个类中学习更多的内容从而产生偏差。处理类不平衡数据的一种方法是尽可能减少类中不相关样本的数量[14]。
      最后,必须指出的是,FE过程可以嵌入到ML算法中;此外,历史数据集可能不可用,ML模型应该从头学习。这些特殊性将在第II-A4节中扩展。

    3.特征降维FR和特征选择FS

      这是一个可选步骤,允许选择或减少提取的特征数。FR是使用原始的属性创建新的属性,而FS是寻找一组较少的属性来更好地描述特征。这些步骤旨在减少诸如时间消耗和维度诅咒等问题。文献[15]和[16]对FR和FS过程的性能和理解进行了调查。FR和FS通常分为过滤器包装器嵌入式方法,这些方法又可以通过有监督无监督策略进行开发。在有监督策略中,目标是找出最有助于定义分类决策的特征。在无监督策略中,主要目的是确定数据分组的特征。
      在过滤器中,每个特征使用一个度量其相关性的度量来给出分数。对这些特征进行排名,最相关的是那些满足可接受的阈值的特性。相关分析是一种简单的滤波方法,通过计算相关系数找到特征对之间的关系。其他滤波器技术包括基尼指数[17]、信息增益[18]、拉普拉斯分数和稀疏度分数[19]、[20]等。滤波器算法可以使用无监督学习来寻找最佳的基本特征[21]–[24],或者通过结构化稀疏正则化模型来选择特征,从而保持了数据集中实例的聚类结构[25]–[27]。另一方面,有监督学习常用于包装器方法,其中定义了一个目标函数,以确定不同特征集对分类器精度的影响。需要选择提供最佳分类性能的特征。遗传算法序列搜索策略被广泛用作包装器[28]、[29]。
      此外,一些ML算法包括嵌入到模型设计中的FS过程,例如正则化回归模型基于决策树的模型[30]、[31]。最后,其他技术集中于在原始特征的基础上生成更具代表性的特征[32]、[33]。这些技术可以在特征生成中找到,明显地与FR和FS过程分离。

    4. 算法选择和模型结构

      前几个阶段的结果生成了一个包含案例研究的历史信息的数据集。历史数据集是构建ML模型的关键资源。不同的ML算法已经被开发出来并尝试用于解决分类、聚类和回归等的任务。ML算法的作者希望发现的问题或知识类型有关。
      在ML中,有两种典型的学习类型:有监督学习无监督学习。大多数有监督学习算法调整模型参数,使模型输出与输入的实际期望输出之间的误差最小。这意味着必须对历史数据进行标记。另一方面,无监督算法试图在事先不知道输出的情况下找到输入之间的关系。这些关系可以是相似性、近似性和统计关系等。作为学习过程的衍生结果,有监督的算法通常用于执行分类任务,而无监督的算法则更倾向于对输入进行聚类,以便发现它们之间的异常或相似行为。一般来说,ML模型和学习类型与要解决的问题类型相关。
      [34]-[36]可以找到ML算法的不同分类。例如,一般情况下经典的有监督算法有基于统计模型规则神经网络NNs等。此外,有几种方法不一定属于上述分组,可以分为参数方法非参数方法。例如,在参数模型中,目标是确定使成本函数最小化的参数,例如支持向量机(SVM)。一种非参数算法是K近邻(KNN),它通过测量样本的距离来收集相似的样本。在无监督方法中,一种分类方法将技术分为基于原型的聚类层次化方法基于密度的方法等。
      目前,ML算法除了基于有监督和无监督学习外种类繁多。例如,半监督算法利用未标记的数据训练分类器,或者用标记样本训练分类器,然后评估分类器中的未标记样本,或者对未标记样本使用无监督方法。由于数据集中存在标记样本和未标记样本,因此也可以通过有监督和无监督学习之间的组合找到混合方法[37]。此外,集成技术使用各种ML模型(通常是分类器)并通过组合策略组合它们的结果。BaggingBoosting等策略被广泛用于构建集成模型[38]。还有一些更先进的技术,例如,增量学习,旨在用新的输入在线更新ML模型[39]。最后,强化学习的重点是在线表现(通常是累积奖励),在任何时候采取行动时都是最大化的[40]。

    5. 分类模型验证

      本节概述了分类解决方案最常用的验证方法。监督学习需要样本标签的预先知识,样本标签是验证ML模型的关键信息。通常的方法是将数据集分为训练集测试集。用训练集建立ML模型,用测试集评价模型的预测能力。给定模型预测和测试集的真实标签,可以通过几个性能度量来量化ML解决方案的分类能力。例如,[41]提出了分类性能度量的研究,将分类性能度量分为要实现的分类类型:二进制多类多标记分层。当一个输入样本只能被分为两个不同的类中的一个时,就会发生二元分类。相反,多类分类意味着输入在一个类池中只能被分类为一个类。多标签分类允许将输入样本分类到类池中的多个类中。最后,层次分类类似于多类分类,但粒度更大,因为主类被划分为较低级别的子类。
      为了验证ML模型,最常用的方法之一是根据分类能力来衡量其性能。在模型预测和真实标签之间可以找到一些关系,例如正确和错误分配给类的样本数等。通过计算例如准确性精度召回率F-scoreROC等来衡量ML模型性能。例如,对于具有正类和负类的二进制分类,真阳性TP假阴性FN真阴性TN假阳性FP可以通过敏感度和特异度来衡量分类器的性能。这些度量的组合,如F-score和ROC,提供了关于分类器性能的更精确的信息。特别地,ROC曲线是通过计算改变分类器的判别阈值的灵敏度和特异性得出的[42]。在ROC曲线中,理想值代表了许多敏感性和特异性(一种非常好的诊断方法),其结果是一个可解释的图,说明了分类器在不同操作点的性能;此外,可以计算曲线下面积(AUC)以从ROC获得紧凑的度量。通过计算二进制分类性能的微观或宏观平均值的总体性能度量,上述分析可以映射到多类问题。这些度量中的每一个评估了模型性能的不同方面[43]、[44]。
      传统的模型评估方法是分别使用训练集和测试集来训练模型和计算性能度量。此外,交叉验证是将数据划分为k个子集的模型验证的另一种方法。其中一个子集用作测试集,其余用于训练模型。对k个子集执行相同的过程,并通过每个子集的评估分数的组合(平均)给出全局性能表现。交叉验证方法有不同的变体,如leave-p-outleave-one-out
      最后,有一些更先进的方法可以在不同的测试场景下测量分类器性能,例如Friedman测试Wilcoxon测试等。这些场景包括数据集的不同分区、分类器设置的不同初始条件,或者在训练过程中嵌入随机初始化等。这些方法主要用于比较一组分类器,并选择在不同条件下性能最高的分类器[45]。

    B. 流量分类

      在流量分类中,可以发现几个趋势来分类、理解、诊断或观察网络的状态。流量分类的完整分类见[46]。尽管如此,在图1中提出了对该分类法的修改,该修改又集中在感兴趣的分支机器学习上。图1主要分为五个部分:数据技术特征工程算法选择输出。每个部分的简要说明如下:

    • 数据:用于创建流量分类解决方案的输入数据类型。值得注意的是,流量数据可以加密或未加密。可以通过DPI工具实时捕获标记流量。第IV节将提供有关该部分的更多细节。
    • 技术:主要有四个主要分支,如机器学习基于统计基于行为的和有效载荷检查。在本节中,将简要介绍这四种方法,以便大致了解它们的工作原理。但是,ML分支将在整篇文章中扩展。
    • 特征工程:根据第II-A2节和第II-A3节中提出的策略,本部分仅涉及ML分支,并展示了在IP流上应用的特征分析技术的潜在和现有趋势。本节将在第V节中扩展,而IP流的正式定义在第II-B1节中给出。
    • 算法选择:该部分根据所使用的学习过程(有监督、无监督、混合等)和要完成的任务(分类、聚类等),描述构建ML解决方案的可用方法。
    • 输出:最后,输出主要取决于要实现的目标,例如将流分类为类别或应用程序名、系统状态等。

      本节将介绍如下内容。第II-B1节正式定义了IP流,它是Internet网络中最常见的通信会话表示。接着,介绍了经典的流量分类技术:第II-B2中的有效载荷检测、第II-B3中的基于统计的技术、第II-B4中的行为技术和第II-B5中的ML技术。

    图1 以ML分支为中心的流量分类方法概述

    1. IP流定义

      在业务分类中,通常使用术语“流”来描述从源发送到目的地的一组分组。根据[47],IP流是网络中的一组分组或帧,在一个时间间隔内可以在网络中的某个点截获。属于同一流的数据包共享若干公共属性,例如:a)一个或多个数据包,具有传输或应用报头字段(例如,源和目标IP地址、端口号和类型等);b)数据包的特征作为MPLS标签的数量;c)附加字段,例如下一跳IP地址,因此,可以概述单播流 F i F_{i} Fi的经典定义

    • 定义1:一个IP流 F i F_{i} Fi可以被定义为:
      F i = { H i , P i } (1) F_{i} = \{H_{i}, P_{i}\}\tag{1} Fi={Hi,Pi}(1)
        其中 H i H_{i} Hi是流i的头, P i = { p i , . . . , p i n } P_{i} = \{p_{i}, ..., p_{in}\} Pi={pi,...,pin}是属于流i的一组数据包。

    • 定义2:流量头 H i H_{i} Hi可以被如下一个元组定义:
      H i = ( I P s r c , I P d e s t , p o r t s r c , p o r t d e s t , p r o t o ) (2) H_{i} = (IP_{src}, IP_{dest}, port_{src}, port_{dest}, proto)\tag{2} Hi=(IPsrc,IPdest,portsrc,portdest,proto)(2)
        其中 I P s r c IP_{src} IPsrc I P d e s t IP_{dest} IPdest是IP源和目标地址; p o r t s r c port_{src} portsrc p o r t d e s t port_{dest} portdest分别是源和目标传输端口;proto是传输协议。
        此外,在表达式(3)中定义了 P i P_{i} Pi。P是通过监视点的完整数据包集。 h k h_{k} hk是包 p k p_{k} pk的头, H i H_{i} Hi是流的头。
      P i = { p k ∈ P ∣ h k = = H i } (3) P_{i} = \{p_{k} \in P \mid h_{k} == H_{i} \}\tag{3} Pi={pkPhk==Hi}(3)
        对于单播双向流(假设a是客户端,b是服务器),上述定义的扩展是指:

    • 定义3:一个双向流 F a b F_{ab} Fab的定义为:
      F a b = F a ∪ F b (4) F_{ab} = F_{a} \cup F_{b}\tag{4} Fab=FaFb(4)
        单向流的并集是通过元组中某些元素的匹配来实现的。
        在定义2中,一些端口号可以保留给由IANA建立的应用程序类型,但是,在大多数应用程序在应用中随机生成端口。此外,通信会话(表示为多播会话)可以打开多个端口,这反过来可能影响上述定义。在过去,Internet流量允许使用开放端口和注册端口(使用IANA)之间的匹配来获取应用程序的名称。然而,具有随机端口的新应用程序的激增,以及Internet网络的增长,使得基于端口的方法变得不准确。它们过时了,出现了新的流量分类方法。

    2. 有效载荷检测

      这种技术也称为深度包检测(Deep Packet Inspection,DPI),它分析网络数据包的内容,即IP报头和有效载荷。
      DPI将从包中提取的信息与一组(预先定义的已知的)签名进行比较来区分应用协议。一些DPI工具包括nDPILibprotoidentPACEL7 filterNBAR等。
      最近,由于新的应用程序和协议的不断增多,DPI工具遇到了一些缺点。特别是,当创建新协议时,DPI工具必须更新;否则,它们会获取未知或错误的签名从而导致预测失败。因此,必须不断更新工具签名列表。另一方面,当a)使用包加密来保护通信会话中的内容时;b)部署HTTP2来复用包内容时;c)因为NAT网络无法区分通信会话,采用NAT网络时;和d)部署虚拟专用网(vpn)以实现数据隐私和完整性等,DPI是不够的。
      尽管DPI工具有其特殊的缺陷,但它们仍然被广泛用于流量分类。一些研究报告了它们在流量分类中的准确性和受欢迎程度[48],[49]。一些工作试图解决当DPI工具检测到新协议时手工设置签名的问题[50],[51]。[52]提出了基于固定比特偏移机制的业务签名的自动生成。该工作提出从流中随机选择包,并在同一位偏移量下对包的每一位进行比较。签名从固定长度中提取、记录并计数,以生成最终签名。在[53]中,同样的作者提出了另一种使用聚类技术来收集相似的流行为的方法。从产生的簇中,取一组流以应用基于令牌的算法HamsaMSA,即t-coffee算法;这两种算法都已被用于提取生物学中的正则表达式,并被用于提取二进制序列中的签名。这些新策略有助于DPI的流量分类。

    3. 基于统计的技术

      基于统计的技术主要目的是找出流、通信终端系统和网络配置之间的统计差异。这种差异可能是两个或多个不同的应用程序或行为的结果,其特征是统计特性。在某些情况下,可以使用统计分布来建模网络流量模式。概率模型的构造已经被一些研究人员应用于了解网络的不同状态。[54]中的工作引入了一个具有公共和私有IP地址的监视场景,并测量每个配置文件的统计信息,例如TCP和UDP数据包的数量,以及失败流的数量。其目的是构造不同的统计分布,如负指数分布高斯分布,以检测P2P通信中的可达性。以类似的方式,[55]中的工作提出了使用统计分布对流进行分类。另一方面,[51]在包头上引入了文本分类,结果由一个统计二元模型进行评估,该模型将确定它是否是一个新的签名。这种方法的主要缺点是静态地构建不整合学习过程的统计模型。与之前的方法一样,在互联网流量模式动态增长和演变的情况下,这种缺点会影响其性能。此外,ML技术对一些基于统计的方法进行了调整和改进。

    4. 行为技术

      此方法通常尝试在网络中的端到端通信中查找模式。它还研究了社区模式,其中社区由不同点的宿主整合而成。
      网络中最常见的行为模式表示是通过图建模,其中图论用于查找高度连接的节点(主机)、连接数和打开的端口等[56]。例如,[57]分析流量行为以识别P2P流量。第一步是通过k-means模型将相似的流聚集在一起。接下来,集群由流量分散图TDG表示,其中节点由IP地址表示,节点之间的链路是注册流。最后,在图上应用一组规则来检测应用程序的名称。这些规则考虑了一些特性,比如节点的百分比和图的平均节点度。[58]中的工作提出了一种识别P2P社区的方法,其中网络中的交互用图形表示。节点由元组(IP、端口)构成,连接由节点之间交换的数据包的数量给出。利用已知远程节点的端口分布对P2P网络进行识别,建立多项式分类器来判断图是否代表已知网络之一。
      这些技术通常研究的另一个目标是识别流量活动模式,如[59]和[60]中的工程。例如,[59]展示了流量分析图(标记),以便直观地揭示不同类型应用程序的行为。在标记中,节点是IP地址,边缘是感兴趣的流;感兴趣的流是根据研究的目的定义的,以便构建标记来捕获主机之间的相关流量活动。参考文献[60]建立了二部图并计算其相似矩阵。该矩阵将作为聚集相似节点的聚类算法(k-means)的输入。
      这种方法也被报道用于检测异常。文献[61]对这一领域的研究现状进行了综述。

    5. 机器学习技术

      对于这个特定的领域,一个主要的目标是根据互联网网络的状态对流量进行分类。在这种情况下,因特网通信的最常见表示为IP流,可以提取代表性特征并用于流量分类。如图1所示,所使用的一些特征提取方法可分为统计流特征时间序列基于图等。FR或FS过程是可选的。它们通常与ML一起应用,并且已经在性能方面证明了添加到ML模型的好处[16]。
      ML算法可以是有监督的、无监督的、半监督的或混合的,它将依赖于ML任务的执行和可用的数据。ML任务与研究目标直接相关。其中一个最流行的目标是异常检测,以防止可能在服务提供商和最终用户之间造成严重损害的网络攻击。此外,异常检测还可用于识别网络中的故障或错误配置[9]。另一方面,应用程序协议检测也吸引了这一领域的兴趣,特别是那些希望改进为客户提供的服务的服务提供商。例如,提高服务质量是网络资源管理的主要目标之一。
      值得一提的是,由于添加了FE过程,ML方法能够处理加密通信。通常,从IP流中提取的特征不会侵入包内容,这允许为加密通信创建分类模型。然而,这种方法在使用HTTP2、VPNs和NAT网络时可能会遇到问题,因为通信会话的分离并不明确。
      总之,在图1中值得注意的是,大多数业务分类工作集中于并应用到不同的需求,例如检测应用协议、类别或异常。为了实现流量分类,可以使用前面讨论过的技术;但是,本文只扩展了ML分支。在这一分支中,我们将研究一些尝试实现不同流量分类目标的工作。

    III. 方法

      本调查报告与所参考的调查报告在介绍工作的方式上有所不同。主要按照第II-A节中定义的顺序组织,这些程序主要解决流量分类问题。在本节中,将按照图2中提出的工作流程,详细介绍调查论文的方法。在此图中,对可以离线(绿色箭头)和在线(黄色箭头)方式执行的块进行了区分。

    图2 机器学习流量分类工作流程综述

      一般来说,离线过程处理数据采集块存储在网络中的一个或多个监测点的历史数据集。数据收集步骤允许测试Internet中的不同场景。此部分主要在一个时间窗口内收集IP流。此外,该部分还包含若干步骤,例如包管理流重建存储。在第IV节中,将回顾与此步骤相关的工作。在离线运行中,必须收集历史数据集;相反,在在线运行中,数据包流被连续地处理。一旦记录了表征问题的数据,就按照第V节中的方法提取相关特征。同样,在在线和离线阶段,分别从历史数据集和分组流计算特征。此时,可以通过FS或FR方法来处理生成的特征,以获得缩减的空间或一组新特征。最常见的过程和工作在第VI节中进行了报告。FR或FS过程还与算法选择和模型部署块有关,因为有些方法根据ML模型给出的性能来选择最相关的特性。
      现在,从原始数据集中,基于所选特征获取新的数据集。在离线运行中,新的数据集用于构建模型,以便执行分类和回归任务等。算法选择部分是指选择最合适的ML算法的过程和方法。正如第VII节所指出的,一些研究采用了不同的比较方法来证明或验证它们的选择。最后,模型构建部分集中于参考文献中为实现这些模型所做的努力。最后两个部分也可以在线评估,主要是为了提供不断发展或升级的ML解决方案。还必须指出的是,此工作流表示一个指南,其中包含使用ML进行流量分类的一般步骤。但是,这些步骤的顺序可能会有所不同,也可以找到组合的步骤。
      更简明地说,从图2中的每个块中提取特定特征。这些特性在图3中详细说明,图3为参考的论文通常遵循的用于流量分类的一些路径。在该图中,可以注意到,对于数据收集块,将研究互联网流量是否为:真实或模拟、公开可用、加密和标记(基本真实)。这些方面对于描述这个问题将变得非常重要。特征工程模块包括参考论文使用的FE和FS方法。从这个意义上讲,四种特征提取方法被认为是最常见的方法,如基于统计的方法STA-TsB基于图的方法graph基于时间序列的方法混合方法。在FS块中,它将表示参考论文是否进行了该过程。接下来,对于算法选择块,定义了使用的ML方法和要实现的目标。研究的趋势有经典分类CClass多分类集成方法MClass&E分类与异常检测聚类Clust混合与先进技术H&A。研究的分类目标包括应用名称(AppN)应用类别AppC异常检测AD。此外,还考虑了其他目标,如用户行为检测社区搜索等。最后,在模型部署块中,区分了实现ML解决方案(YES)的论文和没有实现ML解决方案或没有指定ML解决方案(NNS)的论文。解决方案的重新配置将是研究的一个关键方面,从这个意义上说,如果参考论文提供了再训练(RTraining)、自学或进化(SLE)或其他/非指定(ONS)过程,则将得到验证。
      论文检索是在最重要的学术数据库上进行的。所选文档在标题、摘要或关键字上都有,例如“流量监视”、“流量分析”、“Internet分类”和“加密流量分类”等术语。这些论文发表于2010年至2017年之间,它们位于学术数据库中,如ScienceDirect、ACM、IEEE Xplore和Scopus。必须注意的是,同样考虑了会议记录和期刊的工作。

    图3 将在每个部分中论述的最重要的工作流

    IV.数据收集

      传统上,历史数据是构建ML解决方案的重要知识来源。一组对于问题丰富而完整的观察结果可以提高ML模型的性能和泛化能力。然而,在流量分类领域,这一方面是至关重要的,因为:互联网网络的复杂性和可扩展性,流量的不断演变,以及不允许数据收集的隐私策略等等。因此,真实的网络流量数据很难用于分析和知识提取。已经开发了一些工具和策略来解决这一差距,本节将对其中一些工具和策略进行研究。
      数据收集过程的总体结构如图4所示。在这个图中,按照以下顺序给出了三个层次的抽象:

    • 由触发流量的条件定义的网络环境,例如真实的、生成的或模拟的。
    • 因特网网络本身。
    • 数据测量过程,指如何收集网络包。

      本节讨论的主要问题有助于找到良好流量分类结果的组件。首先,在第IV-A节中,对用于监视通信量的网络环境进行了区分。随后,在第IV-B节中,将讨论数据测量程序。此过程与所采用的环境无关,并考虑了包提取流重建存储等步骤。最后,第IV-C节将概述用流量的真实值标记网络流的重要性。

    图4 流量分类的主要数据收集组件

    A. 网络环境

      需要注意的是,在综述的论文中发现了三个主要的趋势:真实流量采集流量生成和仿真。实际流量通常从网络收集,混淆通信实体(如客户机服务器)之间的私有信息。流量生成试图通过脚本复制或建模真实交互来模拟类似的真实流量条件。最后,流量仿真的目标是将场景设置为与真实场景尽可能接近,其中一个或多个参与者可以有意地模拟网络中的常见交互。
      最佳解决方案是从网络中捕获真实的流量,以便获得可靠的真实数据源;但是,此解决方案很难执行,主要是由于隐私问题。尽管一些工作设法获得了监测网络流的实际条件,但这些数据几乎从未向研究界公开。附录A列出了一些公开的数据。
      流量生成解决方案主要用于评估网络设备性能、通信安全性、资源管理等。在文献中可以找到几种流量生成方法,其策略主要分为:基于流量的生成基于模型的生成。基于流的生成是为了重现在真实场景中捕获的流的内容和到达时间,包的内容由虚拟的或随机的有效载荷给出,用于技术测试。一些基于流的生成工具包括BRUTE[62]、iPerf[63]和Ostinato[64]等。例如,BRUTE被设计为生成以太网通信量IPv4或IPv6。Ipref通过调整时间、协议和缓冲区等参数来测量IP网络上可达到的最大带宽。以同样的方式,Ostinato工具可以以不同的速率生成具有不同协议的通信量。相比之下,基于模型的流量生成方法试图再现真实流量的统计特性,并将其表示为一个模型,该模型随后将生成用于实验测试的流量。例如,[65]通过训练隐马尔可夫模型(HMM)生成客户机工作负载。该模型是在网络试验环境中用真实的人与人之间的交互建立起来的,其主要目的是通过操作系统向每个应用程序发送一系列事件,以创建合成数据。训练数据由事件ID、进程IP和事件之间的到达时间组成。最后,该模型可以注入真实的客户机-服务器交互来创建合成的流量数据。此外,基于模型的生成可以在包级别而不是应用级别执行;例如,[66]提出了一种用于包时间和包大小的合成序列生成的HMM。[67]中的工作回顾了一些最流行的流量生成工具,并提出了一个综合工作负载生成器,它可以用作放置流和基于模型的生成方法的平台。这些工具的一个限制是,它们通常不能生成加密的通信量。加密流量覆盖了当前互联网流量的很大一部分,因此对其进行分析时必须考虑其集合。
      另一种建模通信行为的方法是基于网络仿真系统。仿真网络环境涉及在两个或多个端点之间构建通信配置。一般的架构是在不同的虚拟机或物理机上设置多个客户机,为每个客户机配置监视点,并设置数据存储组件。为了记录向后和向上的IP流,可以引发产生通信量。[68]-[71]中的工作介绍了流量仿真框架,这些工具是公开的,需要根据感兴趣的流量分类进行调整。[68]提出了一种基于用户行为自动仿真的网络流量仿真框架。模拟了几个场景,这些场景代表了用户与应用程序交互的一系列操作;这是通过一个为Microsoft Windows程序创建自动化脚本或宏的工具实现的。类似地,[69]和[70]中的工作模拟记录图形用户界面的用户行为,以生成因特网流量。与流量生成方法相比,流量仿真可以覆盖使用加密或流量封装的应用程序;此功能对于使用ML的流量分类是可取的。

    B. 数据测量

      在本节中,将介绍在Internet网络上执行数据测量的常用方法。此外,如何在监测点进行流量观测。考虑这两个方面是为了更容易地理解如何执行标注任务,以及如何在实际网络环境中实现ML解决方案。通常,网络流量监控最常用的策略之一是在一个时间窗口内提取一组数据包;这种方法是参考文献中使用最多的,本节将对此进行研究。
      设置好网络流量环境之后,接下来要解决的问题是如何导出数据包、构造IP流和标记这些流的应用程序名称(如果需要),以便最终存储或使用这些数据。[72]提出了使用NetFlowIPFIX进行流量提取的综合程序。这项工作将数据测量的步骤定义为:i)数据包捕获,ii)流量测量和输出,以及iii)数据收集。包捕获步骤是指从监测点提取二进制数据的过程,在该步骤中,每个包被视为单个独立实体。在此阶段要考虑的关键方面是样本的大小采样时间[73]。接下来,流量统计过程旨在将分组聚合为第II-B1节中定义的流。当认为流达到顶点时,即通信完成时,就会发生导出过程。统计和导出过程相互关联,可以统一。最后,数据收集是存储导出的流。引用[72]中相同的工作,对于使用ML的流量分类,可能只需要一个额外的组件,这就是标注任务。此附加组件通常放在流量分类步骤中,其目的是定义每个流的应用程序名称,或丰富知识库所需的任何其他标识符,特别是对于受监督的ML技术。标注任务的重要性将在第IV-C节中讨论。
      关于数据测量步骤,有几项工作试图分别改进它们各自的不足之处。例如,[73]提出了一种分组抽样技术的分类方法,旨在根据要实现的目标给出选择最合适方法的指导原则。文献[74]中的工作介绍了运行在商用硬件上的包捕获引擎,这些引擎有助于减少流量分类中的时间响应。使用商用硬件,[75]和[76]实现了包捕获。
      监控点的流量观测从数据包捕获开始。在这个组件中,涉及采样过滤过程。这些包通过统计过程聚合成流,稍后导出以供使用。收集到的流可以存储以供进一步分析或直接由系统分析器使用。流量监控的一些实现见文献。[77]中的工作显示了在工业网络上的实现,而[78],[79]将其应用于家庭网络。[80]中的工作展示了包捕获(Tcpdumb、Wireshark等)流量测量(nProbe、YAF、QoF等)数据收集(nProbe、flowd、nfdumb等)的流行网络监视方法的最常见实现。
      流量观测的主要挑战之一是实时捕获数据包。涉及大量高速数据。为了处理流式数据,采用了经典的基于批处理的方法;但是,这些方法在关键环境(如多媒体监控[81]或网络威胁)中不能提供快速响应。传统上,基于批处理的方法是在流量统计和输出块之后部署的。它的主要目的是管理和存储导出的流,通常以时间间隔批处理到二进制文件(例如,pcap文件)中。基于批处理的方法必须满足一定的数据处理速度和容错性等要求。在基于流的方法中,前者的要求必须满足更为迫切的要求,特别是数据处理速度。例如,在[82]中的工作以流的方式分析流量观测过程,以减少用于流量分类的延迟。作者提出了一种使用消息传递系统分发导出流的工作流。IP流被转换为数据序列化格式。选定的数据序列化格式是二进制JavaScript对象表示法(BSON)。最终的目标是提供一个比基于批处理的方法更高效的分布式数据系统。[83]中的工作评估了一个最常用的用于流量监视的分布式流处理系统的性能。作者提出了一个体系结构基准,可公开用于诸如task之类的任务。同一作者将这项工作扩展到比较三个流处理系统,以找到每个系统对于实时网络流处理的适用性[83]。

    C. 标注任务

      标注任务过程是指为每个流设置一个标识符;该标识符与通信会话中的特定模式相关,例如应用程序的名称或类型。由于跟踪属于特定应用的流的复杂性,将真实信息与流量轨迹相关联可能是一项繁琐的任务;此外,此过程也是验证流量分类器的关键任务。就我们所知,很少有工作实现可靠的真实值标注,因为最常见的方法是使用DPI工具来完成此类任务。例如,[84]中的工作提出了一个工具,该工具能够通过使用套接过程为每个流建立标签。然而,这个解决方案也使用了DPI工具。
      在给定网络环境和数据测量过程的情况下,标注任务可以通过仿真或生成系统来建立。仿真和生成系统是受控制的环境;从这个意义上说,它知道触发的通信量的类型,并且可以将它与收集的流相匹配记录。因此,标注过程可以在监视过程运行时执行,也可以在流量分类系统中自行执行。对于真正的流量监视,DPI或基于端口的工具仍然用于此任务。然而,已经证明,这些技术在未来的分析中增加分析的不确定性和误差,特别是相对于ML技术来说。参考文献[85]量化了使用端口分析和DPI工具将协议标签与流关联时获得的误差。研究表明,端口分析仅对一组协议是准确的;而DPI工具提供了更好的结果。作者通过实验证明,对于P2P流量,DPI工具的失败率超过14%,对于TCP和流媒体应用上的Skype,DPI工具几乎失灵100%。尽管如此,在这个问题上可以找到不同的观点。例如,由[86]所做的研究显示了几个DPI工具之间的性能比较,在大多数情况下,真实标签和DPI标签结果之间的误差很低。重要的是要考虑到,在所有这些比较中,所使用的数据对结果有重大影响;以及DPI工具的版本和进行研究的年份同样有很大的影响。一般来说,流量跟踪显示出通信模式的飞速增加,促使流量分类器(如DPI)不断升级其引擎。此外,DPI工具在存在加密流量时是不准确的,这种情况使得它们非常不适合标注任务。
      一些工作试图提出正确定义真实标签的策略或架构。[87]中的工作评估了以恶意检测为重点的最常用的流量数据测量方法,并提出了一种半人工实践来定义真实标签。此外,出现了支持流量监控和标记的不同工具,如Tsat[88]基于志愿者的系统[89]等。此外,[90]提出了一种大规模网络监控和分析的框架,称为DBStream,它是网络监控数据的数据仓库,能够处理来自各种来源的数据流。最后,为了保留基于用户行为的语义关系,本文提出了一种新的事件流标记策略[91]。

    D. 讨论

      作为本节要完成的最重要的方面,我们可以提出一些建议,并强调未来的以下工作。

    • 由于第IV-A节之前讨论的原因,很难在网络上实现真实世界的测量和测试。因此,建议设置一个模拟网络,这可能有助于再现当前的应用程序和用户行为。此外,它还可以作为设置流量分类解决方案的测试平台。
    • 流量生成解决方案可能有助于创建合成数据,并减少数据收集的实验测试数量。因此,从模拟网络捕获的跟踪和来自流量生成器工具的跟踪之间的组合可能会提供大量的网络流量数据。
    • 模拟网络或流量生成解决方案也必须以与网络演进相同的速度移动。为了完成这项任务,需要制定升级战略。例如,半监督或增量学习技术可以向数据收集步骤提供关于新模式或异常的信息。
    • 为了制定流量监控策略,有必要研究网络所需的信息。为了从观测点获得快速可靠的数据测量,资源和时间消耗最小化是关键的因素。根据要实现的目标或所选择的FE过程,要测量的数据可以是一组数据包、只有数据包的报头,或者只有与它们相关的事件等等(参见第V节)。
    • 为收集的数据建立标记机制很重要。具体来说,不管对于有监督还是无监督,这都是一个非常重要的过程。考虑到其优缺点,必须依赖一项可靠的策略。

    V. 特征提取

      这一部分定义一些ML中的FE方法,研究了四组主要的FE程序。这项研究将使我们对每种方法进行概述性的讨论,并指导读者选择最方便的方法。在参考论文中发现了三个主要的组:基于统计的特征基于图形的特征基于时间序列的特征,这将在下一节中介绍;此外,第V-D节涵盖了一些杂项和混合方法。有关更详细的研究,请参阅[92]中的工作,其中从协议、包和流级别详细说明了数据构造、FE和FR的过程。此外,在[93]中的工作提出了特征提取的自动过程。尽管在[93]中提出的工作主要集中在检测隧道连接,但它提供了一个逻辑工作流程,用于提取和处理流程以获得特征,这可以被ML技术使用。

    A. 基于统计的特征

      从分组流中提取的特征主要是基于统计的特征,这些特征是在假设网络层的业务具有对于特定类型的应用来说是唯一的统计特性(例如流持续时间流空闲时间分组到达间隔时间分组长度的分布)的情况下定义的,可以使不同的源应用程序相互区别。在这种假设下,[94]提出了249个统计特征,这些特征可以从流量网络流量中提取出来。
      诸如到达间隔时间(IAT)分组长度等属性似乎是考虑的最重要的特征,它们的度量标准包括最大、最小、平均和标准偏差等。此外,从a到b(反之亦然)发送的包的数量、控制包以及作为传输协议的包头中的一些其他属性可用于对通信网络建模。
      如第IX节所述,大多数参考论文都倾向于基于统计的特征。在实践中,由于其简单性,很大程度上使用IP流的统计特征。基于统计特征的流量特性已经得到了大量的报道和论证。例如,对于异常检测,[92]列出了单向流和双向流的所有经典统计特征以及内容类型。[10]提出了一个类似的工作,从流和包级别来标记FE方法。
      文献[95]对统计特征进行了全面的研究。作者对10个分类器进行了测试,结果表明这些特征使分类器获得了良好的性能。另一方面,[96]表明,仅通过会话中的数据包计数和字节交换就足以识别某些应用程序,特别是P2P应用程序。
      文[97]研究了TCP连接中数据包重传引起的异常。包重传可以改变包序列,因此,无法基于统计的方法来执行准确的分类。作者提出了一种丢弃重传数据包、检测和使用原始数据包的系统。
      一般来说,基于统计的特征在这一领域通常是首选的,因为它们的计算简单,这在处理高速通信时非常重要。此外,这种方法不会侵入数据包内容,允许在尊重隐私的同时对非加密和加密的通信均可用。

    B. 基于图形的特征

      Internet网络的内在组成允许将其交互建模或表示为大型互连图。因此,该方法利用图论从网络中寻找有价值的信息。假设节点是主机,网络可以看作是一组相互连接的节点,网络的边缘表示主机之间的交互作用。这些交互可以看作是交换数据包的通信会话。通常的步骤是设置一个监视点,例如路由器。通过监视点的分组可以聚合为流。[98]给出了流量分散图(TDG)的构造方法,以及如何找到量化指标来提取信息。在TDG中,所使用的度量通常是图的基数,包括仅具有传入和传出边的节点图的对称性连通性以及节点的平均度等。这些度量用于训练分类器,该分类器将应用程序分组为协作或不协作。另一方面,为了比较两个或两个以上的TDG,作者提出计算图的相对包含度边相似度边波动率。这些度量用于检测应用程序,如游戏和DNS。
      从另一个角度来看,这些图可以用来表示网络中的流量活动。例如,[59]中的工作展示了流量活动图(标记)来揭示主机之间的行为。与前面的情况一样,节点可以被视为主机,而边缘是打开会话中的流。可以找到不同的变体来创建边之间的链接;例如,在[58]中的工作提出了将边作为一对IP和端口,这是由可以为P2P通信打开多个端口的应用程序行为驱动的。
      统计图分解技术被广泛应用于这些方法中以提取最主要的子图。例如,非负矩阵因式分解(NMF)正交非负矩阵三因式分解(tNMF)旨在提取支配子结构并表征其结构性质,以分析网络应用。利用这些结构特性,应用K-均值来发现不同的应用行为[60]。
      总之,这种方法的主要目的是通过图表示来建模应用程序行为,并试图发现Internet网络图之间的相似性。这些相似性将允许将图形分组到应用程序池中。这种相似性可以基于不同的特征;提取的最常见特征是图的结构属性图的连通性度量和基于社区的特征,例如连通良好的图之间的密度或相似性[99]、[100]。

    C. 基于时间序列的特征

      一般来说,时间序列数据可以看作是按时间顺序索引的事件序列。从这个意义上说,FE通常是在离散时间数据上执行的。
      网络流量问题具有适合作为事件驱动问题处理的特点。一对(例如,客户机-服务器)之间的交互强烈依赖于按时间顺序排列的事件,例如打开或关闭通信会话、启动或完成数据传输等。这样的场景促使我们使用时间序列特性或数据驱动的方法来发现网络中的模式。
      在这个领域中,大多数基于时间的方法都试图找出到达时间(IATs)和属于流的包大小之间的关系,以便通过时间序列表示来描述应用程序模式。例如,[101]中的工作提出了单向流的时间活动向量,该向量考虑了流的活动时间、流是否显示活动等特征。此外,可以发现其他不同的方法意图使用网络的时间行为,例如[102]。
      特别地,信号处理方法可用于将时域输入转换为频域输入。其主要目的是获得信号数据的等效幅度相位,以揭示可用于流量分类的新特征。例如,在[103]中的工作提出了一种用基于傅里叶的方法检测异常的方法,对于这种情况,在一段时间内发送和接收的包被分析为时间序列输入。类似地,[104]基于小波导频(WL)技术处理FE过程。在时间窗中将双向流转换成传输字节数的时间序列,然后利用WL获得多重分形特征。多重分形表示是指一种空间或时间域的统计尺度,其主要目的是描述特征的不规则或碎片形状,以及传统欧氏几何无法分析的其他复杂对象。
      通常,传统上这种FE并不是应用于流量分类;然而,这些特征被广泛用于识别异常,如[10]所述。

    D. 其他方法及混合方法

      下面的分类提到了发现的一些方法,但是,还有其他有趣的方法来进行特征提取。这些方法试图结合或提出更适合分类问题的新特征。例如,Bag-of-Flows(bof)源于基于统计的方法,它只在构建双向流的方式上有所不同。BoFs包括由同一应用程序注入的一组流量。BoF可以定义为一组共享同一目的地和源IP的流,这些流表示连接的已打开端口的变化。这种行为常见于通信会话中。BoFs计算了所有流量的统计特征。用所有的流训练ML模型,每个包都有一个通过一些标准定义的标签;例如,标签在包中的出现率很高。对于新的传入流,使用ML模型获取类标签;跟踪流可以与bof关联。一些工作已经测试了使用bof来提高使用ML分类和聚类方法的性能的优势[105]–[107]。
      另一方面,基于统计的特征可以与基于图形的特征相结合,以获得更好的分类性能,如[57]中在流量分类框架中提出的,以及[54]中在异常检测中提出的。
      研究包从源发送到目的地的顺序、序列和时间,可能有助于用基于时间和事件的方法描述具有相关行为的应用程序。例如,[108]中的工作仅使用序列包间时间和有效载荷大小来构建流的序列作为分类模型的输入特征。另一方面,[109]为他们的工作提供了时间序列和基于统计的特征。时间序列特征是通过应用程序的句法结构获得的。句法结构用有限状态机表示。其主要目的是根据机器状态来模拟流的分组序列,包括分组长度和分组方向(向前和向后)。

    E. 讨论

      本节实质上介绍了所参考的FE方法的综合,并对其进行了定性描述和比较,并简要讨论了未来的发展方向。

    1. 比较:表1总结了本节研究的FE趋势。此外,还对它们的优缺点进行了评述,并介绍了应用这些方法进行流量分类的一些工作。从表中可以看出,基于统计的特征是流量分类中使用最多的特征。此外,它们适合处理加密和未加密的通信量。
    2. 指导方针和未来趋势:总结一下,有可能为FE找到不同的分类,这主要取决于要实现的目标。在这个意义上,我们概述了一些关于FE过程的研究。
      • 必须根据要实现的目标和选择的ML方法来定义FE过程,还必须考虑计算和响应时间。
      • 可以考虑计算更好的特征,以防止错误分类和类不平衡行为。例如,在基于统计的方法中,可以考虑其他指标,例如均值和方差计算的变化(例如移动平均值[150])。
      • 可以提出混合FE方法,以更好地描述该过程。例如,统计特征包括基于时间的行为和IATs统计。此外,研究基于时间和事件的行为似乎是该领域开发的一种逻辑方法。
    表1 特征提取过程总结表及相关论文

    VI. 特征降维与选择

      当给出大量特征时,ML模型可能会有一些问题。由于增加计算负担、降低精度、增加过拟合等,这些模型会被修剪。这些问题通常与维度诅咒有关。在这一领域中,FS被广泛应用于选择最相关的特征,提高ML模型的精度。ML进程可能会也可能不会与FR或FS进程一起运算。一些研究表明,要完全获得区分应用程序与其他应用程序的模式,只需要少量的特征。文献[151]-[153]研究了流量分类中最相关的统计特征。在[152]中,使用了几种FS技术来获得最重要的特征,采用一种新的方法选择最小的特征集。将结果与三个数据集中每个特征的优化度、相似性和稳定性交叉验证;结果给出一个小的数据集,在6到14个统计特征之间,通过精度提供最佳的测量性能。
      文献[152]研究了FS和FR在利用ML进行流量分类中的重要性。使用了10个网络流量数据集来说明不同的FS技术的优缺点,如信息增益增益比主成分分析PCA基于相关的特征选择等。作者提出了三种新的度量方法来度量结果特征的性能。这些度量基于分类器的准确性、每次测试结果在不同条件下的稳定性以及FS和FR技术给出的特征集之间的相似性。结果表明,这些新的度量方法都不能提供良好的性能,因此,提出了一种将FS和FR解决方案相结合的新方法。在文献[153]中,前一项研究通过一个称为全局优化方法GOA的优化过程来估计最优和稳定的特征。GOA结合了多个著名的FS技术,在不同的流量数据集中产生一个可能的最优特征子集;然后最优熵阈值将选择稳定的特征。
      数据中的多类不平衡行为通常出现在流量分类中。从这个意义上说,[143]中的工作再使用ML进行流量分类时研究到了这个问题。作者提出用基于熵测度的度量为每一类选择一组特征。类最相关的特征是那些高于预定义阈值的特征的值,特征子集被发送到集成分类器。类似地,[154]提出了一种新的FS方法,其目的是获得最相关的特征,同时减少多类不平衡。文献[155]提出了一种能够区分最相关和不相关特征的模型。该模型是基于具有代表性的深结构深度信任网络DBNs的。DBN设计的一个主要特点是可以从第一层获得高层特征表示,而到最新的底层特征表示。这一特性使得它们适合于本研究所报道的特征生成。

    A. 讨论

      由于网络的动态性,流量数据会从一个数据集影响到另一个数据集,影响有多个方面,其中性能是最重要的一个方面。因此,我们可以得出以下研究:

    • 在ML中使用最重要的特性会影响运行时响应,提高分类器性能和训练和重新训练过程的复杂性,并丢弃数据中的冗余。从这个意义上讲,建议总是使用FS或FR方法对提取的特征进行先前的研究。这个过程还可以帮助处理类不平衡和丢弃不重要的特性。
    • 一种有趣的开发方法是动态选择功能。在这种情况下,FS流程应该适应当前流程的情况。因此,可以根据一组准则选择最合适的特征;例如,为类提供更高熵或信息增益的特征。
    • 此外,以无监督的方式确定为ML问题提供更多信息的特性是一项具有挑战性的任务。该方法将有助于找到一种更适合于根据当前状态动态选择特征的算法。

    VII. 算法选择

      在这个领域,使用各种ML算法实现不同的解决方案是很常见的。由于ML算法数量众多,在流量分类中寻找最合适的ML算法是非常重要的。特别是,大多数的工作都是基于建立和测试几个模型,直到找到性能最高的模型。在本节中,我们将详细介绍所选的工作,以概述在选择ML算法时所面临的挑战。
      在回顾的过程中,我们会注意到,这些研究的重点是要实现的特定目标:识别应用程序的类型、协议应用程序、异常或隧道连接。读者会注意到,大多数论文的目的是执行分类任务(见第VII-A节)。此外,第VII-B节介绍了使用多分类和集成方法的具体工作。此外,一些论文在第VII-C节中以无监督的方式处理分类问题。最后,第VII-D节将研究混合和高级方法。
      值得注意的是,处理未加密和加密跟踪通常单独描述。这种区别通常是由于未加密通信量的行为可能与加密通信量的行为不同,这是出于使用不同通信协议的动机。然而,在本节中,主要是从ML的角度研究流量分类问题。因此,本文重点介绍了所选择的ML算法,并在第VII-E节中对加密和未加密业务进行了明确的分离。

    A. 经典分类法

      有监督算法常常采用标记的数据进行训练以选择最佳的模型,进而得到衡量分类性能的模型。例如,对于未加密的流量,[95]和[117]中的工作给出了使用统计特征的几个分类器之间的比较。使用分类准确度和计算成本进行了比较。在给定各种数据集的情况下,不同的分类器给出了最佳性能;一般来说,考虑到数据集的某些特性,可以找到比其他分类器表现更好的分类器。ML算法的模型结构和学习过程更适合于某一类问题。
      [123]中的工作面向应用程序类别(视频流、VoIP等)以提高QoS。在不同的数据采集条件下(如丢包和高或低延迟)进行了一些实验。计算了几个性能指标,评估出了性能最好的分类器。这项工作中指出的一个主要原因是类不平衡的存在;此外,互联网通信的中断对分类器产生了噪音。与网络流量中常见的类失衡行为有关。[126]提出比较有偏和无偏数据训练的支持向量机分类器的结果。与其他类相比,有偏数据包含大量只属于一个类的样本;相反,在无偏数据中,所有类都具有相似数量的样本。结果表明,样本量较低的类别提供了10%以上的假阴性,而在有偏情况下,总体准确度没有显著差异。另一方面,[156]提出用代价敏感学习来解决多类不平衡问题。其思想是计算一个类中错误分类流的代价。这个结果产生一个类似混淆矩阵的结构,它包含了每个类的先验加权概率。根据流量的几何平均值,将权重定义为启发式函数。代价函数有助于在训练具有不平衡数据的树型分类器时获得更好的性能。
      文献[109]将统计特征与时间序列特征相结合,建立了流量分类的隐马尔可夫模型。它们说明了所选应用程序的语法结构,如BitTorrent、Skype和Emule等。结果表明,该方法比一些基于统计的方法具有更高的分类精度;然而,模型的构建需要标记数据,此外在网络中出现新应用时需要再训练。
      对于异常或恶意流量检测,广泛应用的有监督学习基于统计的特征,例如[116]识别Web中常见的公开的威胁,以及[157]比较多个ML模型进行入侵检测。Lalitha和Josna[158]实现了无线传感器网络场景,以捕获特定环境条件下的流量。然后,训练高斯混合模型来检测网络中的正常和异常行为。另一方面,一些工作试图在移动/蜂窝网络中部署分类解决方案。例如,[130]在固定时间窗口中收集从移动网络提取的IP流量。通过计算正常和异常流量的统计特征,训练贝叶斯分类器对海量网络用户的流量行为进行分析。在[136]中的工作收集了一个大型大学校园Wi-Fi控制器的网络轨迹。这些控制器将接入点连接到校园骨干网,允许无线设备访问Internet。跟踪来自恶意和良性域之间的网络流量,并在这些跟踪上计算基于统计的特征。训练一个二进制ML分类器进行检测恶意域名。
      网络上加密流量的激增显然呈指数级增长。公开加密的通信量会引起网络中不同参与者的注意,其方式与未加密的情况相同。此外,监督学习是加密流量最流行的方法。从这个意义上讲,[7]中的工作在理论上比较了创建用于加密流量分类的ML模型的几个工作。在比较中,我们注意到比较这些方法的困难,因为每种方法都使用不同的和私有的数据集,其中大多数数据集的标记过程不清楚。
      可以想象,为未加密的通信量部署的所有方法对于加密的情况都应该有效,特别是在FE过程中不侵入包内容的工作(例如基于统计的)。然而,有可能发现新的加密方法或协议在不同应用程序之间的行为也不同。例如,在[159]中的工作表明,两个加密的应用程序可以使用监督学习进行分类。由于加密通信的性质,在不考虑有效负载信息、IP地址和端口号的情况下,选择了SSH和Skype使用统计特性(如IAT和数据包大小)评估多个分类器。在相同的背景下,Alshamari和Zincir Heywood[111]测试了不同的ML方法来对VoIP加密流量进行分类。他们提出了一种只使用统计特征的特征提取方法。其他方法遵循相同的过程,保持统计特征为公共点,并改变分类器或数据集,例如在[115]中使用朴素贝叶斯,在[114]中使用决策树。
      在参考的论文中发现的一个特殊点是,它们通常集中在一定程度上检测一种加密类型。例如,在[129]中的工作提出了一种两阶段的方法:1)使用签名匹配方法识别安全套接字层协议(SSL)或传输层安全协议(TLS)下的数据流,2)计算统计特征来对这些流中的应用程序进行分类。其中一个不足是签名匹配方法是基于标准的协议规范和文档,或者基于人工观察和分析。
      VoIP通信越来越受欢迎,其识别是电信领域中的一个关键因素,无论是对其进行优先级排序还是对其进行失效处理。因此,提出了几种方法,如[114]、[118]、[128]、[160]和[161]中的工作。其中一些作品试图描述和识别Skype,由于其复杂的通信协议,Skype是网络中最复杂的VoIP应用之一。
      对HTTP2或IPsec连接中的应用程序进行分类非常复杂。例如,[162]-[164]中的工作是用加密的流量数据训练ML分类器。启动了几个应用程序,没有采用VPN,捕获基于统计的特性。随后,对多个ML模型进行训练和测试,得到了满意的结果。另一方面,对于隧道连接,回顾定义2中数据流的特征,并不能应用特征提取过程。当实际中嵌入了更多数据流时,隧道连接被识别为仅一个流。这种情况还没有得到大量的研究,然而,一些工作的目的是首先确定一个隧道连接,如在[93]和[110]。基于ML技术的一种有趣的方法旨在检测HTTP2连接中的拒绝服务(DoS)攻击[112]。作者准备了一个正常流量和攻击流量的网络环境。通过一个特征过程获得数据集,在该过程中计算统计特征,然后通过一个特征降维过程来减小特征空间。最后,对多个分类器进行了二值分类检测。

    B. 多分类和集成方法

      多个分类器的组合可以解决经典分类器在流量分类领域中遇到的泛化问题。这些类型的解决方案旨在创建更专业的分类器。例如,[149]提供了几个ML模型的组合,以获得更好的性能。使用相同的数据对多个分类器(两个基于树的、一个基于规则的、两个基于统计的和支持向量机)进行训练;此外,还包括一个DPI工具作为分类器。所有的分类器都对新输入进行评价,并采用最大似然法DempsterShafer法Enhanced DempsterShafer法perfect combination法等组合方法对结果进行整理分析。例如,在最大似然组合中,所有分类器对一个类进行投票,投票最多的类是输出。文献[165]中的工作比较了七种基于决策树的集成算法的性能。研究表明,大多数集成算法在性能上克服了经典的单分类器方法。实验中发现的主要缺陷是模型训练和在线分类的时间开销。[121]中的工作建议计算特征提取过程并将其划分为子集;该过程应用于三个不同的案例研究。这些情况与原始数据集不同,例如有或没有零负载数据包。对每种情况计算统计特征,并训练专用分类器。另一方面,在[143]中的工作通过FS过程定义了多个特征子集;每个特征子集是关于特定的应用协议类定义的。对每个子集训练一个分类器,并通过投票过程给出输出。在这项工作中,我们认为相关的特性可能会因类别而异,以及在类别不平衡资料的存在下,它会如何影响分类器的效能。

    C. 聚类分类与异常检测

      无监督方法通常与异常检测相关,因为它能够检测与正常或标准条件不相似的模式;而且还可以执行分类任务。从这个意义上说,聚类技术在网络流量分类中得到了广泛的应用。本节致力于将无监督学习应用于互联网流量分类的工作。
      利用无监督学习对网络流量进行分类的最常用方法之一是K均值法,它根据样本与聚类中心的相似性建立K个聚类。在[106]中的工作使用K均值和流的几个属性进行网络分类。在[140]中,改进了使用K均值时簇的经典随机初始化。初始簇由流属性之间的方差定义。在构建集群之后,使用概率分配来执行映射集群应用程序。最大似然估计标记样本对K个聚类的隶属度。这种方法的一个主要缺陷是必须预先定义集群K的数量,将解决方案绑定到固定数量的标签上。此外,不考虑噪声样本和新标签。
      对于加密流量,[145]中的工作使用K均值模型来识别HTTPS连接中的加密视频流,获得了良好的平均精度。在不同的比特率下提取数据集,以证明在不同的场景下(IATs的变化)分类器的性能。类似地,[166]中的工作使用K均值来识别P2P流量。在[167]和[168]中给出了无监督技术之间的一些比较,这反过来可以提供在面对未标记的加密流量时使用的方法的见解。最后,由于类的真实标签是未知的,必须为使用聚类技术部署足够的指导。例如,[169]提出了一个框架,该框架允许无监督方法考虑类的真实标签来进行流量分类。

    D. 混合和先进的技术

      在本节中,将介绍一些使用混合半监督新方法进行流量分类的工作。
      首先,有一些方法将有监督无监督学习相结合,采用两阶段过程对网络流量进行分类。第一阶段负责对同一类型的流量类(如视频流、P2P torrent等)进行聚类,第二阶段使用监督模型对应用(Youtube、Neflix等)进行分类。在[137]中的工作提出了一种两阶段的聚类,一个使用统计流特征,另一个使用包有效载荷特征。第三个阶段将两个聚类结果集成起来,创建一个分类器。构建了一个词包(BoWs)模型来表示具有流量统计特征的簇的内容,然后应用潜在语义分析(LSA)来根据其负载内容聚合相似的流量簇。[122]中的工作使用K均值对业务类进行分组,并且通过决策树对应用进行分类,以便为结果提供更大的粒度。类似地,文献[113]提出了一种结合K均值和KNN的混合算法,用于对加密流量进行在线分类。该组合是一个两阶段的过程,其中K-means在实时嵌入式环境中对流量进行集群。通过一种基于缓存的机制来评估性能,该机制结合了基于端口和基于统计的分类元素。
      此外,还使用了更专门的算法来获得更细粒度的性能。作为一个例子,[120]提出了一种**基于在线序列极值学习机(OS-ELM)**的入侵检测分类系统。使用FS技术的集合丢弃不相关的特征。文献[144]提出了一种Wavelet Kernel Extreme Machine Learnin(WK-EML)和遗传算法(GA)的流量分类方法,并结合统计特征对网络流进行分类。遗传算法允许最优地找到使用WK-EML所需的参数,从而训练模型,而不是使用经典的随机设置方法。
      文献[170]提出了一种识别加密应用的新方法,该方法提出了一种无需显式特征提取过程的流量分类问题。作者没有使用经典的统计特性,而是构建了一个可以从数据包内容中学习的深度学习架构。该方法不像DPI技术那样侵入数据包检查关键字,而是通过深度学习架构来学习每个应用程序的新特性。特征提取过程是嵌入的,这些新特征没有实际意义,而是由深层神经网络发现的二元关系数据。最后一个特征使得它适合于加密的流量,并提出了一种替代基于统计特征的方法。但是,尚未对它与经典FE分析和分类方法的界限进行量化。

    E. 讨论

      这一节的摘要是对论文结果的简要描述。此外,还对未来的发展方向作了简要的讨论。

    1. 比较:表2和表3分别总结了未加密和加密流量的分类方法趋势。对它们的优缺点进行了评述,并介绍了应用这些方法进行流量分类的一些工作。
    2. 指导方针和未来趋势:一些方法是基于以下两种选择算法的:i)以往工作的经验,ii)不同数据集的性能比较,或iii)算法之间的定性优缺点。一些具体结论是:
      • 选择最合适的算法与适合数据高度相关。因此,有必要对ML模型最佳工作的条件以及能够接收的数据类型进行初步研究。人们注意到,一个或多个分类器可能无法概括所有类,这可能是由于历史数据中存在类不平衡造成的。
      • 选择ML方法最常用的方法之一是比较它们的分类性能。选择ML方法最常见的方法之一是通过比较它们的分类性能。此比较通常基于精度度量。然而,更准确的方法是与测量分类器性能的统计显著性的参数和非参数检验进行多重或成对比较[45]。
      • 集成分类器给出的更灵活的解决方案可以在类不平衡数据下提供更精确的结果。此外,集成分类器特征的可变性可以加强解决方案。
      • 非监督方法主要用于异常检测。然而,一个明显的挑战是发现可能由新的簇结构表示的新类。
      • 最后,一个有趣的方法可能支持所有的不足(有关不平衡的类数据,新的应用程序发现和推广)是提出元学习过程进行选择和构建的ML解决方案。
    表2 未加密流量的算法选择趋势汇总表和相关论文
    表3 加密流量的算法选择趋势汇总表和相关论文

    VIII. 模型部署

      本节的主要目的是检查ML解决方案在实际网络场景中的实现和重构尝试。本研究仅以文献为参考。
      在论文中,研究了几种FE、FS和ML方法,这些方法依次构成了对流量进行分类的必要步骤。出现的主要问题是如何将ML解决方案部署到实际场景中。在本文回顾的大部分文章中,没有实现ML解决方案,它们通常展示了概念的证明。然而,上面的一些工作给出了一些关于如何部署ML方法的提示。此外,分析了ML解决方案重构的重要性,它在流量分类任务中起着重要的作用。

    A. 在线实现

      互联网最重要的特点之一,就是传输速率通常很高,网络规模很大。这些主要特性使得分类器的实现工作具有挑战性。最常见的方法是在流量监视工具上部署ML解决方案(参见第IV-B节);因此,每次观察到分组流时,都有可能执行分类。例如,[180]使用支持NetFlow的路由器来监视跟踪,跟踪以在线方式转发到ML分类器。NetFlow是一个Cisco协议,旨在从路由器和交换机导出IP流信息。类似地,dbstream[90]将流量分类解决方案集成到其监控平台中。另一种方法是在独立的分类模块中实现ML解决方案;例如,[133]中的工作将ML解决方案实现到基于现场可编程门阵列(FPGA)的嵌入式系统中。FPGA设备使用网络层的信息,如数据包大小和IATs。
      然而,监控模块可以直接包含分类模型,也可以不直接包含分类模型;捕获的信息可以发送到服务器或业务控制器,在服务器或业务控制器中执行对业务进行分类所需的操作[139]、[158]。[110]中的工作提出了一种使用简单代理服务器的实现。有几个主机连接到此服务器,VoIP和其他流量被注入其中。特别地,VoIP检测算法被放置在代理服务器上以便优先处理该流量。[113]中的工作将其ML解决方案实现到服务控制引擎(SCE)中,SCE是一个Cisco平台,用于基于会话的分类和控制所有网络流量。参考文献[127]提出了一种在网络控制器中实现的QoS感知流量分类框架。该控制器采用软件定义网络(SDN)技术,允许执行监控和流量分类。

    B. 重构

      到目前为止研究的大多数ML解决方案中发现的一个主要问题是,当网络中出现新的模式时,必须更新ML模型。由于网络的动态性,基于ML的分类快速过时。因此,必须考虑到自我学习进化再训练策略。一般来说,对于大多数ML技术,更新意味着使用新的历史数据集(通常被标记)重新训练模型。这意味着在网络上出现新的应用程序或行为时,必须不断地对模型进行重新训练。执行此步骤的成本可能很高;尽管如此,如果不考虑这一点,模型的性能将面临风险。
      在这个问题上,[181]提出了一种用于P2P识别的自学习流量分类器(SLTC)。作者提出了一种被动监测组件在特定链路上观察网络的体系结构。分布式监控组件嵌入了分类器(基于有效载荷检测)。如果这个组件能够正确地对流进行分类,那么它将被标记为已知,否则,流将被发送到逻辑服务器。逻辑服务器负责更精细的操作,以便在监视组件出现故障时识别通信量。此外,逻辑服务器转发策略规则,以向监视组件提供新的行为。需要指出的是,在逻辑服务器中执行的操作基于基于统计的方法、有效负载检查和应用程序分析;但是,可以修改此策略,将其解决方案替换为ML解决方案,为基于ML的联机分类器定义重新训练或更新策略。相比之下,文献[107]提出了一种自学习智能分类器(SLIC)用于流量分类。SLIC的学习过程只需要少量的有标签的流,系统就可以进化成一个新的有无标签数据的配置。SLIC使用BoFs结构,使用KNN将一组流分类到同一组中。首先,用标记样本训练KNN模型。训练完成后,系统可以将未标记的样本标记为新的训练样本,并批量保存。当批处理达到定义的阈值时,激活再训练过程,将新的训练样本引入KNN模型。是否引入新的训练样本取决于预测步骤,在预测步骤中,基于样本与其最近的两个类之间的距离的两个条件将允许做出最终决定。尽管该系统在两个数据集的流量分类方面表现出了良好的性能,但在基于距离的方法容易失败的情况下,可能会出现不平衡或高维数据的问题。此外,应该量化这种方法的计算成本。
      在ML领域,半监督学习可能有助于处理网络特征进化标记数据缺乏的问题。半监督工作流程可以在线方式处理ML模型的更新。例如,[141]提出了一种半监督的流量聚类方法。首先,采用基于集的等价约束高斯混合模型(GMM),并遵循基于期望最大化(EM)的聚类算法。半监督过程是利用边缘信息进行处理的,目的是利用高斯模型建立一组给定约束条件的流。边缘信息原则是基于BoFs定义的。最后,利用集合中的流的经典统计特征将应用协议与EM进行聚类。参考文献[135]也使用半监督方法解决了流量分类问题。支持向量机(SVM)采用协同训练方法,在不同的特征集上训练多个分类器。当历史数据集同时使用标记数据和未标记数据时,使用此方法;其中,考虑未标记数据也可以为模型提供更多的知识。[131]中的工作提出了类似的方法。文献[146]分析了基于时间和基于主机的网络入侵检测特征。该方案基于一种半监督方法,该方法通过带有标记的样本训练分类器。利用该分类器得到未标记数据的隶属度向量。利用隶属度向量得到模糊群,并将模糊群进一步合并到训练集中进行分类器的再训练。

    C. 蜂窝、WiFi和卫星网络中的流量分类

      在本节中,我们将概述流量分类在三个重要网络基础设施中的应用/实现。从这个意义上讲,我们对这些领域中使用ML的IP流量分类进行了简要的分析。
      在蜂窝网络中,可以使用端口分组有效载荷[182]、[183]流统计分布在不同级别执行移动IP业务分类。在这个问题上,当从蜂窝网络跟踪中获得统计属性时,应用ML学习。比如,在一个固定的时间窗口从移动网络中提取收集到IP流量。通过计算正常和异常流量的统计特征,训练贝叶斯分类器对海量网络用户的流量行为进行分析。[184]中的工作提出了一种正确收集和标记移动IP网络轨迹的方法,而[24]中提出了在同一领域中定义标签的分类法。[185]中的工作针对ML解决方案的实现提出了一个从移动网络中正确提取IP流的细粒度过程。在[186]和[187]中可以找到关于这一问题的更多信息。例如,在[186]中的工作公开了蜂窝网络的一般架构,以及可以部署被动监视的可能位置,例如在分组交换(PS)核心中。为此,被动监测点的基于IP的数据可以通过ML分类器按照本调查论文揭示的完整过程进行分析。
      以类似的方式,在WiFi网络中,可以提取IP数据,以便应用ML方法进行流量分类。例如,[136]中的工作从一个大型大学校园的Wi-Fi控制器收集了网络轨迹。这些控制器将接入点连接到校园骨干网,允许无线设备访问Internet。跟踪来自恶意和良性域之间的网络流量,并在这些轨迹上计算基于统计的特征。为检测恶意域,训练了一个二进制ML分类器。类似的方法可以在[158]、[187]和[188]中找到。与蜂窝/移动网络和WiFi网络的区别在于用于数据交换的技术可能会影响速度、成本和安全性。
      最后,在卫星网络中,流量管理是一项关键任务,因为它可以提高服务质量。通常,流量数据是从卫星互联网服务提供商(ISP)获取的。这方面的工作旨在对大型网络中的互联网流量进行分类和分析[189]–[192]。其原理与以往的情况相同,采用被动监测的方式进行流量分类。这些监视点可以位于大型ISP网络的路由器[189]、[190]或存在点(PoP)[191]。另一种新兴的方法是在卫星地面网络中使用软件定义网络(SDNs)。在SDNs中,由于在[193]和[194]中公开了流量分类,因此可以很容易地将其部署在SDN的主控制器中。
      总之,本节介绍了基于ML的流量分类在三个相关的Internet网络基础设施中的可以使用本文提出的方法步骤的可能应用。

    D. 讨论

      最后,就本节内容提出了一些重要的问题和意见。

    • 流量分类解决方案需要ML模型的快速响应和监控过程。在这一领域,衡量整个分类过程所需的有效时间至关重要。通常,Internet通信以毫秒为单位来打开和关闭会话以及传输数据。流量识别过程必须迅速,以便采取相应的行为和验证结果。
    • 通常,在执行模型训练时验证ML解决方案,并且基于第II-A5节中提到的验证技术。为了在联机环境中测量ML解决方案的性能,有必要建立一个提供基本真实应用程序的框架。从这个意义上说,可以计算诸如准确性和F-score之类的度量来确保流量分类的可靠性。
    • 在网络领域使用和实现ML时,一个重要的挑战是解决方案的可扩展性,这是由于Internet网络的规模。
    • 最后,必须部署允许考虑网络动态性的ML解决方案。允许上下文适应(行为或结构适应)的自主体系结构[195]-[197]的开发可以通过使用ML模型来应用。

    IX. 分析

      这项研究主要指出了用ML技术实现知识抽取的一些重要步骤和挑战。所提出的过程包括数据收集、特征工程(FE、FR和FS)、算法选择和模型部署。问题是:哪条路是最好的,或者如何开始寻找相关的参考资料?选择了49篇论文,因为它们在附录A中展示了使用各种流量分类策略的完整过程,展示了前面章节中提到的挑战。图2总结了本次参考的结果。绘制路径是为了了解通常采取的程序趋势。关于图5最重要的注释如下。

    图5 采用ML进行流量分类的论文的趋势

    A. 数据收集部分

      图5中的这一块与第IV节中观察到的特征相关。首先,论文分为两部分:使用真实场景和仿真场景进行流量观测的论文。不考虑流量生成,因为这不是用ML进行流量分类的常用方法。值得注意的是,这两种情况下的论文数量是相似的。接下来,研究数据是否公开。模式与前一个案例相同;但是,大多数有实际流量的论文都使用了公开的数据集,有些在附录A中列出。
      关于加密,我们发现大多数方法在提出到加密案例的映射之前都是从非加密研究开始的。本文的综述主要是对60%的论文进行了非加密数据的整理,其余为加密研究。接着,真实标签通常由DPI工具定义,在DPI工具中很少有论文定义了一个严格的流程来标记流。该模块的一般结论是,趋势是对已知的公共数据使用真实的流量测量,但也要设置网络架构来模拟流量。大多数流量是未加密的,并且通常没有流的真实标签。

    B. 特征工程部分

      本区块由第V和第VI部分构成。考虑的第一个方面是执行的FE的类型,而第二个方面报告是否执行了FS过程。从图5可以注意到,最常见的趋势是使用基于统计的(STATsB)特征的FE过程,之所以预期这种情况,是由于这些特性可以在加密和非加密流量分析之间互换,而且它们不会侵入数据包内容,而且它们的计算量很少。

    C. 算法选择

      在算法选择上,经典分类(CClass)占主导地位,这是意料之中的,因为本研究的重点是流量分类。然而,一些方法在多分类集成方法(MClass&E)方向做了一些努力。最后一个原因是类不平衡泛化问题。此外,还可以发现使用聚类(Clust)和混合改进(H&A)技术进行流量分类的一些努力。在目标实现方面,应用分类(ApPC)和协议(AppN)是常用的搜索方法,而异常检测(AD)也是一个研究热点。其他目标包括检测用户的行为、查找社区和创建用户配置文件等。

    D. 模型部署

      最后,在模型部署块中,关注的是实现该解决方案的论文数量。此外,了解所选论文提出的重构策略也很重要。最后一个很重要,因为网络的持续动态性会导致一些ML方法出现问题。
      从图5可以注意到,超过65%没有指定(NNS)解决方案的实现。以同样的方式,大多数解决方案都不提供重构方法(ONS);尽管有些工作提出了计划的重新训练过程来升级其解决方案。自学习或进化(SLE)在参考的论文中没有发现;然而,这对于一般的ML技术来说是一个具有挑战性的课题。

    E. 特征趋势

      最后,在总结分析的基础上,用红色标出了参考论文中较少采用的方法。从图5中可以注意到,所研究的大多数工作没有使用加密数据,并且标记流量的真实值的过程。在特征工程的过程中,很少有人应用FS来求解。就所使用的ML方法而言,研究得较少的是无监督技术、多分类和集成方法。最后,在模型部署阶段,很少有工作在实际场景中实现该解决方案。此外,重构过程不处理进化或自主重构。鉴于这些情况和前一节的讨论,总结出以下未来趋势。

    • 面向创建ML解决方案的模拟流量体系结构的提出,可以生成加密和未加密的流量,以及可靠的流标记过程
    • 考虑到基于统计的方法的效率,可以探索改进其计算以提供稳健的分类解决方案。在FS的情况下,有效的特征动态选择可以提供更高的分类性能。
    • 在算法选择模块中,未来的发展趋势是采用多分类集成的方法,考虑到Internet数据的特点,这些方法是非常有前途的。
    • 对于ML解决方案,需要更多的实验测试来衡量响应时间和复杂性方面的性能。在这种情况下,有必要提出分布式的、可扩展的ML解决方案,以处理Internet网络的规模。
    • 在模型重构方面,另一种解决方案是采用增量学习的概念,以应对互联网网络的动态性。

    X. 总结

      本文介绍了利用ML技术实现流量分类的一般过程。程序的每个步骤都有一些相关的工作,遵循不同的路径来实现结果。这样,参考的论文被组织起来,每个步骤都定义了每一篇论文所属的类别。这些类别以图形的形式显示,说明了该领域最常见的趋势。每一节都进行了讨论,以确定其最常见的趋势和挑战。
      这项研究试图揭示流量分类领域的几个挑战。例如,使用加密通信量是一项挑战,在没有数据包内容的情况下,特征类型应该导致正确的分类。当前公开标记的数据很少,这使得比较ML解决方案变得很困难。接着,对于ML中的知识提取,分类任务是最流行的。然而,多分类集成方法的优点使得它们在处理流量分类中的类不平衡泛化等问题时具有很强的吸引力。聚类方法有助于发现网络流量中新的或异常的行为,因此,该领域的研究值得推广。最后,这类解决方案的实现仍然是一项需要完成的重要任务,由于影响因素不同,大多与解决方案的性能和适应性有关。
      对于文献中的大多数调查,本综述的不同之处在于,它展示了网络流量分类所需步骤的全貌。此外,还分析了该进程各个阶段的挑战,并概述了未来的方向。总而言之,本书要强调的一些最重要的方向是:

    • 可靠的标签标记,此过程将对ML模型的构建和验证起关键作用。
    • 动态特征选择,这将尝试创建使用给定上下文和目标的最合适特征的自适应模型。
    • 整合元学习过程处理网络数据的不平衡与动态性。
    • ML解决方案的在线重构策略。

    附录A

    本节在表IV中列出了流量分析中最常见的公共可用数据集。

    表4 论文中最常见的公共数据集

    附录B

    表V描述了表征过程的趋势。表VI描述了特征工程过程的趋势。表VII描述了算法选择过程的趋势。表VIII描述了模型建造过程的趋势。

    表5 数据收集阶段选定论文的趋势
    表6 特征工程过程趋势
    表7 算法选择过程趋势
    表8 模型构建趋势

    写在最后,安利一下github地址,收集了一些流量分类领域的论文,欢迎一起交流
    https://github.com/WithHades/network_traffic_classification_paper

    展开全文
  • 从细分到多层下钻数据分析 细分是网站分析的基本方法,也是数据分析的基本思路。细分分析的过程是对整体数据进行层层拆分,然后找到影响整体的局部因素。 步骤1:全站流量按来源模块可细分为广告、SEM、SEO和直接...

    从细分到多层下钻数据分析

    细分是网站分析的基本方法,也是数据分析的基本思路。细分分析的过程是对整体数据进行层层拆分,然后找到影响整体的局部因素。
    在这里插入图片描述
    步骤1:全站流量按来源模块可细分为广告、SEM、SEO和直接输入(假设只有4个模块)。细分发现广告是网站流量的主要来源(昨日访问量占比82%),访问量增长2194,比例为67%,说明了广告是网站访问量增长的主要驱动因素。

    步骤2:对广告模块做进一步细分,发现其中主要增长模块为Sina,该模块昨日访问量占比79%,环比前日增长1990,比例为85%。如果该模块有不同的位置,还可以做进一步细分。

    至此已经找到了昨日网站访问量增长的主要原因是Sina来源流量增长,此时可直接找到Sina模块的业务负责人进行沟通进一步原因。

    案例背景

    日报、周报、月报等常规性报告是各个公司的基础数据支持形式。在日常报告中,经常会出现很多异常波动的指标,需要分析师找到异常波动的影响因素。但在寻找主要因素时由于需要下探的层级较多,实施起来会非常费时费力。以大型公司的广告投放渠道为例,可能包括以下层级:

    • 一级渠道包括SEM、AD、CPS、Social、导航等;
    • 二级渠道以SEM为基准包括百度、谷歌、360等;
    • 三级渠道以百度为基准包括关键字、网盟等;
    • 四级渠道以关键字为基准包括不同的广告计划;
    • 五级渠道以广告计划为基准可以细分到不同的广告组;
    • 六级渠道以广告组为基础可以细分到不同的关键字。

    本案例介绍了一个自动化细分找到主要影响因素的方法——基于自动节点树的数据异常原因下探分析方法,该方法的实施思路是:找到每个层级上影响最大的因素并依次做下一因素的细分,直至最后一个因素。具体过程如下:

    1. 统计全站在一定周期内、特定指标下的数据环比变化量和环比变化率。
    2. 指定要分析日期并获得该日期及其前1天的数据。
    3. 以全站数据为基准,下探第一层级维度并对指定日期和其前1天的数据做分类汇总。
    4. 计算第一层级维度下分类汇总后的两天数据的差值并得到环比变化量和环比变化率。
    5. 对第一层级维度下的变化量排序,并分别获得环比变化量最大和最小情况下的维度名称、变化量和变化率。
    6. 计算下一层级变化量与上一层级变化量的比值,变化量最大值和最小值的比例将被定义为正向贡献率和负向贡献率。
    7. 循环上述步骤,直至所有层级都计算完成。
    8. 使用树形图展示所有层级下的变化量最大和最小的维度信息包括维度名称、环比变化量、环比变化率、贡献率等信息。

    案例数据

    以下是本数据集的6个维度的详细说明:

    • date:日期,格式是YYYY/MM/DD。
    • source:流量来源一级分类,来源于业务部门的定义。
    • site:流量来源二级分类,来源于业务部门的定义。
    • channel:流量来源三级分类,来源于业务部门的定义。
    • media:流量来源四级分类,来源于业务部门的定义。
    • visit:访问量。

    python代码

    import datetime
    import pandas as pd
    import numpy as np
    from graphviz import Digraph  # 画图用库
    # 载入数据
    df = pd.read_csv('https://raw.githubusercontent.com/ffzs/dataset/master/advertising_data.csv')
    # 显示部分数据
    df.head()
    

    在这里插入图片描述

    # 数据类型
    df.dtypes
    
    ‘‘’
    date       object
    source     object
    site       object
    channel    object
    media      object
    visit      object
    dtype: object
    ‘’’
    
    # 查看缺失值
    df.isna().sum()
    
    ‘’‘
    date       0
    source     0
    site       0
    channel    0
    media      0
    visit      0
    dtype: int64
    ’‘’
    

    根据上述的数据审车校验结果,需要处理的内容包括:

    • 将date列转换为日期型,便于后期基于数据做筛选以及日期计算。
    • 将visit列中的“-”进行转换。由于从网站分析工具导出时,“-”代表的是没有数据,因此这里转换为0。
    # date列数据转化为日期型数据
    df['date'] = df.date.astype('datetime64[ns]')
    # 将visit列中的“-”转换为0
    df['visit'] = df.visit.replace('-', 0).astype('int64')
    

    这里先将每天的数据与其前1天的数据做环比变化统计:

    # 获得每天visit的汇总
    day_summary = df.iloc[:,-1].groupby(df.date).sum()
    # 通过差分求平移一天后的变化
    day_change_value = day_summary.diff(1).rename('change')
    # 求变化率
    day_change_rate = (day_change_value / day_summary).round(3).rename('change_rate')
    # 合并
    df_visit = pd.concat((day_summary, day_change_value, day_change_rate), axis=1) 
    # 展示
    df_visit.head()
    

    在这里插入图片描述

    # 趋势观察
    df_visit.visit.plot()
    

    在这里插入图片描述

    指定某一天进行分析:

    # 指定要分析的日期
    the_day = pd.datetime(2017, 6, 7)
    # 获取前一天日期
    previous_day = the_day - datetime.timedelta(1) 
    # 获取指定日期数据
    the_day_tmp = df[df.date == the_day].rename(columns={'visit': the_day})
    # 获取前一天数据
    previous_day_tmp = df[df.date == previous_day].rename(columns={'visit': previous_day})
    # 指定需要分析4个维度
    dimension_list = df.columns.tolist()[1:-1]
    # 每层分裂节点名称列表
    split_node_list = ['全站']
    # 每层分裂节点对应的总变化量
    change_list = []
    # 每层最大增长贡献最大的1个维度
    increase_node_list = []
    # 每层最小增长贡献最大的一个维度
    decrease_node_list = []
    
    # 遍历每一个维度
    for dimension in dimension_list:
        # 获取指定日期的特定维度和访问量
        the_day_merge = the_day_tmp[[dimension, the_day]]
        # 获取前一天的特定维度和访问量
        previous_day_merge = previous_day_tmp[[dimension, previous_day]]
    
        # 对指定日期的特定维度汇总 
        the_day_groupby = the_day_merge.groupby(dimension).sum()
        # 对前一天的维度汇总
        previous_day_groupby = previous_day_merge.groupby(dimension).sum()
    
        # 讲两天的数据合并
        merge_data = the_day_groupby.join(previous_day_groupby, how='outer')
    
        # 将缺失值替换为0
        merge_data = merge_data.fillna(0)
    
        # 计算环比变化量
        merge_data['change'] = merge_data[the_day] - merge_data[previous_day]
    
        # 计算环比变化率
        merge_data['change_rate']  =  merge_data['change']  /  merge_data[previous_day]
    
        # 获取分裂节点的总变化值
        total_change = merge_data.change.sum()
    
        # 将变化值加入列表
        change_list.append(total_change)
    
        # 安环比变化量正向排序
        merge_data.sort_values('change', inplace=True)
    
        # 获得增长变化量最大节点名称
        max_increase_node = merge_data.index[-1]
    
        # 获得最大值节点变化量以及变化比例
        max_value, max_rate = merge_data.loc[max_increase_node][2:4] 
    
        # 将最大值信息追加到列表
        increase_node_list.append([max_increase_node,  int(max_value),  max_rate])   
        # 获得增长变化量最小值节点名称
        min_increase_node = merge_data.index[0]  
        # 获得最小值节点变化量以及变化比例
        min_value, min_rate = merge_data.loc[min_increase_node][2:4]  
        # 将最小值信息追加到列表
        decrease_node_list.append([min_increase_node,  int(min_value),  min_rate])
    
        # 判断增长方向
        if total_change >= 0:
            # 将分裂节点定义为增长最大值节点
            split_node_list.append(max_increase_node)
            # 通过分裂节点的个数判断所处分裂层级
            rules_len = len(split_node_list)
            # 按照相应的维度过滤出指定日期符合最大节点条件的数据
            the_day_tmp = the_day_tmp[the_day_tmp[dimension_list[rules_len-2]] == max_increase_node]
            # 按照相应的维度过滤出前一天符合最大节点条件的数据
            previous_day_tmp = previous_day_tmp[previous_day_tmp[dimension_list[rules_len-2]] == max_increase_node]    
        else:
            split_node_list.append(min_increase_node)
            # 通过分裂节点的个数判断所处分裂层级
            rules_len = len(split_node_list)
            # 按照相应的维度过滤出指定日期符合最大节点条件的数据
            the_day_tmp = the_day_tmp[the_day_tmp[dimension_list[rules_len-2]] == min_increase_node]
            # 按照相应的维度过滤出前一天符合最大节点条件的数据
            previous_day_tmp = previous_day_tmp[previous_day_tmp[dimension_list[rules_len-2]] == min_increase_node]
    

    使用graphviz绘制关系图:

    #### 作图 ####
    node_style = {'fontname': "SimSun", 'shape': 'box'}  # 定义node节点样式
    edge_style = {'fontname': "SimHei", 'fontsize': '11'}  # 定义edge节点样式
    top_node_style = '<<table><tr><td bgcolor="black"><font color="white">{0}</font></td></tr><tr><td>环比变化量:{1:d}</td></tr><tr><td>环比变化率:{2:.0%}</td></tr></table>>'  # 定义顶部node节点标签样式
    left_node_style = '<<table><tr><td bgcolor="chartreuse"><font color="black">{0}</font></td></tr><tr><td>环比变化量:{1}</td></tr><tr><td>环比变化率:{2:.0%}</td></tr></table>>'  # 定义左侧node节点标签样式
    right_node_style = '<<table><tr><td bgcolor="lightblue"><font color="black">{0}</font></td></tr><tr><td>环比变化量:{1}</td></tr><tr><td>环比变化率:{2:.0%}</td></tr></table>>'  # 定义右侧node节点标签样式
    dot = Digraph(format='png', node_attr=node_style, edge_attr=edge_style)  # 创建有向图
    
    
    for i in range(4):  # 循环读取每一层
        node_name = split_node_list[i]  # 获得分裂节点名称
        node_left, max_value, max_rate = increase_node_list[i]  # 获得增长最大值名称、变化量和变化率
        node_right, min_value, min_rate = decrease_node_list[i]  # 获得增长最小值名称、变化量和变化率
        node_change = change_list[i]  # 获得分裂节点的总变化量-非分裂节点变化量
        node_label_left = left_node_style.format(node_left, max_value, max_rate)  # 左侧节点显示的信息
        node_label_right = right_node_style.format(node_right, min_value, min_rate)  # 右侧节点显示的信息
        if i == 0:  # 如果是顶部节点,则单独增加顶部节点信息
            day_data = df_visit[df_visit.index == the_day]  # 获得顶部节点的数据
            former_data = day_data.ix[0, 1]  # 获得全站总变化量
            node_lable = top_node_style.format(node_name, int(former_data), day_data.ix[0, 2])  # 分别获取顶部节点名称、变化量和变化率
            dot.node(node_name, label=node_lable)  # 增加顶部节点
        contribution_rate_1 = float(max_value) / former_data  # 获得左侧变化量贡献率
        contribution_rate_2 = float(min_value) / former_data  # 获得右侧变化量贡献率
        if node_change >= 0:  # 如果为增长,则左侧为正向
            edge_lablel_left = '正向贡献率:{0:.0%}'.format(contribution_rate_1)  # 左侧边的标签信息
            edge_lablel_right = '反向贡献率:{0:.0%}'.format(contribution_rate_2)  # 右侧边的标签信息
            former_data = max_value  # 获得上一层级变化量最大值
        else:  # 如果为下降,则右侧为正向
            edge_lablel_left = '反向贡献率:{0:.0%}'.format(contribution_rate_1)  # 左侧边的标签信息
            edge_lablel_right = '正向贡献率:{0:.0%}'.format(contribution_rate_2)  # 右侧边的标签信息
            former_data = min_value  # 获得上一层级变化量最大值
        dot.node(node_left, label=node_label_left)  # 增加左侧节点
        dot.node(node_right, label=node_label_right)  # 增加右侧节点
        dot.edge(node_name, node_left, label=edge_lablel_left, color='chartreuse')  # 增加左侧边
        dot.edge(node_name, node_right, label=edge_lablel_right, color='lightblue')  # 增加右侧边
    
    dot.view('change summary')  # 展示图形结果
    

    在这里插入图片描述

    结论

    全站访问量下降18455,下降比例达到23%,主要的source源是CRM,其下降量为17591, “贡献”了95%的主要因素;而导致CRM下降的主要site源是准会员,其下降量为17575, “贡献了”几乎100%的下降因素;再进一步细分,在影响准会员的channel中,电视源的下降量达到19090, “贡献”了109%的比例,而导致电视流量下降的主要media源是APP,其贡献了19024的下降流量,比例几乎是100%。与此同时,某些来源渠道的流量与全站的下降趋势相反,呈现良好的增长趋势,这在全站的下降主要因子中表现良好,包括source源中的公众号流量环比增长2444,增长率达到171%; s准会员中的商城部分的流量增长1378,增长率为29%。

    在上述结论中,针对每个节点(含分裂节点和非分裂节点)我们都有两个方向的参照:

    • 横向因子,即查询哪些特征对于上一层级的变化有主要的正向和负向贡献,这是贡献率的来源;
    • 纵向因子,即查询每个节点本身相对前1天的环比变化率,这是其本身随着时间的变化特征,能有效了解其自身波动水平。

    补充

    案例使用的graphviz是一个非常强大的用于展示复杂关系库。该库还有很多我们可以应用到的复杂场景,例如:

    • 基于网络转发的传播关系图;
    • 个人关系联络图;
    • 基于有时间序列的流程图;
    • 网络拓扑关系图;
    • 信息流和事件流图。

    案例中分裂寻找的是变化量(也意味着变化率)最大的节点,如果有课题需要也可以将变化率或贡献度指定出来,在计算的时候按照指定的贡献率提取出一系列(而不是一个)因子。或者,可以依据业务手工分析的需求,沿着指定维度做层层下探,其实只是在维度循环时从预设维度变为根据系统选择传值而已。整个的实现思路,已经跟决策树的实现思想比较接近了,如果读者兴趣可以参照决策树的实现和优化思路。

    参考:

    《python数据分析与数据化运营》 宋天龙

    展开全文
  • 参考了部分互联网内容,数据范围主要包括以下几个方面: ●完整内容数据(PCAP) 进行数据包分析时,常用到以下三种基本技术: 包过滤:通过各个协议的元数据或者载荷中的字段或者字段的值来分离数据包。 模式...
  • 常用流量解析方法主要有四种: 1.端口号解析 2.DPI技术 3.统计特征/时序特征 + 机器学习 4.时空特征 + 深度学习 5.其他特征 +深度学习(待拓展) 第一种端口号解析的方法,是最早应用于流量解析的方法,但由于部分...
  • 流量分析:如何分析数据的波动?

    千次阅读 2020-08-02 16:00:08
    建立产品指标体系和报表之后,分析师和业务方最重要的事情就是每天看各种数据,而这个看数据的过程就是流量分析。这里的流量指广义的流量,并不一定单指日活。它是指所有的流量,比如用户从哪儿来,经过什么过程,...
  • Wireshark学习

    千次阅读 多人点赞 2020-01-31 14:00:32
    若运行于负载共享模式(一个网络请求,由两个网卡一起完成,但两个网卡的流量却完全不等),则必须采用以下三种流量镜像之一: 1)镜像抓取LAG接口的流量。即镜像抓取两个或两个以上的物理端口,并捆绑而成的虚拟机...
  • 最近被分配了几篇关于机器学习进行流量分类的文章进行阅读,感觉都比较麻瓜。这里简单分享一下。 给大家的建议是尽量读顶会的论文,以达到见贤思齐焉的目的 Comparison of machine-learning algorithms for ...
  • 关于CSDN"原力计划"活动说明

    万次阅读 多人点赞 2019-10-23 14:54:41
    在这个内容为王的互联网时代,如何让优质的内容展现到观看者的面前,让别人喜欢...以社区的“高覆盖、高流量”的特性,带来“水、养分、土壤”的供给,点燃内容原创者的无尽可能。 CSDN“原力计划”英雄榜 10月24...
  • 简介Ettercap是一个综合性的中间人攻击工具,使用它可以进行ARP欺骗、拦截器、DNS欺骗等操作,本文将介绍使用ettercap的文本模式进行流量监听和代码注入的方式和注意点。
  • 消息中间件MQ与RabbitMQ面试题(2020最新版)

    万次阅读 多人点赞 2020-03-01 11:11:21
    缺点有以下几个: 系统可用性降低 本来系统运行好好的,现在你非要加入个消息队列进去,那消息队列挂了,你的系统不是呵呵了。因此,系统可用性会降低; 系统复杂度提高 加入了消息队列,要多考虑很多方面的问题,...
  • 流量数据化运营 流量值从数字设备上访问企业的网站、app应用、智能设备的用户行为,它主要包括用户从哪里来,在企业相关载体上有哪些行为、产生了哪些转化等。 媒体信息时代,用户行为移动化、需求个性化的复杂背景...
  • 【数据库学习】数据库总结

    万次阅读 多人点赞 2018-07-26 13:26:41
    1,数据库 1)概念 ...数据库是长期存储在...(数据的最小存取单位是数据项) ②数据库系统的特点 数据结构化 数据的共享性,冗余度,易扩充 数据独立性高 逻辑数据独立性(logical data...
  • 根据机架定义,同一机架内的DataNode之间的网络流量最小化。例如,如果我们将复制因子视为3,则将两个副本放在一个机架上,而将第三个副本放在单独的机架中。 20.“HDFS Block”和“Input Split”有什么区别? ...
  • DDOS入门介绍(一):DDOS简介

    万次阅读 多人点赞 2017-05-27 15:58:31
    - 源地址为假 制造高流量无用数据,造成网络拥塞,使受害主机无法正常和外界通讯; - 利用受害主机提供的传输协议上的缺陷反复高速的发出特定的服务请求,使主机无法处理所有正常请求; - 严重时会造成系统死机...
  • 基于SSM的校园二手交易平台的设计与实现

    万次阅读 多人点赞 2018-05-06 14:24:44
    首页请求数据之后,根据热门度返回多个数据,将数据存储到list集合中,并且将它转换为JSON格式数据,返回到页面,页面解析数据并且显示。 商场则负责显示所有的商品数据,实现侧边栏点击指定的类别之后,显示对应...
  • SQL岗位30个面试题,SQL面试问题及答案

    万次阅读 多人点赞 2019-06-19 17:42:34
    属于美国国家标准协会(ANSI)的一种标准,可用于执行Select(选择)、Update(更新)、Delete(删除)和Insert(插入)等数据任务。 数据库中的表和字段是什么? 表是在具有列和行的模型中设计的数据集合。在表...
  • 网络流量入侵检测数据集CIC-IDS-2017数据预处理 CIC-IDS-2017 数据集包含良性和最新的常见攻击,类似真实世界数据(PCAPs)。 它的数据采集截至2017年7月7日(星期五)下午5时,共计5天。星期一是正常的一天,只包括正常...
  • 数据竞赛思路分享:机场客流量的时空分布预测

    万次阅读 多人点赞 2016-11-29 17:47:29
    一路走来,对数据各种把玩,分析了各种可能的情况,尽可能得挖掘数据中潜在的信息来构建更为准确的模型。 本文无法涵盖所有的分析历程,但是会涉及解决问题的主要思路以及部分代码,详细的代码见Github页面 ...
  • SDN

    千次阅读 多人点赞 2017-06-29 11:35:37
    这些措施,策略,产品的出现是必然的:网络如今以一种极快的速度在发展,每时每刻都有大量的数据需要进行处理,倘若没有合理的流量控制,网络拥塞会使得整个网络的效率非常之低。 由以上这些产品所构成的...
  •  zabbix没有提供监控流量数据的api(至少我没有找到),历史表有一部分数据,但是不全,所以只能从趋势数据表里获取。流量数据是隔段时间保存一次的,每次保存的是截止该时间点的总流量,所以要获取某时间点的瞬时...
  • JAVA上百实例源码以及开源项目

    千次下载 热门讨论 2016-01-03 17:37:40
     Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...
  • 南北流量(NORTH-SOUTH traffic)和东西流量(EAST-WEST traffic)是数据中心环境中的网络流量模式。下面我们通过一个例子来理解这两个术语。 假设我们尝试通过浏览器访问某些Web应用。Web应用部署在位于某个数据...
  • 5G NGC — UPF 用户面功能

    万次阅读 多人点赞 2019-10-31 11:21:45
    目录 文章目录目录UPF参考文档 UPF UPF(User Plane Function,用户面功能),是 3GPP 定义的 5G Core(核心网)...使 PGW-U 在更接近网络边缘的地方执行数据包处理以及流量聚合,即提高带宽效率,同时减少网络阻塞...
  • 2020中国高校计算机大赛·华为云大数据挑战赛热身赛题_交通流量预测赛题分析(持续更新!!!) 写在前面:大家好!我是在读本科生数据新手JerryX,各位数据挖掘大佬有什么问题和建议多多指教!!也欢迎大家多多点赞...
  • 电商日志流量分析

    千次阅读 2018-08-24 00:30:55
    1. 网站点击流数据分析项目业务背景 1.1 什么是点击流数据 ...通过分析这些数据,可以获知许多对网站运营至关重要的信息。采集的数据越全面,分析就能越精准。  日志的生成渠道: 1)是网...
  • 京东2019春招京东数据分析试卷(来源:牛客网) 题型 客观题:单选27道,不定项选择3道 完成时间 120分钟 1. 在软件开发过程中,我们可以采用不同的过程模型,下列有关增量模型描述正确的() A. 已使用一种线性...
  • 此时,我们需要一个利器,来最大程度发挥这份流量巨矿的价值,为酒旅的业务增长提供源源不断的动力。这个利器,我们叫它“流量罗盘”。 我们首先要思考几个问题: 流量都来自哪些入口; 本地场景、异地场景的流量...
  • 因为服务器和应用客户端之间存在着流量的瓶颈,所以读取大容量数据时,使用缓存来直接为客户端服务,可以减少客户端与服务器端的数据交互,从而大大提高程序的性能,以下为工作中经常用到的缓存操作公用类库整理,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 209,003
精华内容 83,601
关键字:

以下属于流量类数据的是