Iptables 下的流控(ToS)

网络中的数据传输,路径可选范围很广。有些路径可靠性高(丢包少),有些路径对数据包的改动很大,还有些路径只纯做数据转发。不同路径的延迟、宽带波动同样千差万别。因此,IETF 就规则了服务类型(Type Of Service),以些来让网络设备为标记的数据做路由时来区分对待。

背景

当然,我们设置的 TOS 可能会被网络提供商忽略或重置,但至少在我们局域网内,路由器 / 交换机 (支持 QoS) 会为不同的数据提供不同的转发优先级。

TOS 值

十六进制 十进制 名称
0x10 16 Minimize-Delay
0x08 8 Maximize-Throughput
0x04 4 Maximize-Reliability
0x02 2 Minimize-Cost
0x00 0 Normal-Service

OS bit manipulation

The classes of network service available are:

minimum delay

当数据需要使用最快的路径进行传输时使用此服务,如电话、ssh 会话、telnet 会话、在线视频等等。

maximum throughput

数据传输不关心延迟但关心网络路径的吞吐量时使用此服务,如 web 服务、ftp 传输等等。

maximum reliability

当数据传输需要最大的可靠性时(减少数据重复传输)使用此选项,如简单网络管理协议,DNS 等等。

minimum cost

当数据对延迟、宽带关心而关心 “Money” 时,使用此选项,以便网络中的路由器进行路径选择时使用花销最小的路径。

TOS 服务建议列表

TOS ANDmask XORmask Suggested Use
Minimum Delay 0x01 0x10 ftp, telnet, ssh
Maximum Throughput 0x01 0x08 ftp-data, www
Maximum Reliability 0x01 0x04 snmp, dns
Minimum Cost 0x01 0x02 nntp, smtp

使用例子

  • The general syntax used to match TOS bits looks like:
    1
    iptables -m tos --tos mnemonic [other-args] -j target
  • The general syntax used to set TOS bits looks like:
    1
    iptables [other-args] -j TOS --set mnemonic

Reference: