基于Linux内核扩展模块的P2P流量控制研究.docx
- 文档编号:10450527
- 上传时间:2023-02-11
- 格式:DOCX
- 页数:21
- 大小:145.82KB
基于Linux内核扩展模块的P2P流量控制研究.docx
《基于Linux内核扩展模块的P2P流量控制研究.docx》由会员分享,可在线阅读,更多相关《基于Linux内核扩展模块的P2P流量控制研究.docx(21页珍藏版)》请在冰豆网上搜索。
基于Linux内核扩展模块的P2P流量控制研究
目录
一、摘要
二、P2P概述
2.1P2P定义说明
2.2P2P特点说明
2.3相关概念
三、P2P网络及协议分析与开发背景
3.1P2P主要网络模型
3.2常见P2P协议分析
3.3开发背景及需求分析
四、实现条件及系统解决方案
4.1Linux防火墙说明
4.2Netfilter工具分析
4.3包选择工具IptabIes说明
五、实验方案设计及实现
5.1流量控制系统总体设计
5.2带宽管理的实现
六、结论与展望
附录A 参考文献
一.文献摘要:
为了减少P2P流量对网络带宽造成的影响,合理分配和利用网络资源,更好地保障网络QoS,准确检测和控制P2P流量,提出一种基于Linux系统的P2P流量检测和控制的解决方案,通过扩展Netfilter/Iptables框架,根据特征码识别P2P连接,和LinuxQoS工具一起使用以限制P2P的带宽占用,避免了P2P等下载软件和娱乐软件无限制地占用带宽资源,才可以更好地保障网络的Qos。
关键词
P2P;包过滤;Netfilter/iptables;QoS;TC
二、P2P协议分析
2.1P2P定义说明
P2P(Peertopeer)是一种比较新的网络技术,被称为一种“点对点”的对等网络技术。
在传统的网络结构当中采用的是客户端/服务器(C/S)模型,在这种模型中有一个中心服务器,主要用来提供服务,网络拓扑中的所有网络节点在获取服务的时候都必须要通过这个中心服务器来获取服务。
而在P2P的网络结构中取消了传统意义上中央服务器节点,每个节点在网络中既可以充当服务器,又可以充当客户端,也就是说它们既可以像传统的服务器一样提供服务,也可以像普通的节点一样请求服务。
所有网络中的节点都是处于一个对等的位置,每个网络节点在P2P网络中都称为一个对等点(peer)u1。
P2P网络的节点之间可以直接交换资源或者是服务而不必通过传统网络的服务器,P2P网络模型的扩展性非常好。
P2P网络模型的出现为网络的发展以及网络上一些带宽需求较高的服务提供了保障。
2.2P2P的特点说明
P2P网络模型与其它传统的网络模型相比具有以下特点:
(1)分散化
P2P网络中由于没有传统意义上的服务器对网络上的资源集中进行管理,网络上的资源和服务都是分布在各个节点上的。
虽然说一些索引和查找信息还是必须有中心服务器的参与,但是节点之间进行信息的交换是不必通过节点而是在节点之间直接进行的。
这样就降低了对集中式服务器的资源和性能要求,避免了由于服务器的介入而引起的瓶颈。
(2)可扩展性
在传统的客户端服务器架构中,由于服务器在整个网络中所起到的作用非常重要,服务器上的资源限制了系统能容纳的用户数量和提供服务的能力,于是需要提高服务器的性能以及加大网络带宽,甚至会使用到集群等技术来保证服务器端的性能。
在折中结构下,服务器端的大量开销限制了系统规模的扩展。
随着网络中用户的不断增加,对服务的需求也随之在不断加大,整个系统的资源和服务能力也应该相应的加大,才能使用户的需求得到满足。
由于在混合的P2P结构中,没有一个传统的服务器端,所以大大减少了对服务器的依赖,可以方便的连接到各个用户,大部分的处理都在节点之间进行,整个系统是基本上不存在瓶颈,所以有很大的扩展空间。
(3)健壮性
由于传统的网络架构采用的是客户端/服务器模型,中心服务器在折中结构中起的作用非常的关键,但是由于网络上总是会出现一些异常的情况,例如网络中断、网络拥塞、节点失效等等,这些异常情况不可避免的为网络的正常运行带来一些问题,在很大程度上影响到网络的稳定性和持续性,一旦中心服务器出现异常给用户带来了很大的不便。
而在P2P架构中是没有传统意义上的中心服务器的,各个节点在充当客户端的同时也充当着服务器的角色,当其中一个或者几个节点遭到破坏的时候对其它节点的影响是非常小的,当其中一个节点出现问题是P2P网络就会自己调整其网络拓扑结构,使得网络能够正常运行。
(4)隐私性
随着网络技术的不断发展,网络上的隐私问题现在越来越受到人们的关注,如今在网络上要获取别人的隐私也变的越来越容易。
网络上的攻击者通过对网络用户的流量特征的监控,获取IP地址,而且现在一些跟踪软件可以非常容易的就截取到用户的个人信息。
在P2P网络中,由于没有集中的服务器,信息的传输是直接经过节点而不必经过中心服务器的,这样就是得用户的信息被跟踪和截取的可能性大大降低。
在现在的网络中,大多数是通过中继转发的技术来将通信的参与者隐藏在网络实体当中的,这一技术对中继节点的依赖性较强。
在P2P架构的网络中,所有的节点都可以提供中继转发功能,使得通信机制的可靠性和灵活性大大的提高,也能够很好的保护用户的隐私。
(5)高性能
随着计算机技术的不断发展,性能越来越受到重视,无论是个人计算机的硬件和软件的性能还是网络的性能都在高速的增长。
现在的互联网中普通用户的节点接如到网络中后,仅仅只充当了客户端,也就是说只是做了一个消费者,而不具备一个提供信息的功能,这样对于这些游离于互联网的边缘的边际节点来说,确实是一种极大的浪费。
P2P架构的网络可以将存储信息和任务都分布到这些边际节点上,充分有效的利用网络中这些所谓的普通节点,利用这些普通节点闲置节点的存储能力和计算能力达到海量存储和快速计算的目的,这样做也恰恰符合前高性能计算机中普遍采用的分布式计算的思想。
2.3相关概念:
下面将本文用到一些的相关专业术语在此做简要介绍:
(1)QOS(QualityofService,服务质量)
QoS是网络的一种安全机制,主要致力于达到区分服务、保证服务质量的目的,当网络过载或拥塞时,QoS能确保重要业务量不受延迟或丢弃,同时保证网络的高效运行。
(2)带宽管理
带宽管理就是将网络带宽分为多个动态的通道,各种业务流的流量都在自己的通道中,各个业务之间互相不会受到影响。
即使一个通道中有突发的流量,其它的通道也不会受到影响,主要是通过Qos技术的流量控制和流量整形技术来实现的。
三、P2P网络及P2P协议分析
P2P网络与传统的网络不同的地方就在于其网络中的每个节点在逻辑上是具有同等地位的,但是这种逻辑上的对等并不等于在处理能力上的对等。
P2P技术的实质在于将传统网络的集中化管理转换为分布式管理,将内容从网络节点的中心化引向网络节点的边缘化,从而使网络中的每个节点都能够在网络中充当服务端的同时也能很好的为其它节点提供服务,更好的充当一个服务器。
相对于传统的集中式客户/服务器(C/S)模型,P2P将服务器的概念弱化了,节点之间既可以提供服务也可以请求服务,节点直接的资源交换都不用再通过服务器。
P2P网络系统可以使得用户之间的资源共享变得非常方便,这种特点是网络具有可扩展性的基础,同时也是解决网络带宽的关键。
P2P网络已经历了集中式、分布式和混合式三代不同的网络模型,这三种网络模型各有各的特点,正是因为它们的这些特点,各种网络模型能够扬长避短,同时存在于网络中,为P2P网络的应用和发展奠定了基础。
3.1P2P主要网络模型
3.1.1集中式P2P网络模型
集中目录式P2P网络模型也被称为非纯粹的P2P结构,这是因为它仍然是具有中心化的特点,是最早出现的P2P应用模型。
在集中目录式P2P网络模型中节点之间的信息交换和资源共享以及检索方式与传统的客户/服务器比较类似,但是也存在较大的区别,查询节点根据网络的具体情况来选择合适的节点进行连接,而且不必通过中心节点,也就是服务器。
这种网络模型相对来说比较简单,目前集中式P2P模型最典型的代表是Napster。
3.1.2分布式P2P网络模型
分布式P2P网络模型取消了传统的客户/服务器模型中的中央服务器在这种网络模型中每个节点随机的接入网络中,并且与相邻的节点都建立一条端到端的连接。
分布式P2P网络模型也被称为纯P2P网络模型。
所要查询的内容都是通过相邻节点之间的相互连接来实现的,在搜索信息的同时,每个节点还会保存下搜索的轨迹,保证不出现搜索环路。
目前分布式P2P网络模型最典型的代表就是Gnutella。
3.1.3混合式P2P网络模型
在前面介绍的两种P2P网络模型中,集中式P2P模型有利于网络资源的快速
检索,可扩展性也比较好,但是一旦中心服务器受到攻击,后果会相当严重。
分
布式P2P由于没有了中心服务器,受攻击的可能性较小,但是搜索速度较慢,可
扩展性也不好。
混合式P2P网络模型结合了前面提到到的两种P2P网络模型各自
的优点,使网络性能获得了更加优化的性能。
混合式P2P的一个很大的优点就是
它按照能力将用户节点进行分类,使得一些能力比较强的节点完成一些比较重要
和特殊的任务。
3.2常见P2P协议分析
由于目前有关于P2P协议的技术文档相对比较缺乏,所以作者主要是采用在先网络上抓取P2P协议包的做法,然后对结合一些比较权威的P2P网站对协议包进行具体分析,然后得出结论。
在安装了P2P软件的机子上P2P客户端程序,然后用一些比较常用的抓包工具进行抓包测试。
我们主要在数据包的格式和数据块的大小这两个方面对目前比较流行的4种P2P协议进行分析。
3.2.1eDonkey2000协议分析
现在不仅仅Windows操作系统支持eDonkey2000协议的客户端,而且eDonkey
2000协议也在其它的操作例如MLDonkey中得到了广泛的应用。
我们通过在运行有eDonkey2000协议的客户端机器上用tcpdump和Ethereal进行抓包测试,再结合一些eDonkey2000协议文档我们发现eDonkey2000协议数据传输通过TCP协议,进行操作,而控制包既可以用TCP也可以用UDP[13][1,41,使用的是一个端1:
3号为4661或者4662的TCP端口和一个端口号为4665的UDP端口。
3.2.2Fasttrack协议分析
Fasttrack是目前P2P网络中比较流行的一种协议,在欧洲和北美u副它应用的更为广泛。
Fasttrack的一般都是用端口号为1214的缺省端口进行通信,但是由于它和HTTP流量比较相似,所以其比较难被识别。
3.2.3GnuteIIa协议分析
Gnutella协议主要使用端口号为6346的端口进行TCP通信,使用端口号为
6347的确口进行DUP通信。
我们通过在运行有Gnutella协议的客户端机器上用tcpdump和Ethereal进行抓包测试,再结合一些Gnutella协议文档发现Gnutella协议客户端程序使用不同大小的传输块,在传输过程中的大小是完全不一样的确,但Gnutella协议的下载中包含一个格式为“GET/uri-res"的数据包。
此外,Gnutella协议TCP包和UDP包的净荷开头字符串都有其比较明显的特征,可以由此来识别Gnutella协议。
3.2.4BitTorrent协议分析
BitTorrent是目前非常流量的一种P2P网络协议,尤其是在我们国家,P2P在最近这些年里面更是得到了广泛的应用。
BitTorrent是P2P网络典型的应用,它是通过统一资源定位符来识别内容,可以非常简单地和web交换并且这种交互无处不在。
3.3开发背景
网络技术在中国的不断发展为P2P的应用和发展创造了条件,P2P与传统的网络结构是有很大差异的,传统的网络架构都是使用的服务器/客户机构的主从网络模型,而P2P技术用的是一种对等网络,也就是说网络中的所有节点的地位都是一样的,P2P技术已经越来越成熟。
P2P技术已经在网络中普遍的应用并还在不断的发展,P2P技术的应用在让用户体验到方便的同时也让网络管理者感到十分为难,因为这种技术在理论上会无止境的消耗网络带宽,会使原本运行稳定的网络变得越来越拥塞,并且使网络的运营成本大大的增加。
开放性互联网使得大量的互联网增值业务的开发和部署效率提高,从2002年BitTorrentlal技术产生以来,成为了互联网上高效、便捷的下载工具,目前,根据主流运营商的统计,大约50%--70%的带宽被P2P流量占据。
由于在P2P技术采用的是对等网络模型,在整个网络体系中又没有中心服务器,所以在信息的传输过程中是绕过服务器的,这样就缺乏对信息的管理,虽然让用户在下载如电影音乐的时候体验到了从未有过的速度,但是却存在很多问题,除了严重影响带宽,使网络变的拥塞之外,还会带来为以下几方面的问题:
(1)网络流量不可预知性
(2)改变了网络流量分布
(3)网络拥挤,造成关键业务明显延迟
(4)充当上载服务器
(5)P2P下载造成很大的入站流量,P2P也带来巨大的出站流量。
所以,如何对网络中的P2P流量进行识别和控制,保证其它业务的正常运行,
成为一个亟待解决的问题。
对于P2P网络技术带来的各种问题,网络管理者和网络运营商也采取了一些策略来应对由P2P的应用引起的网络拥塞,其中最简单最常用的方法就是增加中继带宽,这也确实能在短期内起到很好的效果,但是根据实际的网络运行又发现了一个问题,就是当P2P应用发现网络中有更大的带宽时,又会继续去吞噬网络中的带宽。
这样增加带宽就是一个无底洞,增加的带宽只会让那些P2P应用得到更多的带宽,会更多的消耗网络资源,即是否采用升级其Internet连接链路的办法来缓解网络的拥塞情况也同样达不到好的效果,总之,扩充网络对于维护网络拥塞来说不失为一个好办法,但是对于P2P网络的应用来说,这种传统的方法并不能从根本上解决问题,扩容后的网络只会又会被P2P所占用,并且增加网络带宽的成本也很大,最终形成恶性循环。
传统的P2P检测和控制工具是对协议包的包头进行检测而缺乏对数据包内容
的检测,这种检测方法的缺陷是缺少对应用层流量的分析,使对协议的分析不够
全面,这样导致识别和控制的流量也不够准确。
随着网络技术发展和P2P应用的增加,使得如今很多的P2P协议都使用了动态端口,这样仅仅使用传统的包头检测就很难准确的检测出P2P的应用。
其实很多网络管理者都知道网络中存在着P2P流量,或是有P2P软件在网络中运行,但是他们却没有合适的工具去检测这些P2P流量,就更谈不上对这些P2P流量进行控制,有时候甚至都不了解这些流量对网络带来的巨大冲击。
P2P下载的通信机制决定了这一问题的存在,P2P下载的端口是动态的,有时还会以HTTP流量的形式出现,使得P2P的下载流量很难被一般的流量监测工具发现。
所以,要对P2P流量进行准确的识别和控制,就必须开发一个基于应用层的工具,能够对P2P协议的数据包也进行检测。
四、实现条件及系统解决方案
4.1Linux内核防火墙说明
Linux防火墙技术经过了几个时代的发展已经形成了一个通用化的防火墙框架,尤其是Linux2.4内核中包含了一个名为Netfilter/Iptables的可扩展的防火墙框架,使我们对Linux内核的扩展更加方便。
4.1.1Linux2.4内核防火墙机制
Linux环境下防火墙系统的实现包括Netfiiter和Iptables两个方面,Netfilter提供可扩展的结构化底层框架,在此基础上实现的数据包选择工具Iptables负责对输入、输出的数据包进行过滤和管理等工作,如图1所示是对Netfilter防火墙框架在Linux内核网络结构和防火墙中位置的描述。
图1.Netfilter、IP层与防火墙模块关系图
为了使防火墙的修改和扩充变的容易,对数据包的处理是在IP层中实现的,这需要通过Netfiiter结构将防火墙来完成,防火墙机制内核模块的代码实现要和IP层的代码放在不同的层面上进行,使得它们实现后形成不同的模块。
Linux支持不同的协议并且每种协议对应唯一的分类号。
防火墙是Linux内核在编译期间的一个选项,是在系统启动时加载的模块。
系统在启动时会进行初始化,Linux整个防火墙体系就是在系统初始化的过程中构建起来的,并且按照选项来选择是否调用其初始化函数。
每个防火墙的注册函数(init函数)被系统模块初始化函数调用。
4.2Netfilter工具分析
4.2.1Netfilter体系框架
Netfilter在IPV4中定义有5个HooK点,其位置如图2
图2Netfilter、IP层与防火墙模块关系图
4.2.2Netfilter工作原理
Netfilter提供了表、链和规则三种机制来对数据包进行处理。
缺省的表为filter表,nat表和mangle表。
不同的表中包含的内置链是不一样的,内置链分别对应5个HOOK点,链是数据包传播的路径。
规则是包含在链中的,用来实现某个特定的匹配。
数据包在Netfilter表和链中的传播如图3所示。
当数据包经过各条链时,系统就会从该链的第一条规则开始逐一进行检查,看数据包是否符合该规则所定义的条件,如果满足,系统会对这个数据包进行处理,也就是说这些处理的具体方法是按照这个规则当中多定义的一些规则来进行的;如果这些条件不满足,则会进入下一个链中再来进行检查,看是否有合适的规则来处理数据包。
如果该链中没有相应的规则匹配,则将由此链的缺省方针来确定丢弃或接受该数据包。
图3.数据包在Netfilter表和链中的传播
4.2.3包选择工具IptabIes
Netfilter为我们提供了数据包的处理机制,也就是说告诉了我们一个处理的大体规则,而包选择工具Iptables则完成对数据包的具体处理工作。
Iptables是基于Netfilter框架实现的数据包选择工具,它由两个子系统组成:
内核模块和用户接口应用程序比引。
内核模块可以通过添加删除链中的规则等操作对Netfilter的规则表进行管理;用户接口程序则先接受用户所发出的命令,然后将这些命令添力口至0Linux内核中。
包选择工具Iptables对Netfilter的操作是通过socket接口来完成的,创建的socket(TC_AF,SOCKRAW,IPPROTO_RAW)接口中有三个参数。
Netfilter/Iptables由Netfilter的钩子函数和规则两部分构成,规则是我们后面工作中比较重要的一点,它被存储在特殊的数据结构当中。
在现有内核kernel2.4.21中已内建了过滤(filter)表、网络地址转换(nat)表和包处理(mangle)表这三张表,我们可以在上述三张表中添加相应的规则,来完成报文处理功能。
过滤(filter)表的功能是对报文进行过滤,不作其它修改,仅仅只做接受或者拒绝操作。
网络地址转换(nat)表匹配和处理的仅仅是每个连接数据包的报文中的第一个报文,然后交由Linux连接跟踪机制模块将处理该连接之后的报文。
nat提供对本地报文(出/入)的地址转换比。
包处理(mangle)表是包选择工具Iptables中比较特殊的一个表,它可以对包括MARK、TOS和TTL等的报文内容进行修改,包处理(mangle)表在Netfilter框架中的NF—IP—PRE_ROUTING和NF_IPLOCAL_OUT两个处嵌入操作函数。
五、实验方案设计及实现
5.1流量控制系统总体设计
前面章节中分析了Netfilter防火墙框架以及包选择工具Iptables,知道了在Linux内核中有一套强大的防火墙框架Netfilter。
但是传统的P2P检测和控制工具主要是对通过基于数据包的端口等进行过滤,从而达到监视网络流量的目的。
仅仅是对协议包的包头进行检测而缺乏对数据包内容的检测,这种检测方法的缺陷是缺少对应用层流量的分析,使对协议的分析不够全面,很多时候就很难分辨出正常的HTTP流量和P2P下载的流量区别。
为此我们需要开发出一个能够应用层上对流量进行识别和分类的工具。
系统的工作流程图如图4所示:
图4Netfilter在IPv4中的结构
5.2带宽管理的实现
Linux操作系统目前广泛引用于路由设备中,流量管理是它一个重要功能∞71,由于在前面我们已经实现了P2P的流量完全禁止,我们现在就要实现将P2P流量控制在某一个范围内的确功能。
为了达到这个目的,我们就必须将前面用到的Linux的内核防火墙框架与Linux的流量整形工具tc相结合,实现对网络内部的带宽管理。
5.2.1队列规定
我们可以在队列规定当中设置一个允许的最大速率,也就是说通过固定能传输的数据的多少来对流量进行整形。
流量整形时传输的速率就被控制在一个范围内,若超出范围则采取延迟或丢包的策略口。
流量管理主要由qdisc(队列规定)class(类别)和filter(过滤器)三种对象控制。
分类的队列规定主要用在多种数据流需要进行区别对待的时候。
当数据包进入我们开发的分类器的时候,就被送到设置的队列规定当中。
队列中的一些规定是根据整形的分类机制来确定的,数据进入分类器后,会寻找一个符合自己的队列规则。
数据寻找到自己的大类之后,又会根据队列规则选择一些小类。
分类器就是用来设置一些分类规则的。
当所有的分类都完成的时候,也就是说网络中的数据包已经找不到更细微的队列规定的时候,数据包就会进入合适自己的队列进行流量整形。
在队列中还学要对队列进行调度,这种调度主要在流量控制中用的比较多。
在本文中主要使用了两种队列规定:
HTB(HierarchicalTokenBucket,分层的令牌桶):
这种队列规定主要是使用在针对不同的用途来进行分配。
由于这种规定在程序使用上的函数非常少,所以配置起来相对比较简单,所以在运用上比较广泛,尤其是在流量整形中利用的非常频繁。
SF0(StochasticFairnessQueueing,随机公平队列):
随机公平队列使用的是一种公平性的算法,这种队列规定是在非常公平的环境下进行的,这种队列规定的主要优点是在计算的时候的计算机量非常少,但是相比其它的队列算法,精确度不是很高。
5.2.2Linux流量控制机制
图5描述了Linux内核进行数据包调度的流程。
图5Linux系统的流量管理机制
图中整个大方框表示整个内核。
最左面的箭头表示从网络接口进入机器的数据包。
可能被丢弃的过滤器的一些数据要求进入队列。
如果包被发送到相应的进程和区域的流量,如果数据包经过并提交本地进程。
中继器都必须送交出口。
进程发送数据的出口本地分类。
在数据在网络上的流动过程中,一些排队的数据可提供队列中排队。
没有任何设置,只要求疏散队列的数据包并总是在是接收。
数据包队列中,我们有队列规定来处理等待发送的网路卡的核心。
在上面的箭头代表的不了所有上述情况,但这一计划,如果该卡是说明这是一台机器,每个网卡有自己的进口和出口。
在入口和出口处我们设置所需要的队列规定来规定队列的流向,在转发本地进程是数据不从入口流出,数据流过整个系统时会会在网卡的出口处进行流量整形。
上图中没有考虑两块网卡的情况。
Linux中的队列规定是附带在网卡上的,所有在这个网卡上排队的数据都排进这个队列的规定。
这样就出现了如下的两个问题:
(1)仅仅只能简单的进行出口整形。
(2)由于只有整个系统上只有一个网卡,无法对全局的限速进行设置。
IMQ(Intermediatequeueingdevice,中介队列设备)从根本上来说不是一个队列规定,但是IMQ的使用和队列规定是有着密切联系的。
它把网络中的上行和下行流量进行分类控制。
Iptables的IMQ处的语法是:
IMQ[一todevn],n是imq设备的编号。
网络上的数据会流入到中介队列设备的哪个位置,是根据数据的流向来决定的。
5.2.3流量管理功能的设计
带宽管理设备的基本网络结构如图6所示。
Eth0eth1Router
LAM
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 Linux 内核 扩展 模块 P2P 流量 控制 研究