多令牌桶流量控制排队算法设计与实现.docVIP

多令牌桶流量控制排队算法设计与实现.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
多令牌桶流量控制排队算法设计与实现

多令牌桶流量控制排队算法设计与实现   摘要:本文提出了一种可以对局域网内IP分配固定带宽的扩展令牌桶算法(etbf),etbf扩展了tbf的令牌桶个数,一个令牌桶控制一个IP,消除了tbf共享带宽的缺点,实验结果表明每一个IP得到的带宽都是固定的,达到了希望的效果。   关键词:令牌桶原理;流量控制;tbf;etbf      1 引言      随着网络应用的日益广泛和一些新的网络技术的出现,网络流量控制和带宽管理成了一个亟待解决的问题[1][2]。Linux的TC模块提供了强大的流量控制功能[3][4],其中TBF就是一种很精确的流量控制方式,它对网络和处理器的影响都很小[5]。但是tbf与其他流量控制算法一样,要对连续网段内的每个IP分配固定带宽,必须使用多条规则,否则就会共享带宽。      2 tbf算法的工作原理      令牌桶过滤器(TBF)[4]是一个简单的队列规则:它只允许以不超过事先设定的速率到来的数据包通过,但可能允许短暂突发流量朝过设定值。它很精确,对于网络和处理器的影响都很小。图1揭示了令牌桶的基本原理   令牌桶的控制机制是基于令牌桶中是否存在令牌来指示什么时候可以发送流量。令牌桶中的每一个令牌都代表一个字节。如果令牌桶中存在足够的令牌,则允许发送流量;而如果令牌桶中不存在足够的令牌,则不允许发送流量,直到等到有足够令牌。在linux中令牌桶过滤器是上述机制的一个扩展(一个双重令牌桶)两个个令牌桶背靠靠背设置,一个用来保证平均速率,另一个用来设置峰值速率。      3 etbf的工作原理      为了实现在局域网中对每台机器平分带宽,我们可以在一个class下建立多个速率相同的tbf队列,但是这明显存在两个问题:a. 每一个class下建多个队列,随着队列数的增加系统系能会急剧下降,b. 过多的队列导致书写的困难。为了解决这个问题,我们根据tbf的令牌桶原理发展了etbf,一个etbf队列规则就可以为一个IP网段分配相同的带宽。在etbf中我们根据IP地址的数目来确定令牌桶的个数,每个令牌桶对应一个令牌桶队列来存储数据报。当一个数据报到达时,根据源地址或者目的地址将此数据报放入对应的令牌桶队列的末尾,如果没有相匹配的则放入到默认序列中。下面将从etbf数据结构、数据报的出对入队等方面介绍。   3.1 etbf的数据结构   我们把内核中tbf_sched_data数据结构扩展为etbf_sched_data,etbf_sched_data相对于tbf_sched_data增加五个变量    struct etbf_sched_data    {…   u32 saddr;    u32 eaddr;    u8 flattr;    long subQueueListSize;    struct etbf_sched_data_var *subQueueList;    };   saddr,eaddr分别表示要控制的网段的开始和结束IP地址,flattr表示开始结束地址是源IP还是目的IP,subQueueList是一个链表,它的大小为subQueueListSize(等于eaddr减去saddr),链表中的每一个元素都是一令牌桶队列结构   struct etbf_sched_data_var   {    long tokens;    long ptokens;    psched_time_t t_c;    struct sk_buff_head subQueue;   };   其中tokens,ptokens表示对应序列中的普通令牌桶和峰值令牌桶,subQueue用来存储数据报。当一个数据报到达时根据IP分配到相应队列结构体中subQueue成员末尾。   3.2 入队处理   etbf_enqueue()函数进行入队处理。首先,提取数据报中IP地址,若此IP地址在(saddr-eaddr)范围内,根据IP将此数据报分配到subQueueList链表中相应的令牌桶对列中,如下所示:skb_queue_tail(q-subQueueList[subQidx].subQueue, skb);如果不在,那么则将此数据报放入默认队列中,默认队列处理过程与tbf的处理过程相同   3.3重入队处理   etbf_requeue()函数将先前移除的报文放回到队列中,处理的过程同入队处理,所不同的是入队是将数据报放在队尾,而重入对是放到对头,如下所示:skb_queue_head(q-subQueueList[subQidx].subQueue, skb);   3.4 出队处理   出队函数etbf_d

文档评论(0)

189****7685 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档