基于多核处理器系统的局域网流量监控平台1110349068罗芥主要内容背景多核处理器转发性能的提高局域网流量统计网页监控平台的建立局域网流量分析及吞吐量测试总结Introduction随着网络流量与应用的日益增大与复杂,网络流量监控变得越发的困难与重要。传统的方式通过监听端口号对应用进行分类,伴随着许多使用动态端口和伪装在周知端口下的应用的出现,网络流量识别的比例大大降低。而基于应用层净荷特征字段的分析与分类能够监听端口的缺陷,更好地管理网络流量。基于Linux操作系统的防火墙体系netfilter/iptables及其扩展模块L7-filter,对局域网中流量进行应用层的分类,并提高其在多核操作系统的效率与吞吐量。对每个主机的流量分类信息进行处理,在网页上建立监控平台便于网络管理和用户对本机应用的监控,使局域网健康地运行。背景理解和分析网络流量特征是网络设计、发展的基础。随着因特网的迅猛发展,网络用户与流量不断增加,网络应用数量成倍增加,人们的生活几乎到了离不开网络的程度。这使得网络成了一个数据、流媒体大融合的平台,同时新的网络应用、协议的不断增加,使得网络中的流量变得越发的复杂,分析与监控也变得格外的困难。但也正是因为网络的地位越来越重要,对网络中流量分类监控也越来越有必要。对流量进行分类有助于分析网络中应用的类型和未知流量所占的比例,因此将成为网络管理与网络安全的基石,也成为越来越多人研究的热点。背景流量分类是网络流量监控与处理的基础。传统的分类方法按端口信息进行分类,一个应用对应一个端口。例如,源端口或目的端口为80的TCP流可以被认为是HTTP应用。由于这种方法的简单且效率高,被广泛适用于工业标准中。也是由于在以前网络的应用并不是很多,更重要的是当时的应用没有什么动机入侵其他应用的端口。但是随着因特网的发展、网络应用数量的增加,越来越多的应用使用动态端口、非标准的端口或者伪装在其他应用的端口下。背景文献[1]显示现今不足70%的网络流量能够被基于端口分类。基于端口分类有如下缺点:一是会被伪装在其他周知端口下或者使用没有注册的端口号的应用所逃避[2],如P2P应用为了逃避防火墙的捕捉使用不固定的端口号,而网络中P2P应用所产生的流量已经达到了50%~70%的程度。二是一些端口上的流量是混合了多种应用,并不能被单一地归为某一种应用。如80端口除了HTTP应用外还可能有Email,VoIP等应用。三是由于基于端口的分类只检测应用的端口号,一些应用如SSH等能通过隧道技术把所有应用所产生的流量都归为自身的流量。由于基于端口的分类有如上的缺陷,使得网络的流量识别比例大大的下降。因此采用一种新的方法对网络流量进行分类变得十分必要。背景随着网络应用的增多,网络用户的增加,网络中的流量必然迅速膨胀。因此为了观察网络流量的特征,对网络应用进行研究,对网络流量进行更进一步的研究。或者为了监督网络中用户应用的使用状况,控制网络中用户对应用的使用,比如减少P2P应用的使用,提高网络中其他用户的使用体验。或者是为了,用户观察自己使用的应用情况,关闭一些自己并不想打开的应用但是该应用偷偷在后台运行,也有助于用户提高自己对网络的使用体验,提高上网速度。研究目标和意义针对基于端口的分类不能很好地解决现今的网络状况,采用对应用层净荷的特殊字段进行匹配的方法能够克服基于端口分类的缺陷,很好的分析网络流量[3]。基于应用层净荷进行分类的方法首先持续跟踪连续的数据包,再对应用层的净荷对应签名(signature)进行匹配,一旦匹配成功被追踪的数据流就打上该样式对应的应用的标签。如果数据包没有匹配到就标记为未知(unknown)。这种基于应用层净荷的分类方法能够更准确地匹配网络中的流量。研究目标和意义根据基于应用层净荷的分类方法的具体应用差别并不大,本设计中使用基于Linux防火墙iptables的扩展模块L7-filter进行应用的流量统计。并且在原有版本的基础上,对原来的协议特别是针对中国用户比较常用的应用的准确性进行测试。对不能匹配到或者匹配错误现今网络流量的协议进行修改,并对一些比较常用的网络工具但是原来版本中没有包含的协议进行添加。是L7-filter的匹配更加的准确,并贴合中国用户的使用。然后再把修改后的L7-filter的规则添加在iptables防火墙上,对局域网中每一用户进行应用流量的统计。根据记录的流量对每一用户建立一个页面,可以观察访问用户自己的每个应用的流量状况。研究目标和意义本设计的主要意义是使用了基于应用层净荷的流量分类方式,对局域网的流量进行了应用层的分类,并在网页平台上统计出每个应用的流量图,对局域网中的流量情况作了简单分析。不仅是有助于局域网中的用户管理自己的应用,而且对今后对网络流量的研究提供了一个很好的平台。研究思路主要分成三大部分。首先在一台服务器上搭建起统计平台,安装上所需的模块如:brctl(网桥控制模块)、L7-filter等。当统计平台可以正常工作后,在Linux防火墙上添加L7-filter规则,对这些应用的样式文件进行测试看是否能够正常工作。找出不能正确匹配的应用,对其重复地进行数据包捕捉,根据所抓的数据包应用层净荷的特征字段修改出新的正则表达。对一些比较常用的但是没有被包含到L7-filter中的应用也进行流量的捕捉,根据应用层净荷写出正则表达式。对修改或新加的应用进行测试、修改,使其能达到比较好的准确性。对应用的添加、修改完成后,在iptables上对局域网中每个主机添加L7-filter的规则,对应用的流量进行统计。研究思路然后是对主机应用流量的统计信息行进处理,建立一个网页监控的平台。在服务器上安装apache、MRTG等软件,通过脚本程序对iptables上的流量统计进行处理,修改MRTG的配置文件使其画出每个主机上的应用的流量状况,最终在网页平台上可以对应用的流量进行监控。最后对iptables上统计到的每个主机应用的流量进行分析。在对局域网流量统计一段时间后,对应用的统计流量进行一些分析,得出一些局域网使用应用的一些特点。对多核CPU操作系统转发性能的提高局域网网络环境介绍本次设计的网络环境为一个192.168.8.0/24的局域网,局域网通过交换机连到一个透明的网桥上,再通过网桥连到路由器再连到外网。网桥使用一个安装了Linux操作系统的服务器来充当。在实验中网桥起到转发的作用,本设计中在网桥上对局域网的流量进行收集、分类。后面所有的操作也都只在网桥的Linux系统上进行。本次设计研究的对象为局域网中流向网桥的数据流和通过网关进入局域网的数据流。最终希望能够对这些捕获到的数据流进行分类,并供局域网的管理员和局域网中的用户观察自己主机的应用所产生的流量情况,合理地控制流量共享带宽,和可以及时地排查网络中产生拥塞的原因,有效地管理网络流量。实验网络环境网桥…………局域网192.168.8.0/24网关外网网桥的搭建网桥是一个二层设备,通过MAC地址与端口的对应关系来转发数据包。Brctl[4]是一个比较优秀的配置网桥的工具,它的源代码和配置方法极其简单,本设计中使用brctl来设计网桥。根据文献[5]中所讲首先下载并安装bridge-utils。然后使用的脚本(见论文)开启网桥通过这个脚本创建了一个名叫br0的网桥,并将网卡eth4和eth5加入网桥中,再打开网卡和网桥br0,局域网中的数据包就可以通过网卡eth4和eth5进行转发了。对多核操作系统转发数据包性能的改进多核CPU中断亲和性由于局域网中主机数量较多,网桥转发承受的负载较大,有必要根据网桥的多核操作系统进行转发性能的提升。网桥由于需要转发大量的数据流,时时刻刻都在进行着数据的转发,必然会导致中断的频繁发生,因此会消耗大量的CPU资源。所谓中断就是,网卡都需要和CPU有某种形式的通信以便CPU及时知道发生了什么事情,这样CPU可能就会放下手中的事情去处理应急事件,网卡等硬件设备主动打扰CPU的现象就可称为硬件中断。而在多核CPU条件下如果有办法把大量硬件中断分配给不同的CPU处理就能能很好的平衡性能。对多核CPU操作系统转发性能的提高在计算机里,中断是一种电信号,由硬件产生,并直接送到中断控制器上,然后再由中断控制器向CPU发送信号,CPU检测到该信号后,就中断当前的工作转而去处理中断。然后,处理器会通知操作系统已经产生中断,这样操作系统就会对这个中断进行适当的处理。现在来看一下中断控制器,常见的中断控制器有两种:可编程中断控制器8259A和高级可编程中断控制器(APIC)。对多核操作系统转发数据包性能的改进传统的8259A只适合单CPU的情况,现在都是多CPU多核的SMP体系,所以为了充分利用SMP体系结构、把中断传递给系统上的每个CPU以便更好实现并行和提高性能,Intel引入了高级可编程中断控制器(APIC)。光有高级可编程中断控制器的硬件支持还不够,Linux内核还必须能利用到这些硬件特质,所以只有kernel2.4以后的版本才支持把不同的硬件中断请求(IRQs)分配到特定的CPU上,这个绑定技术被称为SMPIRQAffinity。对多核操作系统转发数据包性能的改进本次设计中网桥操作系统为Linux2.6.27.50,CPU为16核。网桥工作在转发模式下,网卡eth4为发端,eth5为收端。将irqbalance服务关闭,手动调整网卡的中断至多个核心。从/etc/interrupts可以看到,每个网卡有一个主控中断,另外还有8个收中断和8个发中断,并工作于PCI-MSI-edge模式下。文献[6][7]中提出了一种可以通过改变smp_affinity的值来设置中断到某个CPU上。如命令“echo1/proc/irq/90/smp_affinity”就是把中断号为90的中断绑定到CPU0上。而具体绑定到哪个CPU是由写入smp_affinity中的数值决定的,如上面的“1”。这里的“1”实际上是个二进制的数“00000001”它代表了CPU0,而如果写入的数值为“2”它的二进制为“00000010”则代表了CPU1。各个CPU用二进制和十六进制表示就是像表2-1中所示:表2-1中断亲和分配到CPU的方式Linux系统中有自动调节中断亲和的服务irqbalance[8],它的主要功能是可以合理的调配使用各个CPU核心,特别是对于目前主流多核心的CPU,简单的说就是能够把压力均匀的分配到各个CPU核心上,对提升性能有很大的帮助。但是使用irqbalance服务时,系统由于分配机制的关系经常将多个中断分配到同一个CPU上。在网桥上如果使用irqbalance的服务,系统会将多个网卡收发中断分配到同一个CPU上,而有的CPU则会处于空闲状态,因此会降低网桥的转发性能,降低吞吐量。对多核操作系统转发数据包性能的改进可以根据上表中的十六进制值写入指定中断的smp_affinity来将该中断绑定到固定的CPU。如果想将中断同时绑定到CPU0和CPU1的话只要写入数值5就可以了,命令为“echo5/proc/irq/90/smp_affinity”。而命令“echoffffffff/proc/irq/90/smp_affinity”就可以将中断分配到所有可用的CPU上了。在本次设计中,可以将所有由于转发数据包而产生的大量中断分配到所有CPU上来增加转发的吞吐量,使每个CPU的负载均衡。在网络非常重的情况下,在往桥上把不同的网卡IRQ均衡绑定到不同的CPU上将会减轻某个CPU的负担,提高多个CPU整体处理中断的能力。修改中断亲和的性能测试测试环境为使用IXIA仪器发包端连接到网桥的接收网卡,网桥通过转发从发送网卡将数据包送到IXIA仪器的收端。IXIA可用于多种网络设备性能测试的负载生成器和分析仪,可测试的设备包括交换机、路由器、有线和无线Modem等边缘和骨干网络设备。XIA测试仪的特点是提供最大的端口密度,支持广泛的接口种类。IXIA的接口模块支持:多种接口包括10M、100M、1000M和10G的以太网接口。IXIA