深度包检测(DPI)详细介绍
简介
- DPI(Deep Packet Inspection)深度包检测技术是在传统IP数据包检测技术(OSI L2-L4之间包含的数据包元素的检测分析)之上增加了对应用层数据的应用协议识别,数据包内容检测与深度解码。
- 既可以检测2~4层,又可以检测应用层。

背景
安全问题、流量识别、大数据(海量数据挖掘),推动网络识别技术的发展
流量识别
- 指将网络中的数据流识别成对应网络协议的过程。

常用功能
- 通过对流量的识别来掌握网络中承载的数据内容。
- 分析出用户的网络行为;
- 同时根据链路状态及功能需求,对网络流量进行限速和控制等处理
- 通过特征匹配技术,将数据包在封装过程中所添加的各层头部信息解析并提取,然后与已有规则库中特征信息进行匹配,从而进行流量的识别

- 可以用于识别来自哪个应用,比如:qq、http、pplive

具体功能
业务识别: 其中第一类业务可以通过五元组来进行识别,此类业务IP地址和端口固定。第二种需要通过DPI技术来进行深度检测,通过解析数据包来确定业务具体内容和信息。
业务控制: 可以根据既定的策略对网络进行配置,从而对业务流实现控制,主要包括转发流向、限制带宽、阻断、整形、丢弃等处理。
业务统计: 深度包检测技术的业务统计功能是基于识别结果的,对一定时间内的流量行为进行统计,流量流向、业务占比、访问网站TOPN等。统计应用类型的使用比率调整该业务的服务优先级,统计用户正在使用哪种业务进行视频播放、即时通讯、购物支付以及游戏娱乐,也可以统计出消耗网络带宽的非法P2P、VOIP
业务等等。
做法
- 深度包检测技术可以高效的识别出网络中的各种应用,且能够将识
别粒度细化到业务的具体动作
特征识别
- 提取流量的特征字符串:描述性较差,需要将流量特征进行遍历,才可以将流量全部识别出来,通常使用“正则表达式”来概括性描述,
- 正则表达式将可能出现的形式进行囊括遍历:此种方式有较强的描述能力,但是识别性能较差,对设备的性能消耗很大。
- 特定比特流模式:主要是对应用层载荷信息及数据流信息进行识别,此类信息是以十六进制或者二进制形式描述应用层的信息,规则描述性较差,但匹配效率很高。
架构举例

- 收包模块
- 策略配置模块
- 识别特征下发模块
- 特征下发模块
- 规则库更新模块
- 协议分析模块
- 结果通知模块
- 流量统计模块:该模块通过协议分析得到5元组,将5元组交至转发设备,由转发设备统计
流量并上报数据,最后由DPI输出报表。外置应用查看流量统计接口。
部署方式
串接方式
- 直接将DPI设备以串接的方式部署在网络链路之间。
- 串接方式以直连的形式接入,不需要进行网络连接配置,直接通过数据链路层二层透传,串接方式对设备性能和可靠性都有很高的要求。
- 串接方式的优点在于较好的网络控制,能够及时对流量进行阻断和整形。
- 但是该种方式也引入了故障点的缺陷,为增强设备的可靠性,通常在设备前段加入光路保护器,从而减小在设备升级或故障时对现网的影响
并接方式
- 并接方式是采用分光器等设备将网间的信号镜像到旁路的DPI设备当中,并不影响原链路的数据传输。
- 采用并接方式,通常用于业务的识别和统计,上网日志的留存等,在网络控制方面,只能通过干扰的方式进行流量控制,不能对网络流量进行直接的控制和管理。
- 对于TCP流,并接方式通过发送reset或6n分组,终止连接来进行控制。
- 对于UDP流而言,主要是发送伪造分组,劣化通信质量来进行网络干扰。
- 并接方式可靠性高,对现网业务无任何影响,设备性能要求低,可以适度缓存,流量进行识别即可,没有转发的需求,

