1
基于 NetFPGA的网络流量分类
网络流量分类的方法
-
基于端口识别的流量分类
比如 21 端口分配给 FTP,25 端口分配给 SMTP,80 端口分配给 HTTP 服务。有研究显示几乎 70%的基于端口的字节精度(Byte accuracy)分类算法都是使用 IANA 端口表的。
缺点: 基于端口的流量分类方法有很大的局限性。很多的基于 P2P 的网络应用没有在 IANA 注册端口号。还有一些网络应用为了逃避登录限制,不采用知名端口;基于端口的流量分类目前被认为是不可靠、不可信。
-
基于内容深度检测的流量分类
基于内容的流量分类主要对网络数据包特征字符串的查找,再结合数据包 5 个基本属性(Protocol, Source and Destination IP Address, Source and Destination Ports)去确定网络应用的类型。这种特征字符串的查找,前提是已知网络应用的内容特征。
如:Gnutella 在握手连接后的第一个数据包含有“GNUTELLA CONNECT/0.4\n\n”,收到这个信息的服务器端回复报文中含有“GNUTELLA OK\n\n”;对于 Freenet,目标端口通常是 19114,Freenet 启动的时候,要查找其它机器的存在,DNS 查找www.octayne.com,所以第 55 个 Byte 处是:03 77 77 77 07 6F 63 74 61 79 6e 65 03 63。知道这些特征,通过字符串的查找算法检查数据包,就能够得到准确地结果。
缺点: 这种技术可行要求两个条件,一是所有网络数据包的内容是可见的,二是流量分类系统知道每一个网络应用的通讯方式和语义。有两个方面的情况对第一个假设非常不利,一是用户有可能对数据加密,加密的数据包可能隐藏端口号;二是政府可能推出保密规章,完全限制第三方软件检测数据包的内容。对于第二个假设,网络应用可能不停地在更新数据通讯的格式,这是流量分类系统无法跟进的;另一方面,网络应用的种类也在不断的增加,流量分类系统不能做到对未知的网络应用协议进行识别。
-
基于流量统计特征的流量分类
基于流特征的协议分是通过对数据包的统计特征分析。它原理是一个网络应用在网络层中都有自己独有统计特征。它可以避免流量识别的端口依赖,可以识别加密的网络应用,并且具有较高的分类精度。
机器学习关键点
第一,特征的选择至关重要。无论是对于有监督的学习还是无监督的学习,从统计特征中选择最有利于网络流量分类,最有利于得出精度高的分类结果的特征不是一件容易的事情。有许多特征选择算法可以对给定的多个特征进行筛选,比如 Correlation-based Feature Selection和 Best-First or Genetic search。
第二,解决怎样标记流量的问题。
第三,解决实时地、持续地分类问题。
应用于流量分类系统的机器学习算法主要有决策树算法、朴素贝叶斯分类算法、支持向量机(SVM)算法、神经网络算法和 k-近邻算法。
机器学习用于网络流量识别
网络流量识别技术主要肖基于端秘和基于应用层协议标签2种,分别具有实现简单、准确性较商的优点,但都存在必须了解端口号和协议标签及不能识别加密流量等缺点。
比较了一下之后说C4.5算法构造分类器,对网络流量识别分析效果更好。
之后就是算法公式。然后是结果分析。
结论: 不论是加密流量,还是基于P2P技术具有伪装特性的业务流量都能被成功识别与分析,遥掰子集和全集时准确率分别在88.67%、
88.89%以上,建模时间仅为全集作训练集时的13%。
基于NetFPGA的可编程路由器数据平面的设计与实现
传统路由器在在逻辑上分为路由管理层,操作系统层和硬件设层,在功能上分为输入/输出网络接口,转发引擎和路由引擎等四个模块。
在控制平面采用软件方法或虚拟化技术,生成一个或多个控制层,支持一个或多个用户操作;在转发层,利用高速网卡的多队列特性或者通过对通用硬件进行编程,实现对数据包的转发。
NetFPGA参考设计的核心是用户数据通路UDP,其中最重要的部分是数据包目标端口的查找,它由两条通路构成,数据通路和寄存器通路。
- 高速数据通路
UDP内部包括了三大模块:input_arbiter、output_port_lookup 和 output_queues,数据处理的核心output_port_lookup是实现各种功能的关键所在,它的功能正如其名,是用来进行目标端口查找的。在NetFPGA的参考IPv4路由器中,实现了一个五级流水线,包括了eth_parser、ip_checksum_ttl、ip_lpm、ip_arp和dest_ip_filter五级处理模块,他们都是通过模块Preprocessor来控制的。 - 寄存器控制通路
在NetFPGA的整体框架中,还有一条寄存器流水线与数据流水线并行地在各个模块间进行传递,寄存器流水线的作用是使上位机可以通过PCI总线来对硬件中模块里的寄存器进行读写操作,用以配置硬件模块使其执行不同操作或从硬件模块的寄存器读出特定的信息,获取硬件处理的数据信息。
每个用户的自定义功能模块通常包括两个子模块: 寄存器处理模块 ,使得上位机可以通过寄存器系统对自定义模块进行配置或从中读取信息;数据处理子模块 ,用于数据包的处理与传递,此外还可以通过有限状态机(FSM)来实现逻辑控制功能。
通过使用openvz 虚拟多个服务器。
介绍NetFilter ,我在网上找了一下详解:https://www.cnblogs.com/x_wukong/p/5923767.html
NetFilter在内核网络子系统的网络层处理流程中,巧妙的选择了5个钩子点(HOOK),并在其上定义了钩子函数,它使得NetFilter既可以很好的控制数据包的处理流程,又不影响内核的稳定性。
介绍了虚拟网卡技术TUN/TAP,我在网上找了一下详解:https://blog.csdn.net/lishuhuakai/article/details/73136442
路由器整体架构
路由器整体架构
1)数据平面,主要功能是进行数据包的转发,为了应对新出现的协议,需要在NetFPGA的内部数据通路上实现一种能够编程和扩展的机制。此外,由于与主要作为路由引擎的控制平面分离,当需要进行路由计算或者与路由软件有关的任务时,需要开辟一条通信通道。
2)控制平面,包括路由引擎和路由器管理模块。应用虚拟化技术,将路由器置于由虚拟化技术产生的虚拟容器内,通过端口映射方式,将NetFPGA的四个端口映射到虚拟容器内,并由路由引擎处理由NetFPGA发送来的数据包,
3)管理平面:提供友好的交互界面,方便用户高效管理各逻辑路由器,实现相对较高的可控性和安全性。
数据平面
1. 本文基于当前的参考路由,添加了一个流量采集模块,可以对网络层和传输层的协议进行统计。
2. 本文设计并实现了一种隧道方式,在主机Linux内核中开辟了一条通道,支持多种协议,使数据平面与控制平面间可以快速、准确的通信,加快了整个路由器的处理速度。
控制平面
主机使用虚拟化软件OpenVZ虚拟出多个虚拟机容器,每个虚拟机容器可以作为一个虚拟路由器使用,主机可以管理配置这些虚拟容器,通过通信控制模块与每个虚拟路由器交换路由信息,并通过PCI总线和底层数据平面交互。
控制平面功能设计架构
基于机器学习的网络流量特征选择
流量识别技术主要经历了3个阶段的发展:端口检测、深度包检测以及深度流检测,当前研究的热点在于基于机器学习方法的深度流检测技术。
本文对机器学习中的特征选择阶段做了相关的研究
介绍了端口检测/深度包检测/深度流检测的缺点,监督学习/无监督学习/半监督学习的基本概念。
半监督学习主要考虑如何利用少量的标记样本和大量的未标记样本进行训练和分类的问题,这种学习方式更贴近于人类的学习过程,使分类器可以如人一般的触类旁通、举一反三,然而半监督学习目前主要用于处理人工合成数据,使用范围局限在实验室内,也就是说其理论价值还没有在现实应用中具体体现出来,另外,这种学习的抗干扰性比较弱。
特征选择的基本概念
搜索策略分为完全搜索(比如分支定界算法等)、随机搜索(比如遗传算法¨妇等)和启发式搜索(比如SFFS、SBFS等);
评价函数分为独立评价函数和非独立评价函数;
根据特征选择算法与分类算法的关系,将其分为过滤式(Filter)、封装式(Wrapper)与嵌入式(Embedded)3种。
后面就是算法和评估。
基于机器学习和NetFPGA的智能高速入侵防御系统
目前市面上的主流商用入侵防御系统,其对入侵的检测主要采用误用检测技术,通过建立一个庞大的入侵特征规则库,对各种网络事件进行匹配,从而达到发现入侵的目的。
深度学习相对于传统的机器学习模型的一个重要优势在于特征提取的自动化 。
进行异常检测和入侵检测的首要任务是进行网络数据包的特征提取 ,特征提取的质量高低直接关系到混合机器学习效果的好坏。
通过深度学习中的自动编码器方法 对训练样本进行学习和训练,有效地提取出原来维数庞大的输入特征向量中有用的结构,从而实现特征压缩提取的自动化,降低后面分类时的计算量,实现了入侵防御的全过程智能化。
设计思路
本设计中所添加的数据包过滤模块位于 Input_Arbiter模块和 Output_port_lookup 模块之间,在这个位置对数据包过滤,在 Output_port_lookup 中增加向 CPU 队列转发数据包,实现数据包的捕获。
硬件数据包过滤模块主要是针对用户人为定制过滤规则的需求,满足用户自定义需要过滤的 IP 地址或网段,数据包的类型、协议等,并且将过滤规则固化到 NetFPGA 板卡上。当有数据包到来的时候,通过提取包头信息并与硬件上的规则作比较,实现硬件层面的高速过滤。
包捕获是在 output_port_lookup 模块内,将从 MAC 输入队列到来的数据包转发到 CPU 队列,并通过 DMA 的方式高速传送给上位主机,从而实现高速的包捕获。在上位机对数据包进行处理后,如果不是入侵数据包,则将该报文通过 CPU 队列重新发送给 NetFPGA 板卡。NetFPGA 对于从 CPU 队列到来的数据包直接按照相应的路由协议转发到相应的 MAC 输出队列输出。
包头信息提取状态机介绍
TCAM设置
后边是机器学习,还没看懂