流控原理

来自深圳捷联讯通科技有限公司
跳转至: 导航搜索
Queue 流控用于对网络接口数据流发送和接收数据进行控制。传输流量被控制在指定的范围值内,即传输的流量只能小于或等于这个值,
反之超过的流量将会被丢弃或延迟发送。
流控执行两种方式:
♠ 丢弃所有超出的流量限制的数据包– rate limiting (丢弃或整形流量) ,当 queue-size=0 100%流量被限制
♠ 延迟发送超出指定流量限制加入到队列中的数据– rate equalizing (计划任务) ,当 queue-size=无限制(unlimited)100%比例均衡发送
下面的视图让你进一步理解 rate limiting 和 rate equalizing 的区别:
12-01.png
上图显示了当传输流量超出了指定带宽的那部分,将进入队列容器 (queue-size) )并延迟发送。注意:数据包被延迟只会在队列容器没有满
的情况下,如果队列容器没有多余的空间缓存数据包,数据包同样会被丢弃。
在 RouterOS 队列容器可以通过/queue type 指定,每种类型的 queue type 有不同的队列长度大小,可以指定数据包和字节 (pfifo-limit,
bfifo-limit, pcq-limit, pcq-total-limit, red-limit), 但所有的类型原则上是一样的,即 queue-size 决定数据包是被丢弃还是延迟发送。
12-02.png
每个队列都有 2 个速率限制:
♥ CIR (约定信息速率 Committed Information Rate) – (在 RouterOS 中的参数为 limit-at) 最坏的情况下,无论如何都会将得到给定的的 CIR
传输量(假设我们能发送那么多的数据量)。
♥ MIR (最大信息速率 Maximal Information Rate) – (在 RouterOS 中的参数为 max-limit) 最好的情况下,如果有剩余带宽,才能获得这个的带宽。
队列执行在 RouterOS 基于等级令牌桶 Hierarchical Token Bucket (HTB),HTB 允许创建等级队列结构并能指定队列直接的关系,在 RouterOS v6.0
之前等级结构能被指定在 4 个不同的位置
♦ global-in - 代表了所有输入接口(INGRESS 队列)。请注意在数据包过滤前与 global-in 相关的队列应用到路由器接的数据流。 global-in 排序就
是在 mangle 和 dst-nat 之后执行。
♦ global-out - 代表了所有普通的输出接口。附属于它的队列会在附属于特定接口的队列之前应用。
♦ global-total - 表了一个流经路由器的数据都能通过的虚拟接口。当把一个 qdisc 附属到 global-total时,限制需要在两个方向起作用。例如,如
果我们设置一个为 total-max-limit 256000 限制,我们将得到 upload+download=256kbps(最大值)
♦ <interface name> - 明确指定的网络接口,在流量从这个接口发送出去时将被放入 HTB 队列
注意 v6.0 后取消了 global-in 和 global-out 接口,使用 global 代替。
RouterOS 中有两种方式配置队列:
♣ /queue simple – 用于简单的队列配置,如直接对单个用户的上下行带宽控制,队列的时间计划任务。
♣ /queue tree – 为执行高级的队列任务,如全局的优先策略,用户组带宽控制,需从/ip firewall mangle标记数据包中调用
作者:余松

上一页 下一页