一种面向可编程数据平面的用户活动分类方法及应用与流程



1.本发明属于可编程数据平面、机器学习以及计算机网络技术领域,涉及一种面向可编程数据平面的用户活动分类方法及应用。


背景技术:



2.网络终端的日益普及和新应用程序的不断出现,不仅带来了网络流量的指数级增长,同时也增加了用户活动分析的复杂性。根据中国互联网络信息中心(cnnic)2022年发布的第49次《中国互联网络发展状况统计报告》数据显示,截至2021年12月,我国网民规模达10.32亿,较2020年12月增长4296万,互联网普及率达73.0%。人均每周上网时长达到28.5个小时,较2020年12月提升2.3个小时。网民对网终端设备使用也更加多元化,手机、台式电脑、笔记本电脑、电视和平板电脑的使用也越来越普及。网络中传输数据流量的增大和应用程序不断丰富,造成网络资源使用紧张,存在资源分配不均衡,转发设备利用率低等问题。
3.用户活动分类能够按照应用类型对在线网络流量分类,为上述问题的提供了有力的解决方案。通过对用户活动分类,互联网服务提供商isps可获知当前占据主要带宽的流量类型,调整网络的架构部署以支持不同的网络运行目标,为用户提供更高的服务质量qos;分析网络当前流量态势,可以为进一步的网络优化提供策略支持;企业或校园网络管理者可以在流量高峰时期管控网络中p2p、voip、pps等非关键流量,以保证网络畅通;发现可疑网络流量,检测是否存在dos、ddos、port scan等入侵流量,提高网络安全性能。用户活动分类作为网络流量分类中的一部分,是网络安全管理中的一项重要工作,对网络管理、应用qos策略、流量攻击检测和动态流量控制等方面都有着重要的意义。
4.传统的网络流量分类方法使用传输层协议udp或tcp端口号进行分类,该方法易于实现,而且算法时间复杂度低。但随着网络协议的多元化以及端口跳变和端口伪装技术的出现,导致基于端口识别的流量分类方法的准确度越来越低。madhukar等人通过实验证实有接近70%的网络流量无法使用这类方法进行分类。后来,深度包检测(deep packet inspection,dpi)技术逐渐受到关注。dpi技术主要是通过分析网络流中数据包的有效载荷来实现流量分类。由于dpi技术不使用数据包的端口,因此不受端口跳变和伪装等技术的影响。但是,由于当前数据加密和隐私安全问题,使得利用该技术对网络流量进行分类也出现困难。
5.近年来,随着机器学习在分类任务方面的性能表现日益突出,越来越来的工作开始利用机器学习来解决流量分类问题。将机器学习应用到流量分类领域,通过从实际网络中获取用户流量样本并提取网络流特征,利用数据集和机器学习算法得到流量分类器,即可用训练好的分类器对网络流量进行分类。moore等人设计的248个流量特征,包括四层协议端口号、数据包大小、数据包之间的时间间隔等,结合不同的机器学习算法,实现流量分类。由于moore数据集中的大部分特征需要整条网络流信息,即在一条流结束之后才可以进行分类,这不适用于实时或一些分时场景下的流量分类。v
í
ctor labayen等人提出了一个三层模型来对网络流量中的用户活动进行分类,平均分类精度为97.37%。模型的前两层使
用了无监督学习算法,例如k-means、高斯混合等算法,而最后一层使用有监督学习算法,例如svm、随机森林等算法。将机器学习技术与控制平面进行结合,可以强化对流量实施统一控制和管理的能力。在控制平面中部署机器学习算法,利用控制器的全局视图和硬件计算能力,可以更好地实现网络流量的精细化管理和精准控制,但是该方法需要通过数据平面采集并上传大量的网络流量样本,极大占用或阻塞控制平面与数据平面之间的通信管道,引起传输延迟和处理延迟。因此,bruno等人提出了将决策树算法部署到数据平面中进行入侵检测,分别对数据包和数据流构建分类模型。在针对数据包的分类场景下的检测速度很快,几乎不对数据包的转发产生影响,但平均分类精度仅为86%;而在数据流分类场景下,虽然提高了分类的精度,但需要获取整条网络流的信息,不满足实时的分类需求。另外该方法没有考虑在数据流分类场景下如何减少对交换机内存空间的占用。


技术实现要素:



