Mikrotik的简单队列指南

Internet上有很多文章专门讨论MikroTik设备上的速度限制和流量共享,但是几乎所有文章都只考虑队列树,这需要深入了解并且在许多任务中都是多余的,并且可以用“简单队列”代替。


简化队列-一种用于划分通道容量并确定与特定目标相关的流量的优先级的机制。 相对于目标计算传入和传出流量。


有三个目标选项:ip,子网,接口。 您可以为一个规则添加多个目标。


理论部分


整形器,计划器和队列


相对于传输的信息,以比特每秒的时间-比特/秒来测量数据速率。 比特单位很小,因此它们使用前缀千(kbit / sec),兆(Mbit / sec),千兆(Gbit / sec)。


通信网络上的数据包传输速度始终等于介质的传输速度(例如,对于以太网100BASE-TX,为100Mbit /秒)。 如果有必要降低此速度,则中间设备(例如路由器)以最大速度从一个接口接收数据包时会以一定的延迟从另一个接口发送数据包,如果数据包超过设置的速度限制,则将它们存储在队列中并按照先进先出的顺序发送( FIFO),如果队列已满(丢失或大小为零),则路由器将丢弃数据包。


限制 -来自接口的流量的管理速度限制。
整形器(整形器) -一种延迟和丢弃多余数据包的软件算法。
调度程序(Sheduler) -一种算法,用于决定如何存储和发送超出限制的数据包。
队列 -用于传递流量的存储和优先级排序算法。


成形器和调度器工作的图形示例。


脱机使用成形器



将Shaper与Scheduler一起使用



分组流上的简单队列


简单队列排在队列树之后,有时简单队列用于快速限制一个(或几个)用户的流量,而不会干扰队列树。


感兴趣的人可以简化数据包流


队列机制:无,pfifo,pcq


none-无队列;如果超过限制,则将丢弃所有新数据包。


pfifo是一种面向数据包的fifo算法。 存储设置中指定的数据包数量。 默认情况下在“简单队列”中使用。



pcq(每个连接队列) -根据一组条件,所有流量都分为子队列。 从每个子队列中,交替发送一部分流量。 腾出的空间被新到达的交通占用。 如果子队列中的位置用完,则将丢弃发往该子队列的数据包。



考虑一小部分设置:
速率 :每个子队列的速度限制。
限制 :子队列大小(以千字节为单位)。
总限制 :所有子队列的总大小(以千字节为单位)。
根据情况选择限制/总限制比率。 默认情况下,40个队列(2000/50),以其最大流量填充为准。
爆裂 :关于他的会更低。
分类器 :基于将流量划分为队列的内容。
分类器按顺序划分各种连接(连接),如果转到[IP]-> [Firewall]-> [Connections],则可以注意到,大多数连接都包含发送方和接收方的地址和端口(源地址,源端口)。 dst。地址,dst。端口)。


我们讨论简单的队列,因此为简单起见,我们将考虑仅过滤来自wan接口的流量,在这种情况下,相对于目标,传出(上载)流量将按src分类。 地址,以及由dst传入(下载)的地址。 地址。


按端口分类将有助于避免一个应用程序的通信阻塞队列的情况,如果一个应用程序产生许多传出连接(例如torrent或web。带有一堆选项卡的浏览器),则它们的src将有所不同。 端口和流量也将分为多个队列。


使用PCQ进行动态整形


如果“速率”是硬编码的,则每个子流将具有给定速度,并且直到所有子流的总速度超过上限(在“简单队列”中为“总限制”)时,才可以超过该速度,在这种情况下,所有子流的速度将降低按比例。



如果Rate设置为0,则更高的限制将在所有子流之间共享。 实际上,这是动态整形。



如果将“速率”设置为0,并且未指定“简单队列的总限制”,则子线程之间的速度将基于更高的限制进行划分;如果未嵌套队列,则这是物理接口的限制。 如果您的费率计划较低,则部分流量将在提供商的设备上被杀死,队列将无济于事。



其余的队列类型(SFQ,RED)具有各自的特性和应用程序,也可以用于简单队列,但是现在它们对我们而言已不受欢迎。


包装标签


是的,在简单的队列中,您可以使用标记的流量。 这不是先决条件(与“队列树”不同),但是可以让您摆脱目标的限制。


