首页 > 范文大全 > 正文

基于业务优先级带宽控制的实现

开篇:润墨网以专业的文秘视角,为您筛选了一篇基于业务优先级带宽控制的实现范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘要:传统的带宽控制的对象通常是基于用户、应用服务、端口、地址等,而不是基于业务优先级。由于网络数据流中难以区分哪个数据包属于哪个任务,因此也难以实现基于业务优先级的带宽控制。本方案利用了Linux的流量控制技术和IP包头的TOS字段过滤技术,实现了基于业务优先级的带宽控制,为企业的此类需求提供了具体可行的解决方案。

关键词:带宽控制,服务类型,业务优先级

Implementation of Traffic Control Based on Task Priority

Na Li, Hui Chen, Kai Ding

(North China Institute of Computing Technology, Beijing 100083, China)

Abstract:Generally, most of the traffic control proposal are based on the different users、services、ports、address, but not based on the task priority. Because it is difficult to tell which task the data belongs to. As a result, it is difficult to control the data flow based on task priority. In this case, we made use of the Linux TC tools and IP TOS filter, implemented the traffic control based on the task priority. This paper provided the effective and feasible proposal for the enterprise in the face of such tasks.

Key words:Traffic Control,Type of Service,Task Priority

1 相关背景

现有的互联网所提供的是尽力而为的服务,在这种服务模型下,所有的业务被一视同仁地竞争网络资源。但今年来发展起来的一些新的应用(如远程教学、远程会议等多媒体语音视频应用,组播应用)对互联网络提出了全新的服务要求。要求网络应能根据用户的要求分配和调度资源,如能够预留带宽、能够限定网络时延等。正是在这种环境下引入了网络QoS的概念。为了解决以提高网络服务质量的问题,很多专门机构,如因特网工程任务组IETF(Internet Engineering Task Force)等都在研究QoS标准。

带宽控制是实现网络QoS的必要手段之一。带宽控制,就是对经过网络接口的数据流进行有效的控制,区分各种应用类型的数据流,什么流允许通过,什么流不允许通过,允许通过的流可以按照什么样的速率通过,对延迟有什么样的要求。

带宽控制中关键一点就是区分不同的应用,为不同的应用分配不同的带宽,从而保证某些应用具有较高的带宽优先级。应用的区分可以是基于不同的用户,也可以是基于不同的服务(如WWW、Email),也可以是基于不同的传输协议等,需要根据用户具体的需求来考虑。

2 用户需求

本案中的用户是某数据中心,需要在每天不同的时间段将大量的数据通过专用的光纤广域网从甲地传输到乙地。按照需求,其需要传输数据的最大峰值可达到每秒400Mbit左右,而从甲地到乙地的网络传输链路只能承载155Mbit的数据流量,这样,带宽资源成为了数据传输的瓶颈。

在此情况下,应利用有限的带宽资源,优先保证紧急或重要任务的需求,以最优的方式完成传输任务。所以,应根据需求将任务数据划分成不同的优先级:

 优先级为1的任务数据需要独占带宽

 优先级为2的任务数据需要有较高的优先级

 优先级为3的任务具有一般的优先级。

在传输数据的过程中,如何区分哪些数据包属于哪个优先级,并依此实现不同级别的带宽控制成为了本项目需要解决的核心问题。

3 技术难点

目前,带宽控制的常用方法是通过交换机/路由器等网络设备的配置实现控制。带宽控制的对象通常基于用户、应用服务、发送端口、接收端口、源地址、目的地址等方面,而不是基于单个传输任务。

由于一个传输任务可能包含多个连接数,每个连接具有不同的发送和接收端口。在网络数据流中,是很难区分哪些数据是哪个任务的。所以,传统的带宽控制方式难以实现基于任务的带宽控制。

4 解决途径

在本案中,采用基于Linux的流量控制技术和IP包头的TOS字段过滤技术实现带宽控制。

4.1 Linux的流量控制原理

Linux内核中通过三个模块来实现流量控制:过滤器、分类、数据包的排队规则。通过下图可以看到,数据包到达网络接口后,首先经过过滤器,过滤器检查数据包中的相关信息,根据数据包中的标记将数据包归入相应的分类中,然后根据分类中的排队规则将数据包排入队列。数据包在队列中等待,直到被调度选中并发送为止。Linux内核依据每个分类的带宽属性,通过控制队列中每个数据包的发送速率,达到控制流量的目的。

 过滤器(Filter)