6.为了解决现有技术存在的不足,本发明的目的是提供一种面向可编程数据平面的用户活动分类方法及应用。
7.本发明探索将机器学习技术部署在可编程数据平面中实现对用户活动分类方面的应用,设计了一种可编程数据平面中机器学习辅助的用户活动分类方法。该方法能够实现在数据平面完成对用户活动分类,通过p4语言来实现合适的机器学习模型并部署到可编程交换机中,交换机对流经的数据包进行解析,提取网络流的特征数据并保存到sketch和哈希表构成的存储结构之中,然后使用机器学习分类器对一段时间间隔内的网络流特征进行分析,判断该段时间间隔内的用户活动,上传分类结果。
8.本发明提出了一个面向可编程数据平面的用户活动分类方法,本发明方法在包含学习平面、控制平面与数据平面的软件定义网络上实现。具体地,
9.所述学习平面,负责用于从外部数据集、带内网络遥测或主动测量中获取用户活动,提取并记录这些流量数据中一段时间序列内的特征数据,包括以太网类型、ip协议号、源ip地址与目的ip地址、源端口号与目的端口号、网络流的持续时间、数据包的大小范围、数据包的数量等。之后基于这些特征数据学习并构建一个机器学习的流量分类模型下发给控制平面;
10.所述控制平面,连接学习平面和数据平面,负责将预先训练好的流量分类模型转换为基于p4语言实现的应用程序,并生成一组对应的匹配-动作规则。该组匹配-动作规则表示对匹配的数据包执行预定的动作,例如检查、丢弃、重传等。另外,在对生成的p4应用程序进行编译后将其部署到数据平面的可编程交换机中,并下发匹配-动作规则到控制平面的交换机,接收来自数据平面交换机的分类结果;
11.所述数据平面为可编程数据平面,由可编程交换机组成,在完成p4程序的部署之后,交换机解析经过的每一个数据包的头部域,提取以太网类型、ip协议号、源ip地址与目的ip地址、源端口号与目的端口号、数据包时间、数据包大小等。通过sketch和哈希表所构成的存储结构来记录一段时间内的网络流量特征数据,其中,哈希表用于保存一段时间内网络流量特征,sketch用于辅助选择需要被存储的网络流,机器学习分类器基于这些记录的网络流量特征数据实现对用户活动分类,上传分类结果并执行相应的转发或拦截策略。
12.本发明结合网络用户活动的特征,将流量划分为时间窗口进行分类;这些时间窗
口中的每个都可以由多条网络流组成,其中一条网络流被定义为具有相同源ip地址、目的ip地址、源端口、目的端口和传输层协议的所有数据包的集合。
13.利用机器学习推断用户在网络中的活动,在所述学习平面中利用scikit-learn机器学习工具包来构建两层的流量分类模型:
14.流级层:基于无监督的k-means算法,每条流与k个可能的聚类中的一个相关联,表明该段时间间隔内网络流表现出的行为类型。窗口内的网络流经过聚类之后累积在大小为k的一维数组之中,统计该时间间隔内每个行为类型出现的次数。
15.窗口级层:基于有监督的决策树算法,将窗口级层中的特征参数与流级层中生成的一维数组合并作为该模型的输入特征集。通过这个过程,每个窗口的用户活动将被识别。
16.本发明在所述控制平面中构建一个机器学习到p4语言的转换方法,所述转换方法包括以下步骤:
17.步骤s1.对训练后的k-means模型进行解析,提取k个簇中心,每个簇中心由m个坐标值组成,每个特征一个。使用euclidean metric公式的平方来确定给定输入x和聚类c的相似性,所述euclidean metric公式如下为:
[0018][0019]
步骤s2.对训练后的决策树模型进行解析,遍历树中所有的节点,将节点的判定转换为if-else语句。if条件满足则对当前判断节点的左子树继续执行,不满足则进入右子树区域并添加else语句,直到遍历到叶子结点完成,表明一种分类情况的结束。
[0020]
本发明在所述控制平面中自动化完成p4程序的生成、编译和部署,将所述的两层模型映射到可编程交换机中。
[0021]
本发明在数据平面中使用sketch和哈希表流量特征构造存储结构,哈希表用于保存一段时间内网络流量特征,sketch用于辅助选择需要被存储的网络流。
[0022]
本发明还提供了上述用户活动分类方法在对用户活动进行分类中的应用。所述应用包括包括如下步骤:
[0023]
s1.数据包特征的提取:
[0024]
步骤s101.解析数据包的以太网层,确定数据包是否符合ipv4协议;若非ipv4协议,则不进行后续流程;若符合ipv4协议,则解析ipv4层。
[0025]
步骤s102.解析数据包的ipv4层,提取当前数据包中的源ip地址、目的ip地址、源端口、目的端口,数据包大小,传输层协议,以及数据包到达的时间戳,按照源ip地址、目的ip地址、源端口、目的端口,传输层协议的顺序组成字符串,用于表示网络流key值。
[0026]
s2.数据包特征存储与更新:
[0027]
步骤s201.将步骤s102中提取到特征信息保存到sketch和哈希表组成的存储结构中。所述的sketch数据结构是count-min sketch,即一个大小为d行w列的二维数组;所述的哈希表是由n个bucket构成的一维数组,其中bucket为能够存放一个网络流中多个特征参数的结构体。
[0028]
步骤s202.根据网络流特征字符串构成的网络流key值作为输入,通过哈希函数f(key)%n来确定该网络流在哈希表中的存放位置。
[0029]
步骤s203.查看该网络流是否已经存在于哈希表中;若该网络流已经存在或存放位置为空,则直接更新相应的参数信息;若该存放位置不为空且不为该网络流,表明哈希表发生碰撞。
[0030]
步骤s204.在哈希表发生碰撞时,将该网络流保存到sketch中,并比较该网络流在sketch中的大小与哈希表中冲突位置网络流的大小,判断是否执行替换;若该网络流在sketch中的大小大于哈希表中冲突位置网络流的大小,则执行替换操作;反之,就不执行替换操作;
[0031]
步骤s205.在t1时刻初始化步骤s201中sketch和哈希表组成的存储结构,如果当前的时刻t2-t1大于预先设置的阈值threshold时,将哈希表中的数据序列化导出,交由分类器执行分类操作,并初始化存储结构。
[0032]
s3.用户活动的分类:
[0033]
步骤s301.获取特征数据:遍历序列化中的特征数据,将每一条网络流的特征输入到分类器之中。
[0034]
步骤s302.基于流级特征的聚类:将单条网络流的特征输入k-means聚类模型,判定该网络流与k个可能的聚类中的一个相关联,聚类之后的结果累积到大小为k的数组之中,统计每个行为类型出现的次数。
[0035]
步骤s303.基于窗口级特征的分类:遍历完一段时间间隔内的所有网络流后,将窗口级的特征参数与流级生成的数组合并输入决策树分类模型,判定该时间间隔内用户的活动。
[0036]
步骤s304.分类结果统计:分类器完成一段时间间隔的流量分类任务后,将分类结果上传到控制平面进行信息统计。
[0037]
本发明的有益效果包括:实现了在可编程交换机上对用户活动进行分类,数据包不需要再被发往控制平面,消除了控制器与数据平面间的信道占用;所提出的存储结构对可编程交换机内存的占用降低了20%。
附图说明
[0038]
图1是本发明面向可编程数据平面的用户活动分类方法流程图。
[0039]
图2是本发明k-means算法的结构图。
[0040]
图3时本发明流级层与窗口级层模型结构图。
[0041]
图4是本发明sketch的结构图。
[0042]
图5是本发明哈希表的结构图。
[0043]
图6为本发明用户活动分类方法在可编程交换机的部署图。
具体实施方式
[0044]
结合以下具体实施例和附图,对本发明作进一步的详细说明。实施本发明的过程、条件、实验方法等,除以下专门提及的内容之外,均为本领域的普遍知识和公知常识,本发明没有特别限制内容。
[0045]
本发明公开了一种面向可编程数据平面的用户活动分类方法及应用。所述用户活动分类方法包括学习平面、控制平面、数据平面三个部分。所述学习平面用于从外部数据
集、带内网络遥测或主动测量中获取用户活动产生的网络流量,记录这些流量中一段时间间隔内的特征数据,并构建一个机器学习的流量分类模型来学习每个时间间隔中有用的字段特征;所述控制平面连接学习平面和数据平面,负责将预先训练好的流量分类模型转换为基于p4语言实现的应用程序,之后再生成一组对应的匹配-动作规则,将生成的p4应用程序和匹配-动作规则部署到数据平面的可编程交换机中;所述数据平面是由可编程数据交换机组成,在完成p4程序的部署之后,交换机使用sketch和哈希表构成的存储结构来记录一段时间内网络流量特征数据,基于这些网络流特征来识别该段时间间隔内的用户活动类别,上传分类结果并执行相应的转发或拦截策略。本发明提供了一种面向可编程数据平面的用户活动分类方法,采用了自顶向下的设计模式,兼顾了数据采集与特征提取、模型构建与转换、p4程序部署与用户活动分类。
[0046]
本发明所述用户活动分类方法的实施方法由三部分组成,一是流量分类模型的选择与构建,二是机器学习向p4语言的转换与部署,三是流量分类方法的应用,具体如下:
[0047]
1、流量分类模型的选择与构建
[0048]
步骤s1.流量分类模型的选择与构建。在学习平面完成网络流特征的提取与流量分类模型的构建,基于scikit-learn针对两层分类模型分别选择适合于p4语言实现的机器学习算法。
[0049]
进一步地,在学习平面利用scikit-learn构建分类模型的步骤如下:
[0050]
步骤s101.通过外部数据集、带内网络遥测或主动测量捕获网络流量数据。如果捕获的网络流量数据是同一个用户在不同时期内进行的同一个活动,可以将这些数据视作在一个时期内进行,合并为一条网络流方便后续分割处理。如果网络流量数据的捕获是在具有多个用户的网络中进行的,则不需要进行合并步骤。此步骤的输出是由多个用户产生的单个数据流,因此,该过程的后续步骤可以独立于数据输入格式。
[0051]
步骤s102.由于不能保证单条网络流在整个跟踪期间只执行一个活动,因此必须将捕获的流量按时间窗口进行分割,并针对时间窗口进行分类。时间窗口的长度与其所包含的数据包数量呈正相关,而数据包数量将会直接影响分类精度与内存负载,执行一个参数调优过程来确定时间窗口的长度,使分类精度和内存负载之间达到平衡,在保证分类精度的同时减少对内存空间的占用。每个时间窗口都可以由多条网络流组成,因此将分割出的时间窗口重构为一个包含流级层和窗口级层的两层数据结构。其中一条网络流被定义为具有相同源ip地址、目的ip地址、源端口、目的端口和传输层协议的所有数据包的集合。
[0052]
步骤s103.基于流级层和窗口级层的两层数据结构,为每个窗口提取一组包含流级层和窗口级层特征的特征集。所述流级层包含的特征有以太网类型、协议号、网络流的持续时间、网络流中数据包的数量、网络流中数据包大小的最大值和最小值,以及网络流的大小等;所述窗口级层包含的特征有窗口中数据包数量、所含网络流的大小之和、所含网络流数量、所含主机数量等。流级层的特征参数用于流级层模型的构建,窗口级层的特征参数用于窗口级层模型的构建。步骤s104.流级层模型构建:基于无监督的k-means算法,每条流与k个可能的聚类中的一个相关联,表明该段时间间隔内网络流表现出的行为类型。通过交叉验证以选择合适的k值大小。窗口内的网络流经过聚类之后累积在大小为k的数组之中,表明该时间间隔内每个行为类型出现的次数。所述的k-means算法构建过程如图2所示,首先读取文件中的样本集,随机选择k个聚类中心。对任意一个样本求其到k个聚类中心的距离,
将样本归类到距离最小的中心的聚类。若样本集中存在未被分类的样本,重新随机选择k个聚类中心执行上述流程;若样本集中不存在未被分类的样本,则对分类完的样本再进行每个类别求平均,更新聚类中心,多次计算后聚类中心不再变化,即两次连续的计算不存在误差时结束构建过程。步骤s105.窗口级层模型构建:基于有监督的决策树算法,将窗口级层中的特征参数与流级层中生成的数组合并作为该模型的输入特征集。通过交叉验证以选择合适的决策树深度。本发明使用的流级层和窗口级层构成的双层模型结构如图3所示。
[0053]
2、机器学习向p4语言的转换与部署
[0054]
步骤s2.机器学习向p4语言的转换与部署。将预先训练好的由k-means和决策树构成的两层流量分类模型进行解析,将流量分类模型转换为基于p4语言实现的应用程序,并生成一组对应的匹配-动作规则。另外,将p4应用程序和匹配-动作规则部署到数据平面的可编程交换机上。
[0055]
进一步地,在控制平面实现机器学习向p4语言的转换与部署的具体步骤如下:
[0056]
步骤s201.解析k-means与决策树模型,提取k个簇中心,每个簇中心由m维坐标值组成,每个坐标值代表一个特征参数。使用euclidean metric公式的平方来确定给定输入x和中心c的相似性,计算值越小,相似性越高。通过k次计算,确定x所属的簇,所述euclidean metric公式如下为:
[0057][0058]
其中,x表示给定的输入样本,c表示某个聚类中心,i表示第i个特征参数。
[0059]
步骤s202.分类代码利用scikit-learn中的tree包将生成的决策树转换为对应的分类树,递归遍历决策树的节点,将节点的判定转换为if-else语句。if条件满足则对当前判断节点的左子树继续执行,不满足则进入右子树区域并添加else语句,直到遍历到叶子结点完成,表明一种分类情况的结束。
[0060]
步骤s203.修改p4语言的固有元数据用于对数据包特征的记录和处理,支持数据平面带状态处理,这些信息也可以作为匹配-动作规则表的参数。
[0061]
步骤s204.模型转换程序对流特征的提取操作没有做具体的方法规定,在部署前需要对这些特征的存取进行自定义操作。在计算流持续时间时实现如下,程序读取流网络流key值对应的寄存器中的起始时间,如果为初始值“0”说明是一条新的流,则将该流的起始时间设置为该包的时间戳,更新寄存器,该包的流持续时间由网络流流起始时间与自身时间戳之差计算得出。数据包大小的最大值和最小值也是通过对寄存器里数据进行读取和比较完成赋值,当数据包大小大于寄存器中的最大值,或小于寄存器中的最小值时,更新寄存器内容。
[0062]
步骤s205.使用p4c完成p4程序的编译。编译器编译生成p4信息文件、json格式网络设备配置文件。使用topology.json中列出的命令配置所有主机,在p4程序在语法和逻辑上都保证正确且拓扑中的各端定义能与匹配动作表的转发目标对应的情况下,部署工作可以顺利完成。
[0063]
3、流量分类方法的应用
[0064]
步骤s3.sketch和哈希表存储结构的生成。本发明中,考虑到数据平面可编程交换
机中有限的存储空间,设计了一个sketch和哈希表构成的存储结构,所述存储结构已部署在可编程交换机中。其中,如图4所示,所述sketch数据结构是count-min sketch,即一个大小为d行w列的二维数组;如图5所示,所述的哈希表是由n个bucket构成的一维数组,其中bucket为能够存放一条网络流中多个特征参数的结构体,分别为网络流key、网络流中数据包的数量、网络流首个数据包到达的时间、最后数据包到达的时间、网络流中数据包大小的最大值和最小值,以及网络流的大小等。进一步地,在可编程交换机中完成数据包特征提取与保存的具体步骤如下:
[0065]
步骤s301.数据包特征提取。解析数据包的ipv4层,提取当前数据包中的源ip地址、目的ip地址、源端口、目的端口,数据包大小、传输层协议,以及数据包到达的时间戳,按照源ip地址、目的ip地址、源端口、目的端口、传输层协议的顺序组成字符串,用于表示网络流key值。
[0066]
步骤s302.网络流特征存储。根据网络流特征字符串构成的网络流key值作为输入,通过哈希函数f(key)%n来确定该网络流在哈希表中的存放位置,其中函数f(key)用于将字符型key转换为整型,n为哈希表的大小。
[0067]
步骤s303.查看该条网络流是否已经存在于哈希表中;若该条网络流已经存在且存放位置正确或该条网络流的存放位置为空,则直接更新相应的参数信息;若该存放位置不为空且不为该数据流,表明哈希表发生碰撞。
[0068]
步骤s304.在发生哈希碰撞时,将该条网络流保存到sketch中,并比较该条网络流在sketch中的大小与哈希表中冲突位置网络流的大小,判断是否执行替换;若该条网络流在sketch中的大小大于哈希表中冲突位置网络流的大小,则执行替换操作;反之,就不执行替换操作;
[0069]
步骤s305.在t1时刻初始化步骤s301中sketch和哈希表组成的存储结构,如果当前的时刻t2-t1大于预先设置的阈值threshold时,表明已捕获一个时间窗口内的网络流量,将哈希表中的数据序列化导出,交由分类器执行分类操作,并初始化存储结构。
[0070]
步骤s4.用户活动的分类。如图6所示,通过部署在数据平面构成的机器学习分类器,对输入的哈希表序列化数据进行分析,判断该段时间间隔内的用户活动。
[0071]
进一步地,在可编程交换机中完成用户活动分类的具体步骤如下:
[0072]
步骤s401.获取特征数据:遍历序列化中的特征数据,将每一条网络流的特征输入到机器学习分类器之中。
[0073]
步骤s402.基于流级特征的聚类:将单条网络流的特征输入k-means聚类模型,判定该条网络流与k个可能的聚类中的一个相关联,聚类之后的结果累积到大小为k的数组之中,统计每个行为类型出现的次数。
[0074]
步骤s403.基于窗口级特征的分类:遍历完一段时间间隔内的所有网络流后,将窗口级的特征参数与流级生成的数组合并输入决策树分类模型,判定该时间间隔内用户的活动。
[0075]
步骤s404.分类结果统计:分类器完成一段时间间隔的流量分类任务后,将分类结果上传到控制平面进行信息统计。
[0076]
实施例
[0077]
本发明公开了一种面向可编程数据平面的用户活动分类方法,设计了一种可编程
数据平面中机器学习辅助的用户活动分类方法。所述流量分类方法能够实现在数据平面完成对用户活动分类,通过p4语言来实现合适的机器学习模型冰并部署到可编程交换机中,交换机对流经的数据包进行解析,提取网络流的特征数据并保存到sketch和哈希表构成的存储结构之中,然后使用机器学习分类器对一段时间间隔内的网络流特征进行分析,判断该段时间间隔内的用户活动,上传分类结果。
[0078]
本发明是一个面向可编程数据平面的用户活动分类方法,该方法包含如图1所示的三个平面,分别是学习平面、控制平面与数据平面。具体地,
[0079]
所述学习平面,负责用于从外部数据集、带内网络遥测或主动测量中获取用户活动,提取并记录这些流量中一段时间序列内的特征数据,之后学习每个时间序列中有用的字段特征,并构建一个机器学习的流量分类模型;
[0080]
所述控制平面,连接学习平面和数据平面,负责将预先训练好的流量分类模型转换为基于p4语言实现的应用程序,并生成一组对应的匹配-动作规则。另外,在对生成的p4应用程序进行编译后将其部署到数据平面的可编程交换机中,并下发匹配-动作规则到交换机,接收来自数据平面交换机地分类结果;
[0081]
所述数据平面为可编程数据平面,由可编程交换机组成,在完成p4程序的部署之后,交换机解析经过的每一个数据包的头部域,提取需要的网络流特征数据。通过sketch和哈希表所构成的存储结构来记录一段时间内的网络流量特征数据,机器学习分类器基于这些特征数据实现对用户活动分类,上传分类结果并执行相应的转发或拦截策略。
[0082]
本发明所述用户活动分类方法的实施方法由三部分组成,一是机器学习模型的选择与构建,二是机器学习向p4语言的转换与部署,三是流量分类方法的应用,具体如下:
[0083]
1.流量分类模型的选择与构建
[0084]
步骤s1.流量分类模型的选择与构建。在学习平面完成网络流特征的提取与流量分类模型的构建,基于scikit-learn针对两层分类模型分别选择适合于p4语言实现的机器学习算法。
[0085]
进一步地,在学习平面利用scikit-learn构建分类模型的步骤如下:
[0086]
步骤s101.在连接到用户的路由器上部署网络探测器,该路由器转发用户进行网络活动时的网络流量。这些网络活动包括网页浏览、观看视频、、发送邮件和传输文件等。在路由器中启用span会话,使用linux cli工具tshark捕获所有流经路由器的流量副本。一次模拟只进行一个活动,可以是单个用户进行,或多个用户同时进行。使用python程序对生成的pcap文件格式进行解析,并将网络流量数据导出到csv文件中。
[0087]
步骤s102.由于不能假设用户在整个跟踪期间只执行一个活动,因此必须将流量划分为时间间隔进行分类。通过参数调优确定每个时间窗口的长度为3秒,窗口可以由多条网络流组成,因此分割出的时间窗口可以被重构为一个包含流级层和窗口级层的两层数据结构。其中一条网络流被定义为具有相同源ip地址、目的ip地址、源端口、目的端口和传输层协议的所有数据包的集合。
[0088]
步骤103.基于流级层和窗口级层的两层数据结构,为每个窗口提取一组包含流级层和窗口级层特征的特征集,提取的属性如表1所示。所述流级层包含的特征有以太网类型、协议号、网络流的持续时间、网络流中数据包的数量、网络流中数据包大小的最大值和最小值、以及网络流的大小等;所述窗口级层包含的特征有窗口中数据包数量、所含网络流
的大小之和、所含网络流数量、所含主机数量等。
[0089]
表1两层数据结构相关属性描述表
[0090][0091][0092]
步骤s104.流级层模型构建:基于无监督的k-means算法,每条流与k个可能的聚类中的一个相关联,表明该段时间间隔内网络流表现出的行为类型。通过交叉验证以确定k值为10。。窗口内的网络流经过聚类之后累积在大小为12的数组之中,表明该时间间隔内每个行为类型出现的次数。所述的k-means算法构建过程如图2所示。
[0093]
步骤s105.窗口级层模型构建:基于有监督的决策树算法,将窗口级层中的特征参数与流级层中生成的数组合并作为该模型的输入特征集。通过交叉验证确定12作为决策树深度。
[0094]
2.机器学习向p4语言的转换与部署
[0095]
步骤s2.机器学习向p4语言的转换与部署。将预先训练好的由k-means和决策树构成的两层流量分类模型转换为基于p4语言实现的应用程序,并生成一组对应的匹配-动作规则。另外,将p4应用程序和匹配-动作规则部署到可编程交换机。
[0096]
进一步地,在控制平面实现机器学习向p4语言的转换与部署的具体步骤如下:
[0097]
步骤s201.解析k-means与决策树模型,提取12个簇中心,每个簇中心由7维坐标值组成,分别是以太网类型、协议号、网络流的持续时间、网络流中数据包的数量、网络流中数据包大小的最大值和最小值,以及网络流的大小。使用euclidean metric公式的平方来确定给定输入x和聚类c的相似性,所述euclidean metric公式如下为:
[0098][0099]
其中,x表示给定的输入样本,c表示某个聚类中心,i表示第i个特征参数。
[0100]
步骤s202.分类代码利用scikit-learn中的tree包将生成的决策树转换为对应的分类树,递归遍历决策树的节点,将节点的判定转换为if-else语句。if条件满足则对当前
判断节点的左子树继续执行,不满足则进入右子树区域并添加else语句,直到遍历到叶子结点完成,表明一种分类情况的结束。
[0101]
步骤s203.修改p4语言的固有元数据用于对数据包特征的记录和处理,支持数据平面带状态处理,这些信息也可以作为匹配动作表的参数。
[0102]
步骤s204.模型转换程序对流特征的提取操作没有做具体的方法规定,在部署前需要对这些特征的存取进行自定义操作。在计算流持续时间时实现如下,程序读取流网络流key值对应的寄存器中的起始时间,如果为初始值“0”说明是一条新的流,则将该流的起始时间设置为该包的时间戳,更新寄存器,该包的流持续时间由网络流起始时间与自身时间戳之差计算得出。数据包大小的最大值和最小值也是通过对寄存器里数据进行存取和比较完成赋值,在满足条件的情况下更新寄存器内容。
[0103]
步骤s205.使用p4c完成p4程序的编译。编译器编译生成p4信息文件、json格式网络设备配置文件。使用topology.json中列出的命令配置所有主机,在p4程序在语法和逻辑上都保证正确且拓扑中的各端定义能与匹配动作表的转发目标对应的情况下,部署工作可以顺利完成。
[0104]
3.流量分类方法的应用
[0105]
步骤s3.sketch和哈希表存储结构的生成。本发明中,考虑到数据平面可编程交换机中有限的存储空间,设计了一个sketch和哈希表构成的存储结构,所述存储结构已部署在可编程交换机中。其中,如图4所示,所述sketch数据结构是count-min sketch,将该sketch设置为3行150列的二维数组;如图5所示,所述的哈希表是由20个bucket构成的一维数组,其中bucket为能够存放一条网络流中多个特征参数的结构体。进行数据包特征提取时初始化存储结构,将所有bucket中key部分设为null,其余部分设置为0;另外,sketch中数值也全部设置为0。
[0106]
进一步地,在可编程交换机中完成数据包特征提取与保存的具体步骤如下:
[0107]
步骤s301.数据包特征提取。解析数据包的ipv4层,提取当前数据包中的源ip地址、目的ip地址、源端口、目的端口,数据包大小,传输层协议,以及数据包到达的时间戳,按照源ip地址、目的ip地址、源端口、目的端口,传输层协议的顺序组成字符串,构成网络流key值。
[0108]
步骤s302.网络流特征存储。根据网络流特征字符串构成的网络流key值作为输入,通过哈希函数f(key)%20来确定该条网络流在哈希表中的存放位置,其中函数f(key)用于将字符型key转换为整型。
[0109]
步骤s303.查看该条网络流是否已经存在于哈希表中;若该条网络流已经存在或存放位置为空,则直接更新相应的参数信息;若该存放位置不为空且不为该条网络流,表明哈希表发生碰撞。
[0110]
步骤s304.在发生哈希碰撞时,将该条网络流保存到sketch中,并比较该条网络流在sketch中的大小与哈希表中冲突位置网络流的大小,判断是否执行替换;若该条网络流在sketch中的大小大于哈希表中冲突位置网络流的大小,则执行替换操作;反之,就不执行替换操作;
[0111]
步骤s305.在t1时刻初始化步骤s201中sketch和哈希表组成的存储结构,如果当前的时刻t2-t1大于预先设置的阈值3秒时,将哈希表中的数据序列化导出,生成如下所示
的:[以太网协议,协议版本,网络流持续时间,网络流中数据包大小的最小值,网络流中数据包大小的最大值,网络流中数据包数量,网络流大小]特征向量,交由分类器执行分类操作,并初始化存储结构。
[0112]
步骤s4.用户活动的分类。如图6所示,通过部署在数据平面构成的机器学习分类器,对输入的哈希表序列化数据进行分析,判断该段时间间隔内的用户活动。
[0113]
进一步地,在可编程交换机中完成用户活动分类的具体步骤如下:
[0114]
步骤s401.获取特征数据:遍历序列化中的特征数据,将每一条网络流的特征向量输入到机器学习分类器之中。
[0115]
步骤s402.基于流级特征的聚类:将单条网络流的特征输入k-means聚类模型,判定该条网络流与12个可能的聚类中的一个相关联,聚类之后的结果累积到大小为12的数组之中,统计每个行为类型出现的次数。
[0116]
步骤s403.基于窗口级特征的分类:遍历完3秒时间间隔内的所有网络流后,将窗口级的特征参数与流级生成的数组合并输入决策树分类模型,判定该时间间隔内用户的活动。
[0117]
步骤s404.分类结果统计:分类器完成一段时间间隔的流量分类任务后,将分类结果上传到控制平面进行信息统计。
[0118]
本发明在v
í
ctor labayen数据集和iscxvpn2016数据集上进行验证,这些数据集都为公开数据集。其中v
í
ctor labayen数据集是一组从单个用户捕获的pcap/csv格式的网络流量跟踪。该数据集包含五种不同的活动:文件传输、流媒体视频、网页浏览、文字聊天和空闲状态。iscx-nonvpn包含的流量活动更为丰富,但有些活动跟踪很少,例如只有4个跟踪,p2p只有一个跟踪,因此最后选择文件传输、流媒体视频、文字聊天和语音通话四个活动用于验证。采用分类系统常用的指标:精准率、召回率和f值来评价分类准确率。统计结果如表2所示,对于v
í
ctor labayen数据集,平均f值、准确率和召回率分别为0.947,95.12%和94.36%;对于v
í
ctor iscxvpn2016数据集,平均f值、准确率和召回率分别为0.957,96.06%和95.43%。
[0119]
表2识别率统计
[0120][0121][0122]
本发明的保护内容不局限于以上实施例。在不背离本发明构思的精神和范围下,
本领域技术人员能够想到的变化和优点都被包括在本发明中,并且以所附的权利要求书为保护范围。

