Linux Traffic Control Implement: The Overview阅读笔记

#Linux Traffic Control Implement
Traffic Control是实现Differentiated Services的用户工具。

Differentiated Services (short: Diffserv) is an architecture for providing different types or levels of service for network traffic.

Traffic Control包含以下组件:

  • queueing disciplines
  • class(with in a queueing disciplines)
  • filter
  • policing

每个物理网卡都有一个相关联的队列规则,队列规则决定进入此队列中数据包的处理方式。简单的队列规则可能就含有一个队列,数据包进入时候被存储在队列中,网卡驱动程序尽可能地发送数据包。复杂一些的队列规则可能就含有分类器Filter,决定将数据划分到不同的类中,再根据类中处理方法对其进行处理。
队列规则和类经常绑定在一块,类就是队列规则的基本构成。相反,过滤器就不一样,她可以和队列规则绑定在一块,也可以和类绑定到一块,只要队列规则中有类。这样并不会缺乏灵活性。类通常不考虑存储数据包,类通常把数据交由类关联的队列规则进行处理。这个队列规则是一个内部队列规则,类将数据交由内部队列规则即可。
队列规则组成

上述几个概念在tc中对应关系如下:
tc关键字与组件关系

队列规则

队列规则和类都是采用32bit进行标识。将32分为major:minor
队列规则的minor为0。

类有两种标识方法,一种是class id由用户进行指定,另外一个是internal id由队列规则进行分配。class id是u32类型,internal id是ulong类型。内核一般引用的是internal id。注意多个class id可能映射到相同的internal id。这种情况下class id需要从分类器中获得附加信息,再发送到队列规则或者类。类也用32bit进行标识,分为major:minor。不过不要求minor为0。
在队列规则enqueue过程中将选择具体的类。返回的值可能是class id或者internal id。也有种捷径来获得class id。根据skb->priority来确定当期类的class id,可以通过sock_setsockpt的SO_PRIORITY选项来进行设置。注意内核2.2.3之前,SO_PRIORITY可以选择的范围仅有0…7,所以这条解禁并不起作用,但是所有队列规则都支持它。skb->priority可以获得其他的优先值,可以从IPv4头部的TOS字段获得。其值范围是0…65536。
选择完类之后,就调用类关联的队列规则的enqueue。

Filter

Filter用来将进入队列规则的数据分配到它的某个类中。这发生在队列规则的enqueue操作中。
Filter也有内部结构,也是32bit,但是没有被划分为major:minor。0标识自己。
Filter分为两种,generic和specfic。

Policing

Policing的目的是确保流量不会超过上限值。有四种Policing机制。

  • Filter返回的决定
  • 拒绝进入队列规则
  • 丢弃队列规则中的包
  • 丢掉队列中优先级低的包,将新包加入队列。

第一个类型Filter决定,Filter过滤函数返回三个值,
TC_POLICE_OK 没有特殊要求
TC_POLICE_RECLASSIFY 包被过滤器选中,但是超出上限,应该被重新分类。
TC_POLICE_SHOT 包被过滤器选中,但是超出上限,应该被丢弃。
第二个类型是拒绝进入队列规则,此时数据包将被丢弃。
第三个类型是数据包已经进入队列中,但是需要从内部队列中丢掉数据包。
第四个类型是新的数据包到达,发现队列中优先级较低的数据包,于是将新数据包放入队列中。

可以将整个TC的控制框架看成是树,每个阶段就是队列规则,队列规则中可以有类也可以没有,不同的类的末端是不同的队列规则,进入不同类意味着数据将被区别对待。当数据包进入队列规则时,将由Filter决定将数据包放入哪一个类中。

本文内容根据Linux Network Traffic Control - Implementation Overview进行粗略总结。

号码查询服务 提供精准全球号码服务查询验证服务

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值