流量标签出现在[IP]-> [防火墙]-> [Mangle]中,总共共有三种标签类型:连接,数据包,路由。 每个包装可以包含每种类型的一个标签。 进入包装后,包装将按照所有规则一个接一个地传递,如果有两个熔化的标签集,则下一个规则将从上一个覆盖标签。 为了防止覆盖,您可以在第一个规则中禁用数据包在链上的passtrought=nopasstrought=no )。


设置队列时,只能使用数据包标签( action=mark-packet )。 但是为了提高性能(检查连接标签的速度比检查每个包中的条件的速度更快),建议先标记连接( action=mark-connection ),然后action=mark-package该连接中的数据包( action=mark-package )。 具有预标记连接的规则并不总是正确的,但是如果您在构建队列时已经了解了这一点,则应该使用队列树。


您可以在任何数据包流链中标记传输流量,但是在大多数情况下,我更喜欢使用转发,因为 在此阶段,接收者与发送者的地址以及传入和传出接口的名称是已知的。


交通标签示例


 /ip firewall mangle add action=mark-connection chain=forward connection-state=new dst-port=5060,10000-20000 new-connection-mark=output-sip-and-rtp passthrough=yes protocol=udp src-address=192.168.100.0/24 add action=mark-packet chain=forward connection-mark=output-sip-and-rtp new-packet-mark=output-packet-sip-and-rtp passthrough=no 

什么是爆裂


通常,速度限制应理解为每秒达到限制的某个静态值,达到该速度后,数据包将被丢弃或排队。 突发以每单位时间的平均值运行,这使得可以在短时间内使用较高的(峰值)速度,并在通道上负载恒定的情况下限制速度。


最大限制是主要限制。
突发极限 -峰值速度,在遵守指定的平均速度时,将优先于最大极限。
突发阈值 -极限速度。
爆发时间 -时间。


目标会从“爆发限制”中获取速度,但每秒会计算出“爆发”时间的平均速度。 如果给定时间的平均速度超过了“爆发阈值”,则用户将被限制为“最大限制”,如果平均速度恢复正常,则目标将再次获得“爆发限制”。


突发案例研究

爆发规则:



显示目标速度变化的流程图:



目标速度变化是什么样的:



如果您对“爆发”主题感兴趣,建议您阅读Wiki上信息 ,其中包含一些图表,您可以根据这些图表更好地了解“阈值”和“时间”值如何影响速度限制。


差异极限和最大极限



限制为 -规则的保证速度。 希望所有Limit at的总和不超过信道的带宽。 始终小于最大值。
最大限制 -规则的最大速度。 如果队列的“预算”允许,则将分配最大带宽。


通常,在简化队列中仅指示“最大限制”,这可以正常工作,但是在级联队列配置中,应同时指定两个限制。


实践部分


在[队列]-> [简单队列]中配置简单队列。
规则从上到下交替处理,第一个合适的规则应用于传递的数据包。 实际上,可以通过在上面放置更具体的规则来对任何规则进行例外处理。


主机/子网/接口速度限制


通常在有必要降低特定用户的速度时使用。
名称:任何名字
目标:地址,子网或接口。
目标上传:传出速度限制。
Targer下载:传入速度限制。


速度限制为1Mbit /秒:



 /queue simple add max-limit=1M/1M name=Limit-For-100.200 queue=default/default target=192.168.100.200/32 

在统计信息中,您可以查看目标的当前速度,队列中的数据包数量和丢弃的数据包数量。


远程资源的速度限制


没有标签包装的选项。


在dst字段中,可以类似于target来指定:ip,子网,接口。 在现代Internet的条件下,这还不够,但是对于小型公司和办公室之间的速度限制可能很有用。



 /queue simple add dst=192.168.200.10/32 max-limit=10M/10M name=Limit-For-Fileserver target=192.168.100.0/24 

子网参与者之间的平均信道划分(pcq)


一种规则可以节省一位用户从独占通道捕获中获得的家庭或办公室子网(在示例中为50Mb / sec,调整为您的通道)。