技术特征:


1.一种面向可编程数据平面的用户活动分类方法,其特征在于,所述用户活动分类方法包括以下三个平面:学习平面,用于从外部数据集、带内网络遥测或主动测量中获取用户活动产生的网络流量,提取并记录网络流量中一段时间间隔内的特征数据,之后学习每个时间间隔中有用的字段特征;基于所述字段特征构建机器学习的流量分类模型下发给控制平面;控制平面,连接学习平面和数据平面,负责将预先训练好的流量分类模型转换为基于p4语言实现的应用程序,并生成一组对应的匹配-动作规则,所述匹配-动作规则表示对匹配的数据包执行预定的动作;在对生成的应用程序进行编译后将其部署到数据平面的可编程交换机中,并下发匹配-动作规则到控制平面的交换机;数据平面,其为可编程数据平面,由可编程数据交换机组成,在完成应用程序的部署之后,交换机解析经过的每一个数据包的头部域,提取数据流特征数据;交换机通过sketch和哈希表所构成的存储结构来记录一段时间内的网络流量特征数据;其中,哈希表用于保存一段时间内网络流量特征,sketch用于辅助选择需要被存储的网络流,基于这些记录的网络流量特征数据实现对用户活动分类,上传分类结果并执行相应的转发或拦截策略。2.根据权利要求1所述的面向可编程数据平面的用户活动分类方法,其特征在于,所述特征数据包括以太网类型、ip协议号、源ip地址与目的ip地址、源端口号与目的端口号、网络流的持续时间、数据包的大小范围、数据包的数量。3.根据权利要求1所述的面向可编程数据平面的用户活动分类方法,其特征在于,结合网络用户活动的特征,将网络流量划分为时间窗口进行分类;所述时间窗口中的每个都由多条网络流组成,其中一条网络流被定义为具有相同源ip地址、目的ip地址、源端口、目的端口和传输层协议的所有数据包的集合。4.根据权利要求1所述的面向可编程数据平面的用户活动分类方法,其特征在于,利用机器学习推断用户在网络中的活动,在所述学习平面中利用scikit-learn机器学习工具包来构建两层的流量分类模型:流级层:基于无监督的k-means算法,每条流与k个可能的聚类中的一个相关联,表明该段时间间隔内网络流表现出的行为类型;窗口内的网络流经过聚类之后累积在大小为k的一维数组之中,统计该时间间隔内每个行为类型出现的次数;窗口级层:基于有监督的决策树算法,将窗口级层中的特征参数与流级层中生成的一维数组合并作为该模型的输入特征集,通过这个过程,识别每个窗口的用户活动。5.根据权利要求1所述的面向可编程数据平面的用户活动分类方法,其特征在于,在所述控制平面中构建一个机器学习到p4语言的转换方法,包括以下步骤:步骤s1.对训练后的k-means模型进行解析,提取k个簇中心,每个簇中心由m个坐标值组成,每个特征一个,使用euclidean metric公式的平方来确定给定输入x和聚类c的相似性,所述euclidean metric公式如下为:其中,x表示给定的输入样本,c表示某个聚类中心,i表示第i个特征参数;步骤s2.对训练后的决策树模型进行解析,遍历树中所有的节点,将节点的判定转换为
if-else语句;if条件满足则对当前判断节点的左子树继续执行,不满足则进入右子树区域并添加else语句,直到遍历到叶子结点完成,表明一种分类情况的结束。6.根据权利要求1所述的面向可编程数据平面的用户活动分类方法,其特征在于,在所述控制平面中自动化完成p4程序的生成、编译和部署,将所述的两层模型映射到可编程交换机中。7.一种如权利要求1-6之任一项所述的面向可编程数据平面的用户活动分类方法的应用,其特征在于,所述应用包括如下步骤:s1.数据包特征的提取:步骤s101.解析数据包的以太网层,确定数据包是否符合ipv4协议;若非ipv4协议,则不进行后续流程;若符合ipv4协议,则解析ipv4层;步骤s102.解析数据包的ipv4层,提取当前数据包中的源ip地址、目的ip地址、源端口、目的端口,数据包大小,传输层协议,以及数据包到达的时间戳,按照源ip地址、目的ip地址、源端口、目的端口,传输层协议的顺序组成字符串,用于表示网络流key值;s2.数据包特征存储与更新:步骤s201.将步骤s102中提取到特征信息保存到sketch和哈希表组成的存储结构中;所述的sketch数据结构是count-min sketch,即一个大小为d行w列的二维数组;所述的哈希表是由n个bucket构成的一维数组,其中bucket为能够存放一个网络流中多个特征参数的结构体;步骤s202.根据网络流特征字符串构成的网络流key值作为输入,通过哈希函数f(key)%n来确定该网络流在哈希表中的存放位置;步骤s203.查看该网络流是否已经存在于哈希表中;若该网络流已经存在或存放位置为空,则直接更新相应的参数信息;若该存放位置不为空且不为该网络流,表明哈希表发生碰撞;步骤s204.在哈希表发生碰撞时,将该网络流保存到sketch中,并比较该网络流在sketch中的大小与哈希表中冲突位置网络流的大小,判断是否执行替换;若该网络流在sketch中的大小大于哈希表中冲突位置网络流的大小,则执行替换操作;反之,就不执行替换操作;步骤s205.在t1时刻初始化步骤s201中sketch和哈希表组成的存储结构,如果当前的时刻t2-t1大于预先设置的阈值threshold时,将哈希表中的数据序列化导出,交由分类器执行分类操作,并初始化存储结构;s3.用户活动的分类:步骤s301.获取特征数据:遍历序列化中的特征数据,将每一条网络流的特征输入到分类器之中;步骤s302.基于流级特征的聚类:将单条网络流的特征输入k-means聚类模型,判定该网络流与k个可能的聚类中的一个相关联,聚类之后的结果累积到大小为k的数组之中,统计每个行为类型出现的次数;步骤s303.基于窗口级特征的分类:遍历完一段时间间隔内的所有网络流后,将窗口级的特征参数与流级生成的数组合并输入决策树分类模型,判定该时间间隔内用户的活动;步骤s304.分类结果统计:分类器完成一段时间间隔的流量分类任务后,将分类结果上
传到控制平面进行信息统计。

技术总结


本发明公开了一种面向可编程数据平面的用户活动分类方法,包括以下三个平面:学习平面、控制平面、数据平面。本发明该方法能够实现在数据平面完成对用户活动分类,通过P4语言来实现合适的机器学习模型并部署到可编程交换机中,交换机对流经的数据包进行解析,提取网络流的特征数据并保存到sketch和哈希表构成的存储结构之中,然后使用机器学习分类器对一段时间间隔内的网络流特征进行分析,判断该段时间间隔内的用户活动,上传分类结果。上传分类结果。上传分类结果。


技术研发人员:

章玥 朱信宇 蒲戈光

受保护的技术使用者:

上海工业控制安全创新科技有限公司

技术研发日:

2022.09.19

技术公布日:

2022/12/22

本文发布于:2024-09-23 20:15:06,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/2/44239.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:网络   可编程   特征   数据
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议