存在问题
- 设备迭代困难
- 重复部署
- 流量重复复制给DPI设备
- 可视化不足
- 没能虚拟化
检测引擎举例
- 检测引擎自身包括三个部件:协议解析器、算法引擎和检测结果处理,下面主要对其关键部分的协议解析器进行说明。现阶段额度协议解析器的职责主要有:
1)协议确认: 进入HTTP、HTTPS等协议解析器的条件都是固定端口映射。但越来越多的互联网应用正试图通过80、443等传统端口来逃逸传统网络设备的检测和控制。因此必要的协议确认是防止这种逃逸的前提。
2)协议切分: 协议切分是在流(会话)的基础上进一步细分出“检测流”或者叫“事物”的概念。例如:HTTP的一次transaction、FTP的一次用户登录行为、SMTP/POP3的一次邮件发送/接收等,都抽象成一条“检测流”。有时一条流可以传输多次检测流,甚至同时有并发的检测流出现。协议切分对于关心检测流的业务模块有着重要意义,例如内容过滤和应用审计。
3)协议域切分:协议域切分是在最小的粒度上细分报文。将检测流分成Header和Body部分,Header还要细分成各个Field,包含Field Value和Field Data部分。协议域切分有助于判别该头域是否需要检测,判定该头域命中的特征与之定义是否吻合,以及识别提取审计日志信息的关键位置。
4)解码: HTTP的URI部分和邮件协议的Subject部分等进行了编码,需要协议解析器进行解码,大多数情况下需要我们将解码后的字段送入算法引擎。有些情况又有个别特征基于编码前定义,需要我们将原始字段送入算法引擎,但同时发生会对性能产生一定损耗。
5)解压缩:HTTP可以用gzip、x-gzip、deflate等方式传送压缩后的数据内容,在用户的配置要求下解析器会将内容解压缩后送入算法引擎,以帮助我们发现压缩数据中的需要被检测出的特征。
6)SSL卸载:在用户的配置要求下,可以通过SSL卸载技术尽可能还原HTTPS中的原始流量,进行更加全面的检测和控制。
7)协商协议识别:FTP、SIP以及很多加密方式的P2P协议都采用协商甚至多次协商的方式来进行数据传输。对应的协议解析器需要能够通过控制通道报文的解析识别出协商协议的数据通道的五元组特征,通过协商关联表的匹配来识别其数据通道。
当然,基于这些协议分析完成之后,通过算法引擎可以匹配查找可以发现相关的检测结果,同时送到后续的动作设计模块进行处理。在内核态,DPI支持大量的动作以及它们的组合,各个DPI的业务模块都可以基于规则或者规则分类来配置报文的动作。这些动作包括Permit/deny、Drop丢掉后续报文、Redirect或者发送双向TCP Reset断开连接、生成攻击日志告警等。
- H3C 的DPI软件引擎具有内存可伸缩特性。DIM用户态可动态感知需要加载软件引擎的单板或者子设备(的内核态)是否有充裕的内存,根据内存剩余情况和用户的配置选择最优的引擎存储方式,然后启动编译线程完成编译下发工作。海量特征的编译下发是一个CPU密集型过程,考虑到可能遇到的配置频繁变更或者特征库升级调度,DIM的编译线程设置了可中断可重入机制,不需要用户等待。
说明,对内存消耗大
参考文献
- 基于SDN深度包检测技术研究
- https://www.cnblogs.com/sddai/p/7612841.html
- https://www.cnblogs.com/sddai/p/7612881.html
- http://blog.sina.com.cn/s/blog_9f0d6e9b0102wles.html
深度包检测(DPI)详细介绍的更多相关文章
- DPI深度包检测
最近在读网络协议方面的论文,接触到DPI技术.博主是个小白,这里写些查到的笔记. 原文出处因为比较多,杂乱.百度文库和许多地方都有,就不贴链接了. 1. DPI 全称为"Deep Packe ...
- DPI (Deep Packet Inspection) 深度包检测技术
详解DPI与网络回溯分析技术 随着网络通讯技术进步与发展,网络通讯已跨入大数据时代,如何监控各类业务系统的通讯数据在大数据流量中传输质量,以及针对海量的网络通讯数据的范畴中存在少量的恶意流量的检测,避 ...
- Thinkphp框架拓展包使用方式详细介绍--验证码实例(十一)
原文:Thinkphp框架拓展包使用方式详细介绍--验证码实例(十一) 拓展压缩包的使用方式详细介绍 1:将拓展包解压:ThinkPHP3.1.2_Extend.zip --> 将其下的 \ ...
- 通过jarjar.jar来替换jar包名的详细介绍
有时候我们根据一些场景 需要替换第三方jar包的包名,比如Android广告平台sdk,更换他们jar包包名的话,可以防止市场检测到有广告插件,所以,今天就介绍一下如何使用jarjar.jar工具来替 ...
- Linux硬盘的检测--smartctl详细介绍
概述 随着硬盘容量.速度的快速发展,硬盘的可靠性问题越来越重要,今天的单块硬盘存储容量可轻松达到1TB,硬盘损坏带来的影响非常巨大.不同的文件系统(xfs,reiserfs,ext3)都有自己的检测 ...
- Tensorflow 2.0 深度学习实战 —— 详细介绍损失函数、优化器、激活函数、多层感知机的实现原理
前言 AI 人工智能包含了机器学习与深度学习,在前几篇文章曾经介绍过机器学习的基础知识,包括了监督学习和无监督学习,有兴趣的朋友可以阅读< Python 机器学习实战 >.而深度学习开始只 ...
- DPI深度报文检测架构及关键技术实现
DPI深度报文检测架构及关键技术实现 当前DPI(Deep Packet Inspect深度报文识别)技术是安全领域的关键技术点之一,围绕DPI技术衍生出的安全产品类型也非常的多样.在分析DPI的进一 ...
- NethServer 7.2 RC1,增加深度数据包检测
NethServer 7.2 RC1 "Saltimbocca" 发布了,NethServer是基于CentOS的面向服务器的Linux发行.该产品的主要特性是模块化的设计,这使 ...
- 抓包工具-Wireshark(详细介绍与TCP三次握手数据分析)
功能使用的详细介绍 wireshark(官方下载网站: http://www.wireshark.org/),是用来获取网络数据封包,可以截取各种网络封包,显示网络封包的详细信息,包括http,TCP ...
随机推荐
- 数组的filter()方法
filter()也是一个用的不多的方法,但有时候还是比较有用的: 首先,Array.filter()是数组的方法,它作为数组方法被调用,传入一个callback,返回Array中符合callback条 ...
- javascript函数中with的介绍
/*js函数中with函数的用法分析定义 方便用来引用某个对象中已有的属性但是不能用来给对象添加属性 要给对象创建新的属性 必须明确的引用该对象*/代码格式with(object) statement ...
- BZOJ5372: PKUSC2018神仙的游戏
传送门 Sol 自己还是太 \(naive\) 了,上来就构造多项式和通配符直接匹配,然后遇到 \(border\) 相交的时候就 \(gg\) 了 神仙的游戏蒟蒻还是玩不来 一个小小的性质: 存在长 ...
- 可持久化trie(BZOJ5338: [TJOI2018]xor)
题面 BZOJ Sol 显然是要维护一个区域的 \(trie\) 树,然后贪心 区间 \(trie\) 树??? 可持久化 \(trie\) 树??? 直接参考主席树表示出区间的方法建立 \(trie ...
- JavaWeb学习总结(二):Http协议
一.什么是HTTP协议 HTTP是hypertext transfer protocol(超文本传输协议)的简写,它是TCP/IP协议的一个应用层协议,用于定义WEB浏览器与WEB服务器之间交换数据的 ...
- 03.CSS选择器-->交集并集选择器
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- ionic--配置路由
1.ng-route index中引用文件: <script src="ionic.bundle.js"></script> <script src= ...
- Unable to update index for central http://repo1.maven.org/maven2/ 解决方法
不知道什么原因 MyEclipse(eclipse) 中的 maven 插件突然不能用了,修改 pom.xml 无任何反应 控制台报 Unable to update index for centra ...
- SQL Server ->> ColumnStore Index(列存储索引)
Columnstored index是SQL Server 2012后加入的重大特性,数据不再以heap或者B Tree的形式存储(row level)存储在每一个数据库文件的页里面,而是以列为单位存 ...
- 按钮在执行frame动画的时候怎么响应触发事件?
按钮在执行frame动画的时候怎么响应触发事件? 代码中效果(请注意,我并没有点击到按钮,而是点击到按钮的终点frame值处): 对应的代码: // // ViewController.m // Ta ...