五、实验方案设计及实现
5.1流量控制系统总体设计
前面章节中分析了Netfilter防火墙框架以及包选择工具Iptables,知道了在Linux内核中有一套强大的防火墙框架Netfilter。但是传统的P2P检测和控制工具主要是对通过基于数据包的端口等进行过滤,从而达到监视网络流量的目的。仅仅是对协议包的包头进行检测而缺乏对数据包内容的检测,这种检测方法的缺陷是缺少对应用层流量的分析,使对协议的分析不够全面,很多时候就很难分辨出正常的HTTP流量和P2P下载的流量区别。为此我们需要开发出一个能够应用层上对流量进行识别和分类的工具。系统的工作流程图如图4所示:
数据流 P2P分类器 (对识别出的流量打上标记) eDonkey Gnutella Fasttrack BT 其他流量 过滤和整形 数据流
图4 Netfilter在IPv4中的结构
5.2 带宽管理的实现
Linux操作系统目前广泛引用于路由设备中,流量管理是它一个重要功能∞71,由于在前面我们已经实现了P2P的流量完全禁止,我们现在就要实现将P2P流量控制在某一个范围内的确功能。为了达到这个目的,我们就必须将前面用到的Linux的内核防火墙框架与Linux的流量整形工具tc相结合,实现对网络内部的带宽管理。
5.2.1 队列规定
我们可以在队列规定当中设置一个允许的最大速率,也就是说通过固定能传输的数据的多少来对流量进行整形。流量整形时传输的速率就被控制在一个范围内,若超出范围则采取延迟或丢包的策略口。
流量管理主要由qdisc(队列规定)class(类别)和filter(过滤器)三种对象控制。
分类的队列规定主要用在多种数据流需要进行区别对待的时候。当数据包进入我们开发的分类器的时候,就被送到设置的队列规定当中。队列中的一些规定是根据整形的分类机制来确定的,数据进入分类器后,会寻找一个符合自己的队列规则。数据寻找到自己的大类之后,又会根据队列规则选择一些小类。分类器就是用来设置一些分类规则的。当所有的分类都完成的时候,也就是说网络中的数据包已经找不到更细微的队列规定的时候,数据包就会进入合适自己的队列进行流量整形。在队列中还学要对队列进行调度,这种调度主要在流量控制中用的比较多。
在本文中主要使用了两种队列规定:
HTB(Hierarchical Token Bucket,分层的令牌桶):这种队列规定主要是使用在针对不同的用途来进行分配。由于这种规定在程序使用上的函数非常少,所以配置起来相对比较简单,所以在运用上比较广泛,尤其是在流量整形中利用的非常频繁。
SF0(Stochastic Fairness Queueing,随机公平队列):随机公平队列使用的是一种公平性的算法,这种队列规定是在非常公平的环境下进行的,这种队列规定的主要优点是在计算的时候的计算机量非常少,但是相比其它的队列算法,精确度不是很高。
5.2.2 Linux流量控制机制
图5描述了Linux内核进行数据包调度的流程。 Userspace program Ip stack Egress classifier Forwardin
图5 Linux系统的流量管理机制
Qdisc1 Ingress qdise Qdisc2 Qdisc3
图中整个大方框表示整个内核。最左面的箭头表示从网络接口进入机器的数据包。可能被丢弃的过滤器的一些数据要求进入队列。如果包被发送到相应的进程和区域的流量,如果数据包经过并提交本地进程。中继器都必须送交出口。进程发送数据的出口本地分类。
在数据在网络上的流动过程中,一些排队的数据可提供队列中排队。没有任何设置,只要求疏散队列的数据包并总是在是接收。数据包队列中,我们有队列规定来处理等待发送的网路卡的核心。在上面的箭头代表的不了所有上述情况,但这一计划,如果该卡是说明这是一台机器,每个网卡有自己的进口和出口。在入口和出口处我们设置所需要的队列规定来规定队列的流向,在转发本地进程是数据不从入口流出,数据流过整个系统时会会在网卡的出口处进行流量整形。上图中没有考虑两块网卡的情况。
Linux中的队列规定是附带在网卡上的,所有在这个网卡上排队的数据都排进这个队列的规定。这样就出现了如下的两个问题: (1)仅仅只能简单的进行出口整形。
(2)由于只有整个系统上只有一个网卡,无法对全局的限速进行设置。
IMQ(Intermediate queueing device,中介队列设备)从根本上来说不是一个队列规定,但是IMQ的使用和队列规定是有着密切联系的。它把网络中的上行和下行流量进行分类控制。Iptables的IMQ处的语法是:IMQ[一todev n],n是imq设备的编号。网络上的数据会流入到中介队列设备的哪个位置,是根据数据的流向来决定的。
5.2.3 流量管理功能的设计
带宽管理设备的基本网络结构如图6所示。
Linux Box Internet
Eth0 eth1 Router
LAM
图6.网络拓扑结构
在整个系统中首先利用imq进行入口整形进行入口整形,而且需要区别对待 上行和下行这两种流量,然后利用包选择工具来给数据包打上标记,使数据能准 确无误的分类。最后,每个节点的附加到网络上的另一个节点上,然后下面的另 外一个队列到另一个队列随机公正,确保公平使用的平均带宽,以避免带宽被强
制连接。
在流量控制的工作完成之后,数据包进入网卡后首先是进行的包处理工作, 随后对流量进行整形操作,最后实现网络地址的转换。我们如果需要实现整个系 统的流量控制功能,还需要在PREROUTING链上做一些扩展。
六、结论与展望
随着网络技术的不断发展尤其是P2P技术的广泛应用,在让用户体验到飞一般的速度的同时也给网络带来了巨大的压力,加上现在P2P软件都使用了动态端口,或者是伪装P2P流量,使得传统的网络流量检测和控制工具很难对其进行检测和控制。
本文主要传统的流量检测和控制工具中存在的缺陷,对Linux系统防火墙框架Netfi l ter/Iptables进行扩展,通过包选择工具Iptables设置一些过滤规则,将流量控制完全禁止,或者是结合Linux流量整形工具,将流量控制到网络管理员所要求的范围之内。作者首先通过一些抓包软件进行抓包测试,通过得到的数据包并参照一些权威的P2P网站来P2P协议进行分析,然后通过分析和扩展Linux 2.4内核防火墙框架,设置合适的防火墙过滤规则来对P2P流量进行控制,此外还对P2P流量识别进行了测试以保证识别准确无误的进行,最后结合流量管理对P2P流量进行控制。对网络资源进行合理分配,从而达到提高网络性能的目的。本文开发的基于Linux内核模块的P2P流量控制系统,可以完成以下功能:
(1)可以比较准确的分析出网络中存在的P2P流量,统计网内各种流量的分布情况。 (2)完全禁止网络内P2P下载流量。
(3)根据网络需求P2P下载流量控制到某一范围内,保证关键性业务有足够带宽。
总之,本文开发的基于1inux内核模块的P2P流量控制系统对网络中的P2P流量提供了很好的识别及控制机制,让网络管理员可以充分非常方便的对网络内的流量进行管理,合理分配网络中资源。同时,本文也存在着一些有待改进的地方,有待在今后的工作和研究中不断的完善:
(1)本文的测试对象主要是在目前使用比较广泛的几种P2P协议及他们的客户端程序,但是随着网络技术的发展,将会有更多的新的P2P协议的诞生,同时老的P2P协议内容在不断更新,就需要加入动态的扩展。
(2)P2P协议发展趋势是采用加密和SSL传输数据或文件。本文的识别方法对于加密后的协议在识别上存在一定的困难,如何对加密后的数据包进行识别,是以后需要解决的问题。
(3)本文开发的P2P流量控制系统没有一个方便用户配置的图形用户接口,用户接口是采用的是命令行方式,今后应该开发出一个图形用户接口,能够使非专业的普通用户使用起来更加方便。
在今后的工作中,除了对上述已经完成的功能做进一步加强之外,还需要对完善整个系统中不足的地方,将整个系统的功能和性能上做到进一步的优化。
附录A 参考文献
[1]程学旗,余志华,陆天波等.P2P技术与信息安全[J].中国科学院计算技术研究所. [2]李晓峰,张玉清,李星.Linux 2.4内核防火墙底层结构分析[J].计算机工程与应用。2004.138—144
[3]孔彬,徐良贤.BitTorrent原理分析及改进[J].计算机工程,2004(S1).
[4]杨刚,陈蜀宇.Linux中基于Netfilter/Iptables的防火墙研究[J].计算机工程与设计,2007(17). [5] 邱桔,韦理丽.Linux下包过滤防火墙的设计与实现.计算机工程与设计[J],2006(13). [6] 邹玲,石坚.现代IP网络QoS路由技术[J].计算机科学,2002(04). [7]林风,LINUX2.4.X网络安全框架[EB/0L].
[8] 李惠娟,王汝传,任勋益.基于Netfilter的数据包捕获技术研究[J].计算机科学,2007(06).
[9] 陆国栋.对网络OoS中拥塞控制的研究[J].电信科学,2007(05).