过滤器的主要功能就是依据数据包中的某些属性来区分数据包。例如IP地址、端口号等。Linux带宽控制中常用的过滤器有fwmark(防火墙标识)过滤器、U32过滤器、route过滤器、RSVP过滤器等。Fwmark分类器通过识别防火墙标识进行分类;U32过滤器则允许依据任何包头标志来分类;Route过滤器根据数据包将被哪条路由进行分类。

 分类(Class)

经过滤器过滤后的数据进入分类中。分类是具有某种属性的数据包的集合,例如所有带有SYN、ACK标示的数据包属于同一分类,所有WWW服务的数据包属于同一分类等。分类具有带宽、可否互借带宽、所属队列的队列规则等属性。一个网卡上有一个主干类,下面可以由多个分类,每个分类下可以有分多个子类。

 队列规则(Queuing Disciplines)

队列规则管理归入该类的数据以什么规则排队。常用的排队算法有FIFO(先进先出)、RED(随机早期探测)、SFQ(随机公平队列)、Token Bucket(令牌桶)。默认的队列规则是FIFO。

4.2 Linux的TC实用工具集

Linux出于安全和稳定考虑,对程序运行在用户空间和内核空间是严格区分的。而用于流量控制的主要部件是在内核中实现的,应用程序又通常工作于用户空间,为了解决这个问题,Linux系统提供了TC(Traffic Control)流量控制实用工具集,方便用户在用户空间实现满足要求的流量控制方案。

本方案正是利用TC实用工具集提供的接口,实现对流出网卡数据的带宽控制。

4.3 TOS字段过滤技术

IP头中的TOS字段(即服务类型字段)原来是在RFC 971中定义的,不过它的使用从来没有统一过,在公共网络几乎没有意义,许多企业内部用它来指定各种服务类别或者区分专用广域网链路中通讯的优先级。TOS字段一共8位,在IP包头中的位置如图4 3所示。

图2 IP包头中的TOS

TC中所使用的U32分类器可以识别任意包头的数据包分类,因此可以考虑通过U32建立识别TOS字段的分类模式。

5 具体方案

本方案利用了Linux提供的的流量控制工具TC(Traffic Control),并结合TOS字段的过滤技术,解决了基于传输任务的流量控制问题。下面是方案中的具体实现步骤:

(1) 建立主干类、分类、叶子类

 首先需要建立一个主干类。主干类拥有全部的带宽。

- 在TC中相应的实现是:

- #在网卡eth0上建立根

- #tc qdisc add dev eth0 root handle 1:0 htb default 24

- #建立主干类,设置其带宽

- #tc class add dev eth0 parent 1:0 classid 1:1 htb rate ${MainBand}mbps ceil ${MainBand}mbps prio 0

 为每种优先级建立一个分类,给每个分类设置相应的带宽。例如所有优先级为2的任务的总带宽为100Mbps。

在TC中相应的实现是:

- #tc class add dev eth0 parent 1:1 classid 1:11 htb rate ${class1band}mbps ceil ${class1band}mbps prio 1

 为每个分类建立叶子类,给每个子类设置相应的带宽。

- 在TC中相应的实现是:

- #tc class add dev eth0 parent 1:11 classid 1:111 htb rate ${subclass1band}mbps ceil ${subclass1band}mbps prio 2

(2) 为叶子类建立队列,选择队列规则

本方案中,选用SFQ(随机公平队列)作为叶子类的队列规则。原因是,经过过滤器的过滤,在叶子类队列中排队的数据包,是优先级和预期速率相同的任务数据,没有传输速率方面的其它差异,应公平对待,而不是某个连接独占带宽。

SFQ可以实现高度的公平,此外,它需要的计算量很小,所占用的CPU和内存都很少。

- 在TC中相应的实现是:

- #tc class add dev eth0 parent 1:111 handle 1111:0 sfq perturb 5

(3) 利用过滤器建立叶子类与数据包的映射

假设某个任务对应的服务类型标识为0x20,在TC中,通过以下命令可以设置数据包与分类的映射关系:

