一、 网络流量管理的范畴
近十几年来,互联网已经成为越来越重要的需求。据统计,互联网目前已成为人类社会最重要的信息基础设施,占人类信息交流的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。安装该软件请按照如下步骤进行:
|
另外,同Tcpdump一样,在编译Ethereal之前应先确定已经安装pcap库(libpcap),这是编译Wireshark时所必需的。如果该库已经安装,就可以执行下面的命令来编译并安装Wireshark:
|
当编译并安装好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给出了操作的流程和显示结果。
图4 统计选项示意图
四、 网络流量捕捉:命令行工具tcpdump
1、tcpdump简介
tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。tcpdump就是一种免费的网络分析工具,尤其是它提供了源代码,公开了接口,因此具备很强的可扩展性,对于网络维护和入侵者都是非常有用的工具。tcpdump存在于基本的Linux系统中,由于它需要将网络界面设置为混杂模式,普通用户不能正常执行,但具备root权限的用户可以直接执行它来获取网络上的信息。因此系统中存在网络分析工具主要不是对本机安全的威胁,而是对网络上的其他计算机的安全存在威胁。另外,由于其相对于Wireshark来说,没有非常详细的用户界面,所以非常适合于在终端上使用,网管员可以通过常见的命令行来进行流量捕捉和过滤等操作,所以非常方便,这也是它一直广泛为网络管理员欢迎和使用的原因。
2、 安装tcpdump
在linux下tcpdump的安装十分简单,一般是以源程序的形式安装。其实,Linux一个最大的诱人之处就是在她上面有很多软件是提供源程序的,人们可以修改源程序来满足自己的特殊的需要。所以我特别建议朋友们都采取这种源程序的安装方法。最新的tcpdump的源代码可以在网站http://www.tcpdump.org/上即时获得。
在源程序的安装方式中,我们首先要取得tcpdump的源程序分发包。目前,该源程序包的最新版本为:tcpdump-4.0.0.tar.gz,安装的具体过程如下所示:
(1)解压缩源代码包
#tar xvfz tcpdump-4.0.0.tar.gz |
(2)做好编译源程序前的准备活动
在编译源程序之前,需要已经确定库文件libpcap已经安装完毕,这个库文件是tcpdump软件所需的库文件。同样,你同时还要有一个标准的c语言编译器。在linux下标准的c 语言编译器一般是gcc。在tcpdump的源程序目录中。有一个文件是Makefile.in,configure命令就是从Makefile.in文件中自动产生Makefile文件。在Makefile.in文件中,可以根据系统的配置来修改BINDEST和MANDEST这两个宏定义,缺省值如下:
|
第一个宏值表明安装tcpdump的二进制文件的路径名,第二个表明tcpdump的man帮助页的路径名,用户可以修改它们来满足系统的需求。
(3)编译源程序
使用源程序目录中的configure脚本,它从系统中读出各种所需的属性。并且根据Makefile.in文件自动生成Makefile文件,以便编译使用。make 命令则根据Makefile文件中的规则编译tcpdump的源程序。使用make install命令安装编译好的tcpdump的二进制文件。
具体的编译步骤,如下命令所示:
|
3、 使用tcpdump
普通情况下,直接启动tcpdump将监视第一个网络界面上所有流过的数据包。如下命令所示:
tcpdump支持相当多的不同参数,如使用-i参数指定tcpdump监听的网络界面,这在计算机具有多个网络界面时非常有用,使用-c参数指定要监听的数据包数量,使用-w参数指定将监听到的数据包写入文件中保存,等等。
然而更复杂的tcpdump参数是用于过滤目的,这是因为网络中流量很大,如果不加分辨将所有的数据包都截留下来,数据量太大,反而不容易发现需要的数据包。使用这些参数定义的过滤规则可以截留特定的数据包,以缩小目标,才能更好的分析网络中存在的问题。tcpdump使用参数指定要监视数据包的类型、地址、端口等,根据具体的网络问题,充分利用这些过滤规则就能达到迅速定位故障的目的。请使用man tcpdump查看这些过滤规则的具体用法。
(1)tcpdump的选项介绍
tcpdump的选项非常多,下面给出一些常用的命令选项供大家使用时参考:
a:将网络地址和广播地址转变成名字;
-d:将匹配信息包的代码以人们能够理解的汇编格式给出
-dd:将匹配信息包的代码以c语言程序段的格式给出;
-ddd:将匹配信息包的代码以十进制的形式给出;
-e:在输出行打印出数据链路层的头部信息;
-f:将外部的Internet地址以数字的形式打印出来;
-l:使标准输出变为缓冲行形式;
-n:不把网络地址转换成名字;
-t:在输出的每一行不打印时间戳;
-v:输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息;
-vv:输出详细的报文信息;
-c:在收到指定的包的数目后,tcpdump就会停止;
-F:从指定的文件中读取表达式,忽略其它的表达式;
-i:指定监听的网络接口;
-r:从指定的文件中读取包(这些包一般通过-w选项产生);
-w:直接将包写入文件中,并不分析和打印出来;
-T:将监听到的包直接解释为指定的类型的报文,常见的类型有rpc (远程过程调用)和snmp(简单网络管理协议;)
(2)tcpdump的表达式介绍
表达式是一个正则表达式,tcpdump利用它作为过滤报文的条件,如果一个报文满足表达式的条件,则这个报文将会被捕获。如果没有给出任何条件,则网络上所有的信息包将会被截获。在表达式中一般如下几种类型的关键字。
一种是关于类型的关键字,主要包括host,net,port, 例如 host 211.78.3.2,指明 211.78.3.2是一台主机,net 210.0.0.0 指明 210.0.0.0是一个网络地址,port 25指明端口号是25。如果没有指定类型,缺省的类型是host。
第二种是确定传输方向的关键字,主要包括src , dst ,dst or src, dst and src ,这些关键字指明了传输的方向。举例说明,src 211.78.3.2 ,指明ip包中源地址是211.78.3.2 , dst net 210.0.0.0 指明目的网络地址是210.0.0.0。如果没有指明方向关键字,则缺省是src or dst关键字。
第三种是协议的关键字,主要包括fddi,ip,arp,rarp,tcp,udp等类型。Fddi指明是在FDDI(分布式光纤数据接口网络)上的特定的网络协议,实际上它是"ether"的别名,fddi和ether具有类似的源地址和目的地址,所以可以将fddi协议包当作ether的包进行处理和分析。其他的几个关键字就是指明了监听的包的协议内容。如果没有指定任何协议,则tcpdump将会监听所有协议的信息包。除了这三种类型的关键字之外,其他重要的关键字如下:gateway, broadcast,less,greater,还有三种逻辑运算,取非运算是 'not ' '! ', 与运算是'and','&&';或运算是'or' ,'││';这些关键字可以组合起来构成强大的组合条件来满足人们的需要,下面举几个例子来进行详细说明:
a) 截获所有211.78.3.2的主机收到的和发出的所有的数据包:
#tcpdump host 211.78.3.2 |
b) 截获主机211.78.3.2和主机211.78.3.3或211.78.3.4的通信,使用命令:
#tcpdump host 211.78.3.2 and \ (211.78.3.2 or 211.78.3.4 \) |
c) 获取主机211.78.3.2除了和主机211.78.3.6之外所有主机通信的ip包,使用命令:
#tcpdump ip host 211.78.3.2 and ! 211.78.3.6 |
d) 获取主机211.78.3.1接收或发出的telnet包,使用如下命令:
#tcpdump tcp port 23 host 211.78.3.1 |
(3)查看tcpdump的输出结果
由于tcpdump的捕包功能强大,因而其输出也是非常丰富的,下面我们介绍几种典型的tcpdump命令的输出信息。
a) 查看数据链路层头信息
使用如下命令
#tcpdump --e host patterson |
patterson是一台装有linux的主机,其MAC地址是0:58:46:32:EF:AF,S_Server是一台装有SOLARIC的SUN工作站,它的MAC地址是7:43:25:98:6E:AF;上一条命令的输出结果如下所示:
|
分析:23:49:35是显示的时间,102598是ID号,eth0 <表示从网络接口eth0 接受该数据包,eth0 >表示从网络接口设备发送数据包, 7:43:25:98:6e:af是主机S_Server的MAC地址,它表明是从源地址S_Server发来的数据包. 0:58:46:32:ef:af是主机PATTERSON的MAC地址,表示该数据包的目的地址是PATTERSON . ip 是表明该数据包是IP数据包,60 是数据包的长度, S_Server.33357 > patterson.telnet 表明该数据包是从主机S_Server的33357端口发往主机PATTERSON的TELNET(23)端口. ack 22535 表明对序列号是222535的包进行响应. win 8760表明发送窗口的大小是8760.
b) ARP包的tcpdump输出信息
使用如下命令
#tcpdump arp |
得到的输出结果是:
|
分析: 23:52:42是时间戳, 203783是ID号, eth0 >表明从主机发出该数据包, arp表明是ARP请求包, who-has route tell patterson表明是主机patterson请求主机ROUTE的MAC地址。0:58:46:32:ef:af是主机patterson的MAC地址。
c) TCP包的输出信息
src > dst: flags data-seqno ack window urgent options |
src > dst:表明从源地址到目的地址,flags是TCP包中的标志信息,S是SYN标志, F(FIN), P (PUSH) , R (RST),"." (没有标记); data-seqno是数据包中的数据的顺序号,ack是下次期望的顺序号,window是接收缓存的窗口大小,urgent表明数据包中是否有紧急指针.Options是选项.
d) UDP包的输出信息
用tcpdump捕获的UDP包的一般输出信息是:
route.port1 > patterson.port2: udp length |
route.port1 > patterson.port2: udp length
UDP十分简单,上面的输出行表明从主机ROUTE的port1端口发出的一个UDP数据包到主机patterson的port2端口,类型是UDP,包的长度是length。
五、 网络流量分析-NTOP
1、NTOP介绍及其主要特点
MRTG基于SNMP协议获取信息,对于端口的流量,MRTG能提供精确统计,但对于3层以上的信息则无从得知了。而这正是NTOP的强项。NTOP能够显示网络的使用情况。它能够显示正在使用网络的主机而且能报告每个主机发送和接收的流量的信息。NTOP能作为一个前端数据收集器工作(sFlowand/or netFlow),或者作为一个单独的既能收集又能显示的程序工作。看NTOP收集的信息,你需要一个浏览器。NTOP工作在第二层和第三层,默认使用MAC地址和IP地址。NTOP能把两者关联起来,这样就能够在网络活动图示里面同时显示ip和非ip流量(例如:arp和rarp)。NTOP和MRTG相比相比它的安装配置比较简单。目前市场上可网管型的交换机、路由器都支持SNMP协议,NTOP支持简单网络管理协议所以可以进行网络流量监控。NTOP几乎可以监测网络上的所有协议: TCP/UDP/ICMP、(R)ARP、IPX、Telnet、DLC、Decnet、DHCP-BOOTP、AppleTalk、Netbios、TCP/UDP、FTP、HTTP、DNS、Telnet、SMTP/POP/IMAP、SNMP、NNTP、NFS、X11、SSH和基于P2P技术的协议eDonkey, Overnet, Bittorrent, Gnutella,Kazaa等等。
NTOP工具与tcpdump或ethereal工具有着极大的差异,它主要是提供网络报文的统计数据,而不是报文的内容。此外,NTOP不需要使用Web服务器,它自身就支持HTTP协议。首先,它提供了一种快速容易的方法来得到网络活动的准确信息并且不使用网络探测或侦听设备。在大多数情况下,网络探测器对追踪网络故障是必需的。但是,在某些情况下,时间是很宝贵的,那么在因为探测器正被使用于监测其他设备而无法获得时,就可以使用NTOP工具。其次,在某些给定的网络配置下,不可能与探测器连接,比如一对通过WAN互连的UNIX系统。在这种情况下,当使用探测器可能很困难时,如果可能,用户应使用NTOP工具。
一般说来,NTOP主要提供以下一些功能:
◆自动从网络中识别有用的信息
◆将截获的数据包转换成易于识别的格式
◆对网络环境中通信失败的情况进行分析
◆探测网络环境中的通信瓶颈
◆记录网络通信的时间和过程
它可以通过分析网络流量来确定网络上存在的各种问题;也可以用来判断是否有黑客正在攻击网络系统;还可以很方便地显示出特定的网络协议、占用大量带宽的主机、各次通信的目标主机、数据包的发送时间、传递数据包的延时等详细信息。通过了解这些信息,网管员可以对故障做出及时的响应,对网络进行相应的优化调整,以保证网络运行的效率和安全。
2、安装NTOP
和MRTG相比,NTOP的安装配置更简单,可以不使用Apache服务器。将NTOP安装在网管工作站上,监测中、小Linux异构网络的网络性能非常方便。
在安装NTOP之前,需要首先到http://downloads.sourceforge.net/NTOP/NTOP-3.3.8.tar.gz下载NTOP最新的源代码,再到ftp://ftp.rediris.es/sites/ftp.redh...6.2-12.i386.rpm下载相关库函数模块libpcap。注意:必须先安装libpcap软件包后才能安装NTOP,具体的安装步骤如下所示:
(1)安装libpcap抓包软件包
#rpm -ivh libpcap-0.6.2-12.i386.rpm |
(2)解压NTOP包
#tar zxvf NTOP-3.3.8.tar.gz #cd NTOP-3.3.8 |
(3)生成Makefile文件
#./configure |
(4)配置NTOP时,系统会提示先编译gd和zlib模块。编译完gd和zlib,再回到NTOP目录下重新编译、安装:
|
(5)建立NTOP软件需要的log目录存储日志:
#mkdir /var/log/NTOP/ |
(6)以上都完成后,就可以启动NTOP了
#NTOP -P /var/log/NTOP/ -u nobody & |
3、使用NTOP
NTOP支持简单网络管理协议(Simple Network Management Protocol,SNMP),并把PNG格式的图形以HTML的方式显示出来,便于网管员对所监控的网络设备(交换机、路由器等)进行管理。
打开浏览器,在地址栏输入http://host_ip:3000(“IP”就是安装NTOP的那台网管工作站的IP地址),即可打开NTOP管理界面。第一次运行时会要求输入管理员的密码,预设密码是“admin”,第二次启动就不用再输入了。
通过使用NTOP,我们可以在浏览器界面下看到许多有关网络流量的统计和分析信息,下面介绍几种最重要的统计和分析功能:
(1)查看网络整体流量(Global Traffic)
网络管理员在进行网络流量分析的初始,考虑的大多是宏观的网络整体流量情况,因此,NTOP首先提供了查看网络整体流量的功能。在NTOP的浏览器界面中,查看网络整体流量用鼠标点击“Stats”选项卡,然后单击“Traffic”选项。网络流量会明细表格的形式显示出来,如图5所示。另外,图6和图7分别向网络管理员显示了网络流量中协议的分布整体情况,以及最常见的传输层协议TCP和UDP的分布情况,这些可以为网管人员的统计、分析和审核工作提供强有力的参考依据。
图5 Global Traffic Statistics示意图
图6 Global Protocol Distribution示意图
图7 Global TCP/UDP Protocol Distribution示意图
(2)查看主机流量
网络管理员在查看了网络整体流量信息的前提下,第二步一般是进一步分析网络中主机的流量情况,从而确定网络中的用户行为,从而进行安全审计、流量限制等方面的工作。在NTOP中,如果想查看具体节点计算机的网络流量,用鼠标单击“IP Traffic”选项卡,然后单击“Host”选项即可:
◆监测主机使用的网络协议:如图8所示,在图中网络管理员可以清楚地看到网络中的每一台主机针对FTP、HTTP、DNS等主要网络协议的使用情况,包括主机的IP地址,具体流量等;
图8 Network Traffic示意图
◆查看网络流量的方向:NTOP可以把网络主机中的详细出入网络的流量统计和显示出来。这使得网络管理员可以更加清楚地了解网络中主机用户的网络行为,为后续的追踪、审计和流量限制提供了重要信息,如图9所示。
图9 Remote t Local IP Traffic示意图
◆查看网络主机数量和基本统计:NTOP还具有Scanner(扫描器)的功能,它能迅速地扫描到网络中的所有活动主机,如图10所示
图10 Host Statistics示意图
总而言之,通过上面的分类讲解我们不难看到,通过使用NTOP,我们能够对所有进出网络的数据做到了如指掌,并且能够进行非常详细的网络流量分析工作。因此,不管是用来监测网络,还是用来制作网络情况报告,NTOP都是非常优秀的工具。
六、 网络流量限制-TC技术
1、TC(traffic control)技术原理
Linux从kernel 2.1.105开始支持QoS(服务质量),不过,需要重新编译内核。具体步骤为:
(1) 运行 make config命令时,将EXPERIMENTAL_OPTIONS选项设置成y;
(2) 将 Class Based Queueing (CBQ)、Token Bucket Flow、Traffic Shapers选项设置为y;
(3) 运行make dep; make clean; make bzimage,生成新的内核。
在Linux操作系统中流量控制器(TC)主要是在输出端口处建立一个队列进行流量控制,控制的方式是基于路由,亦即基于目的IP地址或目的子网的网络号的流量控制。流量控制器TC,其基本的功能模块为队列、分类和过滤器。Linux内核中支持的队列有,Class Based Queue ,Token Bucket Flow ,CSZ ,First In First Out ,Priority ,TEQL ,SFQ ,ATM ,RED。由于目前网络流量种类繁多,网络管理员在管理时通常都采用分类的方式进行,因此,本专题所介绍的队列与分类都是基于CBQ(Class Based Queue)的,而过滤器是基于路由(Route)的,其他的分类方式和过滤器使用方式请参看相关的技术文献。
配置和使用流量控制器TC,主要分以下几个方面:分别为建立队列、建立分类、建立过滤器和建立路由,另外还需要对现有的队列、分类、过滤器和路由进行监视。
其基本使用步骤为:
(1)针对网络物理设备绑定一个CBQ队列;
(2)在该队列上建立分类;
(3)为每一分类建立一个基于路由的过滤器;
(4)最后与过滤器相配合,建立特定的路由表
2、使用Linux TC进行流量控制实例
实例条件描述:
在一个局域网中(如图11所示),我们设定流量控制器上的以太网卡(设备名为eth0)的IP地址为10.172.4.66,在其上建立一个CBQ队列。假设包的平均大小为1K字节,包间隔发送单元的大小为8字节,可接收冲突的发送最长包数目为20字节。
假如有三种类型的流量需要控制:
(1)发往主机1的流量,其IP地址设定为10.172.4.138。其流量带宽控制在500Mbit,优先级为2;
(2)是发往主机2的,其IP地址为10.172.4.141。其流量带宽控制在200Mbit,优先级为1;
(3)是发往子网1的,其子网号为10.172.4.0,子网掩码为255.255.255.0。流量带宽控制在300Mbit,优先级为6。
那么,根据上面的实例条件,我们可以采用如下的步骤进行TC配置和控制:
图11 Linux TC流量控制示意图
1.绑定CBQ队列
一般情况下,针对一个网卡只需建立一个队列:
将一个cbq队列绑定到网络物理设备eth0上,其编号为1:0;网络物理设备eth0的实际带宽为1000Mbit,包的平均大小为1000字节;包间隔发送单元的大小为8字节,最小传输包大小为64字节。
#tc qdisc add dev eth0 root handle 1: cbq bandwidth 1000Mbit avpkt 1000 cell 8 mpu 64 |
2. 为队列建立分类
分类建立在队列之上。一般情况下,针对一个队列需建立一个根分类,然后再在其上建立子分类。对于分类,按其分类的编号顺序起作用,编号小的优先;一旦符合某个分类匹配规则,通过该分类发送数据包,则其后的分类不再起作用。
(1)创建根分类1:1;分配带宽为1000Mbit,优先级别为8。
|
该队列的最大可用带宽为1000Mbit,实际分配的带宽为1000Mbit,可接收冲突的发送最长包数目为20字节;最大传输单元加MAC头的大小为1514字节,优先级别为8,包的平均大小为1000字节,包间隔发送单元的大小为8字节,相应于实际带宽的加权速率为100Mbit。
(2)创建分类1:2,其父分类为1:1,分配带宽为500Mbit,优先级别为2。
|
该队列的最大可用带宽为1000Mbit,实际分配的带宽为500Mbit,可接收冲突的发送最长包数目为20字节;最大传输单元加MAC头的大小为1514字节,优先级别为1,包的平均大小为1000字节,包间隔发送单元的大小为8字节,相应于实际带宽的加权速率为50Mbit,分类的分离点为1:0,且不可借用未使用带宽。
(3)创建分类1:3,其父分类为1:1,分配带宽为200Mbit,优先级别为1。
|
该队列的最大可用带宽为1000Mbit,实际分配的带宽为200Mbit,可接收冲突的发送最长包数目为20字节;最大传输单元加MAC头的大小为1514字节,优先级别为2,包的平均大小为1000字节,包间隔发送单元的大小为8字节,相应于实际带宽的加权速率为20Mbit,分类的分离点为1:0。
4)创建分类1:4,其父分类为1:1,分配带宽为300Mbit,优先级别为6。
|
该队列的最大可用带宽为1000Mbit,实际分配的带宽为300Mbit,可接收冲突的发送最长包数目为20字节;最大传输单元加MAC头的大小为1514字节,优先级别为1,包的平均大小为1000字节,包间隔发送单元的大小为8字节,相应于实际带宽的加权速率为30Mbit,分类的分离点为1:0。
3. 建立过滤器
过滤器主要服务于分类。一般只需针对根分类提供一个过滤器,然后为每个子分类提供路由映射。
(1)应用路由分类器到cbq队列的根,父分类编号为1:0;过滤协议为ip,优先级别为100,过滤器为基于路由表。
#tc filter add dev eth0 parent 1:0 protocol ip prio 100 route |
(2)建立路由映射分类1:2, 1:3, 1:4
#ip route add 10.172.4.138 dev eth0 via 10.172.4.66 realm 2 |
4. 建立与过滤器对应的路由
该路由是与前面所建立的路由映射一一对应。
1) 发往主机10.172.4.138的数据包通过分类2转发(分类2的速率500Mbit)
#ip route add 10.172.4.138 dev eth0 via 10.172.4.66 realm 2 |
2) 发往主机10.172.4.30的数据包通过分类3转发(分类3的速率200Mbit)
#ip route add 10.172.4.30 dev eth0 via 10.172.4.66 realm 3 |
3)发往子网10.172.4.0/24的数据包通过分类4转发(分类4的速率300Mbit)
#ip route add 10.172.4.0/24 dev eth0 via 10.172.4.66 realm 4 |
在配置路由时特别值得注意的是:一般对于流量控制器所直接连接的网段建议使用IP主机地址流量控制限制,不要使用子网流量控制限制。如一定需要对直连子网使用子网流量控制限制,则在建立该子网的路由映射前,需将原先由系统建立的路由删除,才可完成相应步骤。
5. 对上述建立的机制进行查看
主要包括对现有队列、分类、过滤器和路由的状况进行查看。
(1)显示队列的状况
简单显示指定设备(这里为eth0)的队列状况
|
详细显示指定设备(这里为eth0)的队列状况
|
这里主要显示了通过该队列发送了13232个数据包,数据流量为7646731个字节,丢弃的包数目为0,超过速率限制的包数目为0。
(2)显示分类的状况
简单显示指定设备(这里为eth0)的分类状况
|
详细显示指定设备(这里为eth0)的分类状况
|
这里主要显示了通过不同分类发送的数据包,数据流量,丢弃的包数目,超过速率限制的包数目等等。其中根分类(class cbq 1:0)的状况应与队列的状况类似。
例如,分类class cbq 1:4发送了9354个数据包,数据流量为5934679个字节,丢弃的包数目为0,超过速率限制的包数目为0。
(3)显示过滤器的状况
|
这里flowid 1:2代表分类class cbq 1:2,to 2代表通过路由2发送。
(4)显示现有路由的状况
|
6. 队列、分类、过滤器及路由维护
上面我们通过一个完整的例子示意了使用Linux的TC进行流量控制的全过程。不难看出,该技术主要包括如上5步。而在日常的网络管理过程中,网管员还需要对TC的队列、分类、过滤器和路由进行相应的增添、修改和删除等操作,以保证流量控制能够因时、因地、因应用制宜。可能用到的相应的命令如下所示:
◆tc class add命令:添加分类;
◆tc class change命令:修改分类;
◆tc filter add命令:添加过滤器;
◆tc filter change命令:修改过滤器;
◆tc filter del命令:删除过滤器;
◆ip route add命令:添加与过滤器对应的路由;
◆ip route change命令:修改与过滤器对应的路由;
◆ip route del命令:删除与过滤器对应的路由。
具体的用法和例子在本专题中不再一一给出,请参看详细的技术文献对照使用。
七、 网络流量管理的策略
随着网络流量的不断增长以及网络应用的日趋纷繁芜杂化,我们不难看到,简单的无限制的增加网络带宽是不能解决网络流量的根本问题的。我们需要对网络流量进行管理,从而保证网络的健康和网络应用的正常服务。在网络流量管理的过程中,我们首要的问题就要明确网络管理目标。在网络流量管理中,我们需要牢记4个目标
◆首先,我们要了解网络流量的使用情况;
◆其次,要找到优化网络性能的途径;
◆第三,要通过网络管理技术来提升网络效能;
◆最后,还需要做好网络流量信息安全方面的防护工作。
具体说来,要达到上述四个目标,网络管理员们可以通过有效的分类方式非常明确的知道我们需要的带宽到底哪些是实际使用的。网络流量管理的第二个目标是找到网络性能的瓶颈。网络性能很重要的一个方面是吞吐量,这是网络能够传输的最大数据量,还有延迟等。第三,通过本专题所介绍的流量监控及控制软件可以高效地提升网络性能,从而满足不同的网络应用需求。最后,网管们还可以综合运用入侵检测系统(IDS)、防火墙(FireWall)、统一威胁管理(UTM)设备来对网络流量进行信息安全方面的防护工作。当然,信息安全方面的工作不是本专题的介绍范畴,在这里不作过多介绍。
在日常的网络流量管理中,为了有效实现网络管理4个目标,我们需要采取相应的步骤。这个步骤分别是:网络流量捕捉和分类、网络流量监视(统计和分析)和控制策略。
◆网络流量捕捉和分类:他是进行网络流量管理的第一步。只有通过设置捕捉点,对网络流量进行捕捉和分类,才能进行后续的分析和控制工作。这里特别需要强调的是,网络流量分类可以非常宏观化,也可以细化。比如TCP、UDP、ICMP等等的分类就比较宏观,而HTTP、FTP甚至是诸如Kazza、Skype等P2P流量的分类和识别就比较细化了。本专题介绍的Wireshark和tcpdump软件目前着重的是宏观流量的捕捉和分类,具体细化的内容管理员可以参看相关的资料获得。
◆网络流量监视(分析):监视步骤用来显示流量的运行状况,帮助找出问题所在和执行相应的管理策略。应用程序和网络管理能够收集分类、展示和收集信息,包括带宽利用率、活跃的主机和网络效率以及对活跃的应用程序。我们的设备能够跟踪平均和高信息的流量,识别最大的用户和应用程序,将网络流量定位到不同的领域,从应用的角度监视网络流量,分析网络带宽明确的关键问题所在。用统计报表来进行表现。该目标可以采用本专题所介绍的NTOP可视化分析管理工具来协助网络管理员在实际工作中实现。
◆控制策略:通过网络流量分析后,接下来根据优先级别分配带宽资源。分配的依据可以根据主机、应用等等,特别需要考虑的是注意将消耗资源的P2P程序或者音频视频下载等进行滞后考虑。用户们可以根据本专题所介绍的TC工具来进行和实现一个完整的分类监视和控制网络流量,这样,我们就可以将网络流量有效管理起来,将原来无序的网络流量变得有序起来。