RouterOS 标记中的 mark-connection 和 mark-packet 区别

在 MikroTik 路由器的防火墙规则中, mark-connectionmark-packet 是两种常用的标记方法。它们的主要区别和应用场景如下

标记功能的区别

mark-connection

用于标记同一连接中的所有数据包。适合需要对整个连接进行统一处理的场景, 比如区分上传和下载流量

  • 优点: 只需对新连接标记一次, 后续所有属于该连接的数据包都会继承标记, 效率较高
  • 使用场景: 识别双向流量 (上传和下载), 多线路策略路由等

mark-packet

用于标记单个数据包。适合对每个数据包进行独立判断的场景

  • 优点: 可以精确标记每个数据包, 适合更细粒度的控制
  • 使用场景: 区分小数据包、TCP 标志 (如 SYN 包) 优先处理等

性能分析

mark-connection

/ip firewall mangle
add chain=prerouting action=mark-connection new-connection-mark=HTTP protocol=tcp dst-port=80 in-interface=bridge-local
add chain=prerouting action=mark-packet new-packet-mark=HTTP in-interface=bridge-local connection-mark=HTTP

上述规则中, 第一条规则只需判断新连接是否符合条件并进行标记。第二条规则则直接根据连接标记对数据包进行处理, 无需重复判断协议和端口等条件。

  • 优势: 在数据包处理过程中, 减少了重复判断的性能开销

mark-packet

/ip firewall mangle
add chain=prerouting action=mark-packet new-packet-mark=HTTP protocol=tcp dst-port=80 in-interface=bridge-local
add chain=prerouting action=mark-packet new-packet-mark=HTTP protocol=tcp dst-port=80 in-interface=pppoe-out1

上述规则对经过的每个数据包都需要判断以下条件

  • 是否为 TCP 协议?
  • 目标端口是否为 80?
  • 进入的网络端口是否符合条件?

由于每个数据包都需要逐一匹配规则, 性能开销较大

QoS 场景中的选择

在 QoS 场景中使用 mark-connection 还是 mark-packet ?

  • 在 QoS 场景中, 上传和下载需要分开处理, 因此一般会使用 mark-packet 来标记单向数据包
  • 标记小数据包或优先处理 TCP SYN 包等场景, 使用 mark-packet
  • 标记双向流量时, mark-connection 和 mark-packet 都可以, 但 mark-connection 更优

多线路带宽叠加和策略路由

在多线路叠加和策略路由中, 需要确保同一连接的所有数据包通过同一出口。此时, mark-connection 是更好的选择, 因为它可以确保整个连接的流量保持一致性

示例规则, 先标记数据再标记路由

/ip firewall mangle
add chain=prerouting action=mark-connection new-connection-mark=pppoe_out1_conn protocol=tcp dst-port=80 connection-state=new
add chain=prerouting action=mark-routing new-routing-mark=to_pppoe_out1 connection-mark=pppoe_out1_conn

我实际使用的规则

/ip firewall mangle
add chain=prerouting action=mark-connection in-interface=WAN-1000M-CU-vrrp4-pppoe new-connection-mark=WAN-1000M-CU-vrrp4-pppoe_conn passthrough=yes comment=WAN-1000M-CU-vrrp4-pppoe
add chain=prerouting action=mark-routing in-interface=LAN1 new-routing-mark=to_WAN-1000M-CU-vrrp4-pppoe connection-mark=WAN-1000M-CU-vrrp4-pppoe_conn passthrough=yes

总结

  • mark-connection: 适用于需要对整个连接进行统一处理的场景, 效率更高, 推荐用于双向流量标记和策略路由
  • mark-packet: 适用于需要对每个数据包进行独立标记的场景, 适合更细粒度的流量控制

原文

ROS标记中的mark-connection和mark-packet区别

最后更新于 2021-06-17
使用 Hugo 构建
主题 StackJimmy 设计