存档

文章标签 ‘QoS’

tc pfifio_fast及PRIO对没有filter的包的处理

2009年1月15日

看好多网站上的讲tc的教程都有类似下面的例子:
tc filter add dev eth0 protocol ip parent 2: prio 1 u32 match ip sport 23 0xffff flowid 2:1
tc filter add dev eth0 protocol ip parent 2: prio 2 flowid 2:2
后一句的本意是不符号上面各种filter的默认分到classid 2:2中去,可是实际我用的时候发现后一句被告知不能用(tc竟然没有–version参数,我也不知道是啥版本的)
看了一下文档,说不符合任何filter的包按classifier的root的默认分类发送,那这个“默认分类”是什么呢?
对于CBQ来说,它本身就是在搞复杂的分类,就不说了;这里只说简单的以频道分类的classifier:pfifo_fast的PRIO,默认来说这两个classifier建立的时候会生成3个band,然后也会有一个默认的priomap,形如:1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
这些数字是干什么用的呢,它们与IP包头的TOS字段有关,TOS字段一共4个bit,每个bit代表不同的特性,如果最高位是表示最小延迟,最低位是表示最小成本等。这4个bit一共能组合成16种TOS值,linux内核会根据这4个bit的TOS值给该包判定一个priority值(从0开始),这个priority值对应了priomap中相应位置的数字,每个数字就表示该TOS值将被默认地送往这个classifier的哪个band。
例如:对于什么标志都不带的包,TOS=0000b=0,linux会给它分配priority值0,对应priomap中的第1个数字――1,也就是说什么标志都没有的包装被送往band 1;对于telnet包,一般TOS=1000b=8,linux会给它分配priority值6对应priomap中第9个数字――0,就是说telnet包默认会被送到band0
对上述两个Classifier,band号越小,优先级越高,所以telnet包的优先级高于普通包,合理,嗯
下面列出linux内核会给各种TOS值分配什么样的priority,选自tc手册。
TOS     Bits  Means                    Linux Priority    Band
————————————————————
0×0     0     Normal Service           0 Best Effort     1
0×2     1     Minimize Monetary Cost   1 Filler          2
0×4     2     Maximize Reliability     0 Best Effort     1
0×6     3     mmc+mr                   0 Best Effort     1
0×8     4     Maximize Throughput      2 Bulk            2
0xa     5     mmc+mt                   2 Bulk            2
0xc     6     mr+mt                    2 Bulk            2
0xe     7     mmc+mr+mt                2 Bulk            2
0×10    8     Minimize Delay           6 Interactive     0
0×12    9     mmc+md                   6 Interactive     0
0×14    10    mr+md                    6 Interactive     0
0×16    11    mmc+mr+md                6 Interactive     0
0×18    12    mt+md                    4 Int. Bulk       1
0x1a    13    mmc+mt+md                4 Int. Bulk       1
0x1c    14    mr+mt+md                 4 Int. Bulk       1
0x1e    15    mmc+mr+mt+md             4 Int. Bulk       1
还有常见的协议的TOS值:
TELNET                   1000           (minimize delay)
FTP
        Control          1000           (minimize delay)
        Data             0100           (maximize throughput)
TFTP                     1000           (minimize delay)
SMTP
        Command phase    1000           (minimize delay)
        DATA phase       0100           (maximize throughput)
Domain Name Service
        UDP Query        1000           (minimize delay)
        TCP Query        0000
        Zone Transfer    0100           (maximize throughput)
NNTP                     0001           (minimize monetary cost)
ICMP
        Errors           0000
        Requests         0000 (mostly)
        Responses        <same as request> (mostly)
Classes
另,IP头中,TOS这4个bit再往高处3个bit的定义也叫priority,但是好像linux是根据tos的4个bit分配priority值,不是直接以这3个bit为准。(priomap是16个数字,如果是以这3个bit为准,就是8个了,呵呵)

技术 , ,