New Packet Mark 的作用是:
给单个数据包贴一个内部标签, 让后面的 Queue Tree / Queue 能“认出来、区别对待”。
它本身:
不限速
不丢包
不决定优先级
它只是一个 分类标签(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 |
路由决策 | 策略路由 |
本文讨论的就是 第二种:Packet Mark。
二、什么是 Packet(数据包)?
这是 QoS 里一个非常容易被忽略、但极其重要的概念。
一个“网页请求”:
不是一个包
甚至不是几个包
真实情况是:
- 一个 TCP 连接
- 里面包含 成百上千个数据包
- 每个包:
- 大小不同
- 方向不同
- 到达时间不同
关键事实:
Queue Tree 只能处理“包”
它根本看不到“连接”
因此结论非常明确:
想让 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 只能识别它
- 用于精确调度
这是 RouterOS 官方和社区长期验证过的标准写法。
五、passthrough=no 和 Packet Mark 的关系
你在规则中使用了:
passthrough=no
它的含义是:
一个包一旦被打上这个
packet-mark, 后续的 mangle 规则将不再处理这个包。
这样做的目的只有一个:
- 防止同一个包被多次打不同的 packet-mark
- 保证:一个包 → 只进入一个队列
如果没有这一步,QoS 行为会变得不可预测。
六、为什么 Queue Tree 只认 Packet Mark?
Queue Tree 的核心匹配条件是:
packet-mark=web_pkt
它的逻辑非常“死板”:
“我只接收 packet-mark = web_pkt 的包”
Queue Tree 完全不关心:
- 端口
- IP
- 连接状态
- connection-mark
所有复杂判断,必须在 mangle 阶段提前完成。
七、结合「网页优先 QoS」走一遍完整流程
以“打开网页”为例:
浏览器发起 TCP SYN
→ mangle 命中 80/443
→ 连接被标记为 web_conn
后续网页数据包
→ 根据 connection-mark=web_conn
→ 每个包被标记为 web_pkt
包进入 Queue Tree
→ 命中:
packet-mark=web_pkt
priority=2
同时存在的下载 / 视频包
→ priority=8
→ 被高优先级网页包插队
最终效果:网页始终流畅
八、常见误解澄清
New Packet Mark = 限速 不是。 限速只发生在 Queue / Queue Tree。
New Packet Mark 会改变包内容 不会。 它只是 RouterOS 内部的逻辑标签。
一个包可以有多个 packet-mark
不可以。
后打的会覆盖前一个,所以必须合理使用 passthrough=no。
九、一句话终极记忆
Connection Mark:这是哪一条路 Packet Mark:这是哪一辆车 Queue Tree:哪条道先走