计算机应用 | 古代文学 | 市场营销 | 生命科学 | 交通物流 | 财务管理 | 历史学 | 毕业 | 哲学 | 政治 | 财税 | 经济 | 金融 | 审计 | 法学 | 护理学 | 国际经济与贸易
计算机软件 | 新闻传播 | 电子商务 | 土木工程 | 临床医学 | 旅游管理 | 建筑学 | 文学 | 化学 | 数学 | 物理 | 地理 | 理工 | 生命 | 文化 | 企业管理 | 电子信息工程
计算机网络 | 语言文学 | 信息安全 | 工程力学 | 工商管理 | 经济管理 | 计算机 | 机电 | 材料 | 医学 | 药学 | 会计 | 硕士 | 法律 | MBA
现当代文学 | 英美文学 | 通讯工程 | 网络工程 | 行政管理 | 公共管理 | 自动化 | 艺术 | 音乐 | 舞蹈 | 美术 | 本科 | 教育 | 英语 |

浅析网络流量控制系统在开源路由器上的实现(2)

2013-11-18 01:06
导读:针对传统libpcap}捕包处理时间长、效率低的缺点,采用了一种新的基于环形缓冲区的套接字模型pf _ ring。它的主要工作原理如下所述: 采用PF_ RING技术,操作

    针对传统libpcap}捕包处理时间长、效率低的缺点,采用了一种新的基于环形缓冲区的套接字模型pf _ ring。它的主要工作原理如下所述:

    采用PF_ RING技术,操作系统将包采用DMA方式拷贝到内核缓冲区的环形队列中,再把网卡缓冲区中收到的这些包丢弃,不把它们传人内核协议栈缓存区中进行排队。环形缓存区在每个套接字被建立时分配,直到套接字关闭时,环形缓存区才被释放。每次由网卡缓存区拷人内核环形缓存区时,不会进行分配和去配的操作,而是新到的包按环形的方式,将原有的包覆盖。PF_ RING技术还提供了对MMAP技术的支持。该技术将用户应用程序空间映射到内核缓存区,从而省略了将数据从内核缓存区向用户缓存区的拷贝操作。这样可以节省一次拷贝所占用的系统资源和缩短包处理的时间,从而提高了捕包的效率。

  2.2流量方案

    (1)按照IP地址汇聚。

    系统对源和目的IP地址进行流量汇聚,统计出各IP地址单位时间内的上行流量和下行流量。这种统计方式能反映出本地各主机、各网段的网络负载情况,系统可以此为依据,进行路由调整及流量控制。

    (2)按照端口号汇聚。

    TCPiLJDF'的端口号代表网络上的不同应用(HTTP, F"IP, P2P等,按照单位时间内访问的TCP/UDI〕端口来统计流量,可以查看各端口的流量分布情况,当网络出现异常时,可按照端口号来进行流量控制。

    (3)按照网络应用汇聚。

    常规的网络应用一般通过常用的端口就可以识别,并进行流量统计,然而P2P技术不断地发展演进,其拓扑结构从最初的集中式发展到纯分布式再到目前的混和式架构,其端口特性也由最初的固定端口发展到随机动态端口再到伪装端口。所以,系统对应用进行统计,主要是对P2P应用的解析统计。

    对P2P应用的解析,首先是经过以太网解析,获取IP数据包,然后再通过网络层和传输层解析,得到源目的IP地址、源目的端口、传输层协议类型和完整的payload信息。由于P2P协议一般动态使用非知名端口进行,因此仅仅根据端口来检测P2P流是不准确的,必须进行应用层协议识别。在应用层识别过程中,根据协议格式以及消息里的特征字符串,采用深度包检测(DPI)方法来识别P2P业务。深度包检测时采用模式匹配方法查找特征字符串。例如,可以根据特征字符串“0x13 BitTorrent protocol”检测出Bit-Torrent协议数据包,根据特征字符串“Oxe319010000"检测出eDonkey2000协议数据包。根据网络应用统计流量就是要按照这些特征字符串来进行流量汇聚。同时,解析P2P协议,也为按应用进行流量控制提供了一种可靠的手段。

  2.3带宽分配机制

    Linux内核提供了强大的带宽代码,它主要使用规则过滤工具netfilter/iptables和路由工具包的流量控制命令TC相结合的方式来进行带宽控制。

    netfilter/iptables IP信息包过滤系统实际上是由两个组件netfilter和iptables组成的。netfilter组件被称为内核空间(Kernel印ace),是内核的一部分,主要由一些信息包过滤表组成,这些表中包含内核用来控制信息包过滤处理的规则集。iptables组件则是一种规则过滤工具,它称为用户空间(User Space),主要用于插人、修改和除去信息包过滤表中的规则。

   TC是Linux下一种功能强大的网络流量控制软件,它可以分为三个部分:队列策略((,lueue Disci-pline)、分类器(Classifier)和过滤器(Filter )。队列策略实质是一些算法,控制如何处理进入队列的报文。队列策略算法主要有FIFO(先进先出),RED(随机早期探测)、CBQ(类基队列)和HTB层次令牌桶)等。过滤器按照过滤条件,将数据报进行分类处理。一般来说,数据报的处理步骤如下:队列策略对数据报文进行调度,过滤器根据报文信息来决定把它放人到哪一个类中。在不同的类中,每个类也包含一个队列策略,同样进行调度、分类,将报文按照既定的规则排序发送出去。

  3系统实现

  3.1捕包模块

    模块采用pf _ ring套接字的方式,用户层通过调用socket( PF_ RING, SOCK一RAW, tons(ETH_P_ALL))建立一个PF_ RING类型的、ket,并返回一个套接字描述符。接着调用bind (fd, ( struct sockaddr*)& sa, sizeof ( sa))将。cket绑定到本地IP和端口。sock-et和bind实际上分别调用了ring_ create和ring_ bind,而这两个函数的作用就是为套接字创建一个环形缓冲区,然后将其绑定到一个设备上。通过建立的PF_RING套接字就可以进行数据传输了。由于用户空间采用了直接访问内核空间的环形缓冲区的方式,所以效率比原来的libpcap有了明显提高。之所以称之为环形缓冲区是因为在连续的内存中有一个F1owSlotIn-fo结构,该结构中包含了描述环状缓存的基本信息,插人删除都是循环操作的。当有数据包被网卡接收时,通过add_skb_t。一ring来实现将sk_ buff插人到环形缓冲区,从skb一>data中读取一个数据包头结构,然后使用~cpy直接将insert _ slot处内存覆盖。

上一篇:试论在铁路信号中计算机网络应用初探网 下一篇:没有了