Documentation/cgroups/net_cls.txt的翻译。
基于内核4.3,文档生成时间 2015-11-02 12:44 EST。
这个子系统使用等级识别符(classid)标记网络数据包,可允许 Linux 流量控制程序(tc)识别从具体 cgroup 中生成的数据包。
Network classifier cgroup提供一个接口,这个接口可以使用class id来标记(tag)网络数据包。
TC可以使用这个标记来分配不同的优先级给不同的cgroup。Netfilter(iptables)也可以使用这个标记对数据包施行action。
创建一个net_cls实例需要创建net_cls.classid文件。
当net_cls.classid中的值为0时,该文件无效。
你可以写入十六进制的值到net_cls.classid文件中;这些值的格式为0xAAAABBBB
;AAAA
是主句柄号而BBBB
是副句柄号。(如果没有就写0,并且0是可以省略的,0x10001=0x0000100001=0x1:1)
读取net_cls.classid时会显示十进制结果。
一个例子:
mkdir /sys/fs/cgroup/net_cls
mount -t cgroup -onet_cls net_cls /sys/fs/cgroup/net_cls
mkdir /sys/fs/cgroup/net_cls/0
//设置classid,标记group组的网络包标记为10:1,- setting a 10:1 handle.
echo 0x100001 > /sys/fs/cgroup/net_cls/0/net_cls.classid
整理,并转载至Linux内核中流量控制系列文章。
来源:http://yfydz.cublog.cn
内核代码版本为2.6.19.2
HTB, 从名称看就是TBF的扩展, 所不同的是TBF就一个节点处理所有数据, 而HTB是基于分类的流控方法, 以前那些流控一般用一个”tc qdisc”命令就可以完成配置, 而要配置好HTB, 通常情况下tc qdisc, class, filter三种命令都要用到, 用于将不同数据包分为不同的类别, 然后针对每种类别数据再设置相应的流控方法, 因此基于分类的流控方法远比以前所述的流控方法复杂。
HTB将各种类别的流控处理节点组合成一个节点树, 每个叶节点是一个流控结构, 可在叶子节点使用不同的流控方法,如将pfifo, tbf等。HTB一个重要的特点是能设置每种类型的基本带宽,当本类带宽满而其他类型带宽空闲时可以向其他类型借带宽。注意这个树是静态的, 一旦TC命令配置好后就不变了, 而具体的实现是HASH表实现的, 只是逻辑上是树, 而且不是二叉树, 每个节点可以有多个子节点。
HTB运行过程中会将不同类别不同优先权的数据包进行有序排列,用到了有序表, 其数据结构实际是一种特殊的二叉树, 称为红黑树(Red Black Tree), 这种树的结构是动态变化的,而且数量不只一个,最大可有8×8个树。
红黑树的特征是:
整理,并转载至Linux内核中流量控制系列文章。
来源:http://yfydz.cublog.cn
内核代码版本为2.6.19.2
数据发出流控处理时,上层的所有处理已经完成,数据包已经交到网卡设备进行发送,在数据发送时进行相关的流控处理网络数据的出口函数为dev_queue_xmit()。
图1.输出流控流程:
让我们来定义HTB的目标。首先是一些定义:
Red: R > CR
Yellow: R <= CR and R > AR
Green: otherwise
/proc/net/tcp文件提供了tcp的连接信息,是由net/ipv4/tcp_ipv4.c中的tcp4_seq_show()实现信息打印的
本文内容来源于linux官方文档proc_net_tcp.txt
proc_net_tcp.txt介绍了/proc/net/tcp和/proc/net/tcp6接口。这些接口展示了tcp的连接信息。
展示的信息中,首先是listening TCP sockets,接着是established TCP sockets。
在linux中执行cat /proc/net/tcp,输出结果如图1:
文档中对其中每个字段的解释如下(由于长度原因,分为3个部分):
part1:
46: 010310AC:9C4C 030310AC:1770 01
| | | | | |--> connection state(套接字状态)
| | | | |------> remote TCP port number(远端端口,主机字节序)
| | | |-------------> remote IPv4 address(远端IP,网络字节序)
| | |--------------------> local TCP port number(本地端口,主机字节序)
| |---------------------------> local IPv4 address(本地IP,网络字节序)
|----------------------------------> number of entry
控制平面和数据平面的概念。
管理平面和控制平面统称为控制平面。
管理平面是提供给网络管理人员使用TELNET、WEB、SSH、SNMP、RMON 等方式来管理设备,并支持、理解和执行管理人员对于网络设备各种网络协议的设置命令。管理平面提供了控制平面正常运行的前提,管理平面必须预先设置好控制平面中各种协议的相关参数,并支持在必要时刻对控制平面的运行进行干预。