RouterOS QoS 核心概念:什么是 New Packet Mark?

New Packet Mark 的作用是:

单个数据包贴一个内部标签, 让后面的 Queue Tree / Queue 能“认出来、区别对待”。

它本身:

  • :cross_mark: 不限速
  • :cross_mark: 不丢包
  • :cross_mark: 不决定优先级

它只是一个 分类标签(classification tag)


一、先分清:RouterOS 里的三种「标记」

理解 New Packet Mark 之前,必须先知道 RouterOS 并不只有一种“标记”。

标记类型 mangle 选项 标记对象 主要用途
Connection Mark new-connection-mark 一个连接(五元组) 判断“这条连接是什么类型”
Packet Mark new-packet-mark 每一个数据包 QoS / Queue Tree
Routing Mark new-routing-mark 路由决策 策略路由

:backhand_index_pointing_right: 本文讨论的就是 第二种:Packet Mark


二、什么是 Packet(数据包)?

这是 QoS 里一个非常容易被忽略、但极其重要的概念。

一个“网页请求”:

  • :cross_mark: 不是一个包
  • :cross_mark: 甚至不是几个包

真实情况是:

  • 一个 TCP 连接
  • 里面包含 成百上千个数据包
  • 每个包:
    • 大小不同
    • 方向不同
    • 到达时间不同

关键事实:

:backhand_index_pointing_right: Queue Tree 只能处理“包” :backhand_index_pointing_right: 它根本看不到“连接”

因此结论非常明确:

想让 QoS 生效,必须使用 Packet Mark。


三、New Packet Mark 在 mangle 中到底做了什么?

一条典型规则:

action=mark-packet new-packet-mark=web_pkt

它的真实含义等价于:

“凡是匹配到这条规则的每一个数据包, 都在 RouterOS 内部标记为:web_pkt

之后:

  • Queue Tree
  • Simple Queue(部分场景)
  • Torch / 统计信息

都可以根据这个标记对流量进行分类处理。


四、为什么不能只用 Connection Mark?

在标准 QoS 配置中,通常是两步走

# 第一步:判断“这是什么连接”
action=mark-connection new-connection-mark=web_conn

# 第二步:给这个连接里的每个包打标
action=mark-packet new-packet-mark=web_pkt

原因在于两种标记的职责不同:

Connection Mark:

  • 只在连接建立时标一次
  • CPU 开销小
  • 适合做复杂判断 (端口、协议、连接字节数等)

Packet Mark:

  • 每一个包都会被打标
  • Queue Tree 只能识别它
  • 用于精确调度

:backhand_index_pointing_right: 这是 RouterOS 官方和社区长期验证过的标准写法。


五、passthrough=no 和 Packet Mark 的关系

你在规则中使用了:

passthrough=no

它的含义是:

一个包一旦被打上这个 packet-mark后续的 mangle 规则将不再处理这个包。

这样做的目的只有一个:

  • 防止同一个包被多次打不同的 packet-mark
  • 保证:一个包 → 只进入一个队列

:warning: 如果没有这一步,QoS 行为会变得不可预测。


六、为什么 Queue Tree 只认 Packet Mark?

Queue Tree 的核心匹配条件是:

packet-mark=web_pkt

它的逻辑非常“死板”:

“我只接收 packet-mark = web_pkt 的包”

Queue Tree 完全不关心

  • 端口
  • IP
  • 连接状态
  • connection-mark

:backhand_index_pointing_right: 所有复杂判断,必须在 mangle 阶段提前完成


七、结合「网页优先 QoS」走一遍完整流程

以“打开网页”为例:

:one: 浏览器发起 TCP SYN → mangle 命中 80/443 → 连接被标记为 web_conn

:two: 后续网页数据包 → 根据 connection-mark=web_conn → 每个包被标记为 web_pkt

:three: 包进入 Queue Tree → 命中:

packet-mark=web_pkt
priority=2

:four: 同时存在的下载 / 视频包 → priority=8 → 被高优先级网页包插队

:backhand_index_pointing_right: 最终效果:网页始终流畅


八、常见误解澄清

New Packet Mark = 限速 不是。 限速只发生在 Queue / Queue Tree。

New Packet Mark 会改变包内容 不会。 它只是 RouterOS 内部的逻辑标签。

一个包可以有多个 packet-mark 不可以。 后打的会覆盖前一个,所以必须合理使用 passthrough=no


九、一句话终极记忆

Connection Mark:这是哪一条路 Packet Mark:这是哪一辆车 Queue Tree:哪条道先走