TC流速流量控制分析.doc

  1. 1、本文档共14页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
TC流量控制初步分析 DATE \@ M/d/yyyy 10/20/2010 PAGE 1 / NUMPAGES 14本文档的Copyleft归wwwlkk所有,使用GPL发布,可以自由拷贝、转载,转载时请保持文档的完整性,严禁用于任何商业用途。 E-mail: HYPERLINK mailto:wwwlkk@126.com wwwlkk@126.com来源: /?businessaid=6un=wwwlkk#7TC流量控制初步分析 TOC \o 1-3 \h \z \u HYPERLINK \l _Toc272151528 (一)基本概念 PAGEREF _Toc272151528 \h 1 HYPERLINK \l _Toc272151529 (二)运行出口流控对象 PAGEREF _Toc272151529 \h 2 HYPERLINK \l _Toc272151530 (三)流控对象的具体实现 PAGEREF _Toc272151530 \h 3 HYPERLINK \l _Toc272151531 (3.1)建立一个根流控对象 PAGEREF _Toc272151531 \h 3 HYPERLINK \l _Toc272151532 (3.2)建立一个子流控对象 PAGEREF _Toc272151532 \h 6 HYPERLINK \l _Toc272151533 (3.3)添加一个过滤器 PAGEREF _Toc272151533 \h 8 HYPERLINK \l _Toc272151534 (3.4)流控类和过滤器类型的的组织 PAGEREF _Toc272151534 \h 10 HYPERLINK \l _Toc272151535 (3.5)入口流控对象 PAGEREF _Toc272151535 \h 11 HYPERLINK \l _Toc272151536 (四)用户空间如何和内核通信 PAGEREF _Toc272151536 \h 12(一)基本概念为了更好的描述TC流量控制,先明确一些概念。流控对象:队列规定。无类流控对象:无类队列规定。分类流控对象:分类的队列规定。每个分类流控对象都有默认的子流控对象,默认的子流控对象必定是无类流控对象。子流控对象:分类流控对象中包含的流控对象。无类流控对象必定包含一个或者多个的数据包队列,用于存储数据包。无类和分类流控对象都有默认的分类规定,也可以使用过滤器增加分类规则。分类流控对象是流控对象的容器(包含无类和分类),无类流控对象是数据包的容器。(注意:一些复杂的流控对象可同时作为流控对象和数据包的容器,比如分层的令牌桶)数据包进入一个分类流控对象,分类流控对象将根据分类规则(默认的或者过滤器),决定将数据包送到某个子流控对象。数据包进入一个无类流控对象,无类流控对象将根据分类规则(默认的或者过滤器),决定将数据包加入到某个数据包队列。分类流控对象出队操作:分类流控对象将根据出队规则(固定的),选择一个子流控对象,并执行子流控对象的出队操作。无类流控对象出队操作:无类流控对象将根据出队规则(固定的),选择一个数据包出队。每块网卡都有一个出口根流控对象。每个流控对象都指定一个句柄,以便以后的配置语句能够引用这个流控对象。除了出口流控对象之外,每块网卡还有一个入口流控对象,入口流控对象的类型是固定的(是ingress类型)。运行流控对象:都是指运行出口流控对象,也就是根据出口流控对象的出队规则(固定的),发送流控对象中的所有数据包。流控对象为空:流控对象中没有数据包。入口流控对象没有真正意义上的出队和入队操作,只是根据过滤规则来决定是否丢弃数据包,流控的实现主要在出口流控对象,下面先分析出口流控的实现。(二)运行出口流控对象数据到达出口流控时,上层的所有处理已经完成,数据包已经可以交到网卡设备进行发送,在数据交到网卡设备发送前将会进入出口流控,进入出口流控的函数为dev_queue_xmit(); 如果是入口流控, 数据只是刚从网卡设备中收到, 还未交到网络上层处理, 不过网卡的入口流控不是必须的, 缺省情况下并不进行流控,进入入口流控函数为ing_filter()函数,该函数被skb_receive_skb()调用。dev_queue_xmit中进入出口流控对象的函数段如下: txq = dev_pick_tx(dev, skb);//获取出口流控的控制结构 q = rcu_dereference(txq-qdisc);//获取出口流控的根流控对象 if (q-enqueue) { rc = __dev_xmit_skb(s

您可能关注的文档

文档评论(0)

beifanglei + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档