指定的pcq队列存在于基本配置中,但是如果有更改,我会附上屏幕截图。



 # /queue type add kind=pcq name=pcq-upload-default pcq-burst-rate=0 pcq-burst-threshold=0 pcq-burst-time=10s pcq-classifier=src-address pcq-dst-address-mask=32 pcq-dst-address6-mask=128 pcq-limit=50KiB pcq-rate=0 pcq-src-address-mask=32 pcq-src-address6-mask=128 pcq-total-limit=2000KiB add kind=pcq name=pcq-download-default pcq-burst-rate=0 pcq-burst-threshold=0 pcq-burst-time=10s pcq-classifier=dst-address pcq-dst-address-mask=32 pcq-dst-address6-mask=128 pcq-limit=50KiB pcq-rate=0 pcq-src-address-mask=32 pcq-src-address6-mask=128 pcq-total-limit=2000KiB # Simple queues /queue simple add max-limit=50M/50M name=Limit-Equivalent queue=pcq-upload-default/pcq-download-default target=192.168.100.0/24 

在“统计信息”选项卡上,您可以查看队列中当前有多少个pcq线程。



标签交通


dst选项非常有限,如果要使用域名或地址列表,则必须使用流量标记。 例如,我们将删除对yandex.ru域的限制(是的,在那里连接了一堆cdn'ok等,对于正常操作,您需要添加它们)。


在最新版本中,可以将域名添加到地址列表,mikrotik会自动解析它们并添加动态条目。



为指定的地址标记http / https流量(连接和连接中的数据包):





简单队列中的规则:



 #   /ip firewall address-list add address=yandex.ru list=ForQueues add address=yastatic.net list=ForQueues #    /ip firewall mangle add action=mark-connection chain=forward connection-state=new dst-address-list=ForQueues dst-port=80,443 new-connection-mark=Mark-ForQueues passthrough=yes protocol=tcp src-address=192.168.100.0/24 add action=mark-packet chain=forward connection-mark=Mark-ForQueues new-packet-mark=Mark-Packet-ForQueues passthrough=no #  Simple Queue /queue simple add max-limit=1M/1M name=Limit-For-Yandex packet-marks=Mark-Packet-ForQueues target=192.168.100.0/24 

级联队列


上面所说的全部是指限制和划分网络参与者之间的速度,是时候谈谈流量优先级的话题了。 通常,在有限且繁忙的频道中进行交互式通信(voip,vcs,ssh,rdp等)是必需的。


对于级联队列,Parent参数负责,它引用“父”队列。 要正常工作,父队列必须捕获“子”队列中的所有流量。


Priority参数负责将哪些流量添加到较早的队列中,它仅在子队列中起作用(如果没有“子”,则在“父”队列中起作用),可以采用从1(最高优先级)到8的值,并且没有任何值常见于QoS(DSCP; TOS)标签。


流量预标记:



 /ip firewall mangle add action=mark-connection chain=forward connection-state=related,new dst-port=5060,10000-20000 in-interface=br-lan new-connection-mark=mark-conn-voip passthrough=yes protocol=udp add action=mark-packet chain=forward connection-mark=mark-conn-voip new-packet-mark=mark-pkg-voip passthrough=no add action=mark-connection chain=forward connection-state=new dst-port=80,443 in-interface=br-lan new-connection-mark=mark-conn-web passthrough=yes protocol=tcp 

SimpleQueue中的队列:







 /queue simple add limit-at=24M/24M max-limit=25M/25M name=main target=10.10.10.0/24 add limit-at=5M/5M max-limit=8M/8M name=voip packet-marks=mark-pkg-voip parent=main priority=1/1 queue=pcq-upload-default/pcq-download-default target="" add limit-at=10M/10M max-limit=20M/20M name=web packet-marks=mark-pkg-web parent=main priority=2/2 queue=pcq-upload-default/pcq-download-default target="" add limit-at=10M/10M max-limit=20M/20M name=other packet-marks=mark-pkg-other parent=main priority=3/3 queue=pcq-upload-default/pcq-download-default target="" 

现在,如果您需要限制一个IP,只需将规则放在队列的前面即可。


后记


“简单队列”是用于家庭和SOHO配置的一种非常有趣且实用的工具,只需一条规则(无需借助流量标签),您就可以解决一台设备捕获信道的问题。 但是,如果您使用FastTrack,则无需考虑队列-流量将经过它们。


对于更复杂的配置,有队列树(HTB树)。

Source: https://habr.com/ru/post/zh-CN420117/


All Articles