一、 网络流量管理的范畴
近十几年来,互联网已经成为越来越重要的需求。据统计,互联网目前已成为人类社会最重要的信息基础设施,占人类信息交流的80%。对社会进步、经济发展和国家安全具有重大战略意义。在这种大背景下,面对日益复杂的网络联机及逐渐增加的网络流量,系统和网络管理者必须花费更多时间精力来了解这些网络设备的运作状况,以维持一个系统的正常运作。
一般来说,网络管理者所需要了解的是各个网段的使用情形,频宽的使用率,网络问题的瓶颈发生于何处。当网络问题发生时,必须能够很快地分析和判断出问题的发生原因,可能是线路问题、网络设备问题、或者是路由器的设定问题。对网络流量进行有效的管理是最大化发挥网络效能的首要因素。那么,管理网络流量的时候应该通过什么样的依据管理,通过什么手段有效的把流量进行识别、分析和管理呢?这是本专题所要解决的主要问题。
一般说来,我们可以将网络流量管理大致分为如下几个大的范畴:
1、 流量识别
流量识别,也叫业务识别|(Application Awareness):它是伴随着网络业务的蓬勃发展而出现的一个新的概念,通过对业务流量从数据链路层到应用层的报文深度检查分析,依据协议类型、端口号、特征字符串和流量行为特征等参数,获取业务类型、业务状态、业务内容和用户行为等信息,并进行分类统计和存储。业务识别的基本目的是帮助网络管理者获得网络层之上的业务层流量信息,如业务类型、业务状态、业务分布、业务流量流向等。业务识别是一个相对复杂的过程,需要多个功能模块的协同工作,业务识别的工作过程简单描述如下:
◆识别处理模块采用多通道识别处理,通过对网络流量的源/目的IP地址和源/目的端口号的Hash算法,将网络流量均匀的分配到多个处理通道中。
◆多处理通道并行执行网络流量的深度报文检查,获取网络流量的特征信息,并与业务识别特征库中的特征进行比对。
◆将匹配结果送往识别处理模块,并标识特定网络流量。如果存在多个匹配结果,选取优先级较高的匹配结果进行标识。特定网络流量一经识别确定,该网络流量的后续连接将不再进行深度的报文检查,直接将其网络层和传输层信息与已知识别结果进行比对,提高执行效率。
◆识别处理模块将网络流量的业务识别结果存储到识别结果存储模块中,为网络流量的统计分析提供依据。
◆统计分析模块从识别结果存储模块中读取相关信息,并以曲线、饼图、柱状图或者文本的方式将识别结果信息显示,或以文件的形式输出。
◆在结果存储模块中保存的识别结果信息会输出到网络流量管理功能区,为实施网络流量管理提供依据。
目前常用、典型的业务识别技术就是我们所熟知的DPI技术和DFI技术。
(1)DPI技术
PI是深度报文检测(Deep Packet Inspection)的简称,是一种典型的业务识别技术。DPI技术之所以称为“深度”的检测技术,是相对于传统的检测技术而言的。传统的流量检测技术仅获取那些寄存在数据包网络层和传输层协议头中的基本信息,包括源/目的IP地址、源/目的传输层端口号、协议号,以及底层的连接状态等。通过这些参数很难获得足够多的业务应用信息。对于当前P2P应用、VoIP应用、IPTV应用被广泛开展的情况,传统的流量检测技术已经不能满足网络流量管理的需要了。
DPI技术对传统的流量检测技术进行了“深度”扩展,在获取数据包基本信息的同时,对多个相关数据包的应用层协议头和协议负荷进行扫描,获取寄存在应用层中的特征信息,对网络流量进行精细的检查、监控和分析。
DPI技术通常采用如下的数据包分析方法:
◆传输层端口分析。许多应用使用默认的传输层端口号,例如HTTP协议使用80端口。
◆特征字匹配分析。一些应用在应用层协议头,或者应用层负荷中的特定位置中包含特征字段,通过特征字段的识别实现数据包检查、监控和分析。
◆通信交互过程分析。对多个会话的事务交互过程进行监控分析,包括包长度、发送的包数目等,实现对网络业务的检查、监控和分析。
(2)DFI技术
DFI是深度流行为检测(Deep Flow Inspection)的简称,也是一种典型的业务识别技术。DFI技术是相对于DPl技术提出的,为了解决DPI技术的执行效率、加密流量识别和频繁升级等问题而出现的。DFI更关注于网络流量特征的通用性,因此,DFI技术并不对网络流量进行深度的报文检测,而仅通过对网络流量的状态、网络层和传输层信息、业务流持续时间、平均流速率、字节长度分布等参数的统计分析,来获取业务类型、业务状态。
两种技术的设计基本目标都是为了实现业务识别,但是两者在实现的着眼点和技术细节方面还是存在着较大区别的。从两种技术的对比情况看,两者互有优势,也互有短处,DPI技术适用于需要精细和准确识别、精细管理的环境,而DFI技术适用于需要高效识别,粗放管理的环境。
2、流量统计分析
网络流量管理的基本目标是了解网络、业务和用户资源的使用情况,找到性能瓶颈并进行精细化管理,对用户行为进行分析和控制,以及对信息安全防护。
在网络中多个层面的网络设备中集成业务识别功能,如骨干节点之间、服务提供商互联节点之间、国际出口、城域网出口和城域网接入层等,或者单独部署具备业务识别功能的网络设备对网络流量进行统计分析和趋势判断。通过流量统计分析,网络管理者能够知道当前网络中的业务流量的类型、带宽、时间和空间分布、流向等信息。
3、流量管理
将流量识别能力添加到网络流量管理中,能够帮助网络管理者对网络资源和业务资源进行带宽控制和资源调度。具备业务识别能力的网络流量管理将具备P2P应用的管理能力,通过对P2P流量的抑制来提升传统数据业务的用户体验度。具备业务识别能力的网络流量管理还能够对严重影响业务运营者收入的未经许可的业务进行抑制。通过对VoIP信令流量和媒体流量的关联检测和统计分析,通过截断媒体数据包、伪装信令报文等方式对VoIP业务进行流量管理。通过综合使用网络层、传输层和应用层检测技术,对未经许可的宽带私接用户采取中断连接、主动告警、分时控制等多种管理动作,实现对未经许可的宽带私接的流量管理。业务识别还能够帮助网络流量管理实现业务资源的调度,业务识别能够获得业务资源使用、业务状态的实时隋况。当某一业务服务器负载较大时,可以进行全局的业务资源负载均衡,平均的承担业务请求;同时也能够对用户的业务请求进行调度,决定是否继续响应用户新的业务请求,或者根据用户的优先级,优先响应高优先级用户的业务请求,提升业务运营效率。
4、其他方面
对于网络流量管理来说,在网络中的多个层面的网络设备中集成业务识别功能,或者单独部署具备业务识别功能的网络设备,和防火墙等网络安全设备协同构建一个主动的安全威胁防御体系,提升整个网络的安全防护能力。
具备业务识别能力的网络流量管理具有主动的流量特征识别分析能力,能够主动的发现诸如DDoS攻击、病毒和木马等异常流量,较好的弥补其他网络安全设备,如防火墙、入侵防护系统(IPS)和统一威胁管理(UTM)等的不足,提升其主动发现安全威胁的能力,并能够及时的向其他网络安全设备发出告警,从安全威胁源头开始就进行主动的防御。
此外,具备业务识别能力的网络流量管理还能够获取并保存网络流量的网络层信息(例如,源/目的IP地址、用户标识ID等信息),通过这些信息,网络管理者能够进行有效的安全威胁的溯源定位。
二、 常见的网络流量
当前随着网络应用的不断丰富和发展,网络流量也随之变得复杂和种类繁多起来,下面给出几种最为常见的网络流量,以方便网络管理员在实际的工作中着重对他们监测和管理:
◆HTTP流量:HTTP是互联网TCP/IP协议族中的一种应用层协议,被广泛适用于网页流量、网络下载等。HTTP协议正在取代传统文件下载的主要应用层协议FTP,此外基于HTTP的网页版邮箱也有取代传统的POP3协议的趋势。根据国外媒体报道,最近发布的一个研究报告指出,随着YouTube等视频共享网站的拉动,传统的HTTP协议的网络流量在过去四年里首次超过了P2P应用的流量。基于HTTP协议的互联网流量已经占据了全部流量的46%。排名第二的是P2P应用的流量,其占据了37%的比例。排在后面的流量分别属于新闻组(9%)、非HTTP协议的视频流媒体(3%)、网络游戏(2%),以及VOIP网络电话(1%)。
◆FTP流量:FTP是互联网中一种应用非常广泛的服务,用户通过其来从服务器获取需要的文档、资料、音频、视频等。从互联网出现的开始,它就一直是用户使用频率最高的应用服务之一,重要性仅次于HTTP和SMTP。而随着P2P应用的出现,其重要性地位虽然有所降低,但是仍然是用户们下载文件不可替代的重要应用和途径之一。
◆SMTP流量:电子邮件是整个互联网业务重要的组成部分。据统计,四分之三以上的用户上网的主要目的是收发邮件,每天有十数亿封电子邮件在全球传递。电子邮件已成为网络用户不可或缺的需要。并且,电子邮件的廉价和操作简便在给人们带来巨大便利的同时,也诱使有些人将它作为大量散发自己信息的工具,最终导致了互联网世界中垃圾邮件的泛滥。垃圾邮件问题已经极大地消耗了网络资源,并给人们带来了极大的不便。据中国互联网协会(ISC)2005年第一次反垃圾邮件状况调查显示,中国邮件用户2005年4月平均每人每天收到邮件16.8封,占收到邮件总数的60.87%。因此,SMTP流量目前占据相当大的互联网流量比重。
◆VoIP流量:2006年全球IP电话用户从1030万增长到1870万,增幅达83%。2007年VoIP通话量将达到全部通话量的75%。数据显示,PC2Phone的IP电话付费用户数量超过470万人,算上运营商IP电话服务的预定用户的话,这一数字将达到2400万。因此,互联网上VoIP的流量也是非常值得管理员关注的。
◆P2P流量:报告指出,目前网络带宽“消费大户”是P2P文件共享,在中东占据了49%,东欧地区占据了84%。从全球来看,晚上时段的网络带宽有95%被P2P占据。在所有P2P工具中,BitTorrent最受欢迎,在南欧地区,电驴处于主导地位。在P2P内容方面并未和去年发生变化,主要还是视频,最受欢迎的是最新上映的电影、色情电影和音乐。其中在中东,电子书在P2P内容中比例较高,计算机游戏在南欧地区比例较高。
◆Streaming流量:随着诸如PPLive、PPStream等视频软件的出现,视频直播和点播成为广大互联网用户观看节目和网上娱乐的最佳生活方式,因此其流量也在不断的剧增当中。并且,随着P2P技术的发展,P2P Streaming也成为今后互联网中一种非常重要的应用。
三、 网络流量捕捉:图形化工具Wireshark
1、Wireshark简介
Ethereal是一个开放源码的网络分析系统,也是目前最好的开放源码的网络协议分析器,支持Linux和windows平台。Ethereal起初由Gerald Combs开发,随后由一个松散的etheral团队组织进行维护开发。它目前所提供的强大的协议分析功能完全可以媲美商业的网络分析系统,自从1998年发布最早的0.2版本至今,大量的志愿者为ethereal添加新的协议解析器,如今ethereal已经支持五百多种协议解析。另外,网络分析系统首先依赖于一套捕捉网络数据包的函数库。这套函数库工作在网络分析系统模块的最底层。作用是从网卡取得数据包或者根据过滤规则取出数据包的子集,再转交给上层分析模块。从协议上说,这套函数库将一个数据包从链路层接收,至少将其还原至传输层以上,以供上层分析。6月8号,Ethereal的作者Gerald Coombs宣布了离开NIS的消息,因而Ethereal现改名为Wireshark。
网络分析系统首先依赖于一套捕捉网络数据包的函数库。这套函数库工作在在网络分析系统模块的最底层。作用是从网卡取得数据包或者根据过滤规则取出数据包的子集,再转交给上层分析模块。从协议上说,这套函数库将一个数据包从链路层接收,至少将其还原至传输层以上,以供上层分析。
在Linux系统中,1992年Lawrence Berkeley Lab的Steven McCanne和Van Jacobson提出了包过滤器的一种的实现,BPF(BSD Packet Filter)。Libpcap是一个基于BPF的开放源码的捕包函数库。现有的大部分Linux捕包系统都是基于这套函数库或者是在它基础上做一些针对性的改进。在window系统中,意大利人Fulvio Risso和Loris Degioanni提出并实现了Winpcap函数库,作者称之为NPF。由于NPF的主要思想就是来源于BPF,它的设计目标就是为windows系统提供一个功能强大的开发式数据包捕获平台,希望在Linux系统中的网络分析工具经过简单编译以后也可以移植到windows中,因此这两种捕包架构是非常现实的。就实现来说提供的函数调用接口也是一致的。Ethereal网络分析系统也需要一个底层的抓包平台,在Linux中是采用Libpcap函数库抓包,在windows系统中采用winpcap函数库抓包。
2、层次化的数据包协议分析方法
取得捕包函数捕回的数据包后就需要进行协议分析和协议还原工作了。由于OSI的7层协议模型,协议数据是从上到下封装后发送的。对于协议分析需要从下至上进行。首先对网络层的协议识别后进行组包还原然后脱去网络层协议头。将里面的数据交给传输层分析,这样一直进行下去直到应用层。由于网络协议种类很多,就Ethereal所识别的500多种协议来说,为了使协议和协议间层次关系明显。从而对数据流里的各个层次的协议能够逐层处理。Ethereal系统采用了协议树的方式。
图1所示就是一个简单的协议树。如果协议A的所有数据都是封装在协议B里的,那么这个协议A就是协议B是另外一个协议的儿子节点(比如图中的TCP和UDP协议就是IP协议的儿子节点)。我们将最低层的无结构数据流作为根接点。那么具有相同父节点的协议成为兄弟节点。那么这些拥有同样父协议兄弟节点协议如何互相区分了?Ethereal系统采用协议的特征字来识别。每个协议会注册自己的特征字。这些特征字给自己的子节点协议提供可以互相区分开来的标识。比如tcp协议的port字段注册后。Tcp.port=21就可以认为是ftp协议,特征字可以是协议规范定义的任何一个字段。比如ip协议就可以定义proto字段为一个特征字。
在Ethereal中注册一个协议解析器首先要指出它的父协议是什么。另外还要指出自己区别于父节点下的兄弟接点协议的特征。比如ftp协议。在Ethereal中他的父接点是tcp协议,它的特征就是tcp协议的port字段为21。这样当一个端口为21的tcp数据流来到时。首先由tcp协议注册的解析模块处理,处理完之后通过查找协议树找到自己协议下面的子协议,判断应该由那个子协议来执行,找到正确的子协议后,就转交给ftp注册的解析模块处理。这样由根节点开始一层层解析下去。
由于采用了协议树加特征字的设计,这个系统在协议解析上由了很强的扩展性,增加一个协议解析器只需要将解析函数挂到协议树的相应节点上即可。
图1 协议树简单图示
3、基于插件技术的协议分析器
所谓插件技术,就是在程序的设计开发过程中,把整个应用程序分成宿主程序和插件两个部分,宿主程序与插件能够相互通信,并且,在宿主程序不变的情况下,可以通过增减插件或修改插件来调整应用程序的功能。运用插件技术可以开发出伸缩性良好、便于维护的应用程序。它著名的应用实例有:媒体播放器winamp、微软的网络浏览器IE等。
由于现在网络协议种类繁多,为了可以随时增加新的协议分析器,一般的协议分析器都采用插件技术,这样如果需要对一个新的协议分析只需要开发编写这个协议分析器并调用注册函数在系统注册就可以使用了。通过增加插件使程序有很强的可扩展性,各个功能模块内聚。
4、安装Wireshark
Wireshark可以在http://www.wireshark.org/download.html上下载,该软件有极其方便和友好的图形用户界面,并且能够使得用户通过图形界面的配置和选择,针对多块网卡、多个协议进行显示,效果非常好。目前最新版本为:Wireshark 1.0.3。安装该软件请按照如下步骤进行:
//将下载的最新版本软件拷贝到临时文件夹
# cp wireshark-1.0.3.tar.gz /usr/local/src/
//切换到临时文件夹目录
# cd /usr/local/src/
//解压缩文件
# tar -xvf wireshark-1.0.3.tar.gz
另外,同Tcpdump一样,在编译Ethereal之前应先确定已经安装pcap库(libpcap),这是编译Wireshark时所必需的。如果该库已经安装,就可以执行下面的命令来编译并安装Wireshark:
# cd wireshark-1.0.3
# ./configure
# make
# make install
当编译并安装好Wireshark后,就可以执行“wireshark”命令来启动Wireshark。
5、使用Wireshark
(1)捕包选项
抓包是进行协议分析的第一步骤,在Wireshark中,有几个抓包的相关选项需要尤其注意(如图1和2所示):
◆Interface:指定在哪个接口(网卡)上抓包。一般情况下都是单网卡,所以使用缺省的就可以了Limit each packet: 限制每个包的大小,缺省情况不限制。
◆Capture packets in promiscuous mode:确定是否打开混杂模式。如果打开,抓取所有的数据包。一般情况下只需要监听本机收到或者发出的包,因此应该关闭这个选项。
◆Filter:过滤器。只抓取满足过滤规则的包。
◆File:如果需要将抓到的包写到文件中,在这里输入文件名称。use ring buffer:是否使用循环缓冲。缺省情况下不使用,即一直抓包。值得注意的是:循环缓冲只有在写文件的时候才有效。如果使用了循环缓冲,还需要设置文件的数目,文件多大时回卷。其他的项选择缺省的就可以了。
图1 Wireshark的捕包界面
图2 Wireshark捕包选项设置示意图
(2)协议过滤(Filter)选项
由于网络中的协议五花八门,Http、Ftp、ARP、ICMP等协议等都在抓包的范围之列,因而给协议分析工作带来了一些麻烦。为了对特定的协议进行分析统计,则可以使用Ehereal提供的Filter选项来对数据报文进行过滤,对特定的协议进行提取,再进行分析。图3(a)给出了使用Capture菜单下的Capture Filter选项进行过滤设置的示意,该软件已经提供了许多协议的Filter供用户选择使用,而用户也可以自行添加;图3(b)则显示了通过在工具栏的Filter编辑框内输入协议名称对已捕捉的包进行过滤的结果,图中显示了过滤后所得Http协议的数据包情况。用户也可以通过输入Ftp、ARP或者TCP等字段来获取相应的协议内容。
图3 协议过滤选项示意图
注意:图3(a)和3(b)所示的设置方法的不同在于:前者设置后该工具只对选取的协议进行捕包;而后者则是在所有捕获的数据包中(包括各种协议)选择用户设定的协议进行提取和显示。
(3)统计选项(statistics)
统计选项用于对过滤后的各协议类型进行统计,从而从宏观上对网络中的流量进行统计分析和全局把握。图4给出了操作的流程和显示结果。