- #tc filter add dev eth1 parent 20:0 protocol ip prio 100 u32 match 00200000/00ff0000 at 0 flowid 1:111

表示将所有TOS标识为0x20的数据包归入标识为1:111的叶子类中。

(4) 标志传输任务数据包的TOS字段

在传输任务之前,设置每个任务IP数据包中的TOS字段标识,以TOS的高位字段来区分每个任务的优先级,以TOS的低位字段来设置每个任务的带宽。

- 在程序中设置TOS位是通过setsockopt系统调用:

- rc = setsockopt(newsock, IPPROTO_IP, IP_TOS, &new_tos, sizeof(new_tos));

(5) 在带宽分配发生变化时,重新设置类和队列。

在带宽分配发生变化时,需要清除已有的类和队列,重新建立类和队列。

- 在TC中的实现是:

- #删除原来的队列

- #tc qdisc del dev eth0 root >null 2&>1

6 验证与结论

 使用软件与平台

- Linux Fedora 5 内核版本2.6.15

 前提条件:

- 目前的数据流出的网络接口为eth0。

- 用TCP传输文件,客户端向服务器端发送一个较大文件(文件大小为70,266,880字节)。此任务的优先级为2,分配其带宽为0.8Mbps。

- TC中单位定义:mbps(Megabytes per second) = MB即兆字节/秒

 目标

- 进行带宽控制之前,文件传输速率大约为3Mbps。

- 对其进行带宽控制之后,预期速率为所分配的带宽,即0.8Mbps。

 程序中的特殊设置

/*Socket连接建立好以后,设置TOS位*/

new_tos = 0x2;

rc = setsockopt(newsock, IPPROTO_IP, IP_TOS, &new_tos, sizeof(new_tos));

 TC命令

#! /bin/bash

#设置其速率为0.1mbps, e.g. 0.8Mbps

LimitBand = 0.1

#设置主干类带宽为10mbps,e.g. 80Mbps

MainBand = 10

#删除原来的队列

tc qdisc del dev eth0 root >null 2&>1

#在网卡eth0上建立根

tc qdisc add dev eth0 root handle 1:0 htb default 24

#在根队列上建立主干类

tc class add dev eth0 parent 1:0 classid 1:1 htb rate ${MainBand}mbps ceil ${MainBand}mbps prio 0

#在主干类上建立分类1:11

tc class add dev eth0 parent 1:1 classid 1:11 htb rate ${LimitBand}mbps ceil ${LimitBand}mbps prio 1

#分类1:11默认使用FIFO队列规则

#为分类1:11建立U32过滤器,将TOS值为0x02标志的包归入类1:11

tc filter add dev eth0 parent 1:0 protocol ip prio 1 u32 match ip tos 0010 0xff flowid 1:11

 带宽控制的效果

- 带宽控制之前,传输速率约为3Mbps(0.388MB * 8)。

- 带宽控制以后,传输速率为0.74Mbps (0.0921MB * 8)

- 带宽控制后,TC中队列和类的设置

 结论

上述的实验结果表明,对于优先级为2的任务,实验前的传输速度为3Mbps,实验后达到了预期的传输速率0.74Mbps。所以,通过此方法可以实现基于任务优先级的带宽控制。

7 结语

本文通过分析企业的实际需求,结合实例说明如何利用TC和TOS过滤技术实现基于业务优先级的带宽控制。本文提供了具体的实施步骤和验证结论,对于需要构建基于Linux带宽管理系统的企事业单位具有参考意义。

参考文献:

[1] 基于Netfilter/Iptables 和TC 的带宽管理设计与实现. 广东商学院. 郑伟发 杨创新

[2]基于下一代流量控制机制TCNG的带宽管理.东南大学计算机网络与信息集成教育部重点实验室. 高杰 沈军

[3]基于Linux系统TC框架的带宽控制研究与在校园网中的应用 第一军医大 郭献力

第一作者姓名:李娜,出生年月:1977年11月29 性别:女,名族:汉。湖南省长沙市人,职称:工程师,学位:硕士研究生,研究方向: 计算机网络 笑忘江湖 15:54:12 地址:北京619信箱69分箱 13681146680