9.9. TOS 位操作

服务类型 (TOS) 位是 IP 报头中的一组四位标志。当这些位标志中的任何一个被设置时,路由器可能会以不同于未设置 TOS 位的报文的方式处理数据报。这四个位中的每一个都有不同的用途,并且在任何时候只能设置一个 TOS 位,因此不允许组合使用。这些位标志被称为服务类型位,因为它们使传输数据的应用程序能够告知网络它所需要的网络服务类型。

可用的网络服务类别有

最小延迟

当数据报从源主机传输到目标主机所需的时间(延迟)最为重要时使用。例如,网络提供商可能会同时使用光纤和卫星网络连接。通过卫星连接传输的数据需要传播更远的距离,因此它们的延迟通常高于同一端点之间基于陆地的网络连接。网络提供商可能会选择确保设置了此服务类型的数据报不通过卫星传输。

最大吞吐量

当任何时间段内传输的数据量很重要时使用。有许多类型的网络应用程序,其中延迟不是特别重要,但网络吞吐量很重要;例如,批量文件传输。网络提供商可能会选择通过高延迟、高带宽的路由(如卫星连接)来路由设置了此服务类型的数据报。

最大可靠性

当确保数据能够到达目的地而无需重新传输非常重要时使用。IP 协议可以通过任意数量的底层传输介质进行传输。虽然 SLIP 和 PPP 是足够的数据链路协议,但它们不如通过其他网络(如 X.25 网络)传输 IP 可靠。网络提供商可能会提供另一种网络,提供高可靠性,以承载在这种服务类型被选中时将使用的 IP。

最小成本

当最小化数据传输成本很重要时使用。在卫星上租用跨太平洋传输的带宽通常比在相同距离的光纤电缆上租用空间成本更低,因此网络提供商可能会选择同时提供两者,并根据您使用的网络收取不同的费用。在这种情况下,您的“最小成本”服务类型位可能会导致您的数据报通过成本较低的卫星路由进行路由。

9.9.1. 使用 ipfwadm 或 ipchains 设置 TOS 位

ipfwadmipchains 命令以非常相似的方式处理 TOS 位。在这两种情况下,您都需要指定一个规则来匹配设置了特定 TOS 位的报文,并使用-t参数来指定您希望进行的更改。

这些更改使用两位掩码指定。第一个位掩码与数据报的 IP 选项字段进行逻辑与运算,第二个位掩码与它进行逻辑异或运算。如果这听起来很复杂,我们稍后将为您提供启用每种服务类型所需的“配方”。

位掩码使用八位十六进制值指定。ipfwadmipchains 都使用相同的参数语法
-t andmask xormask

幸运的是,每次您希望设置特定类型的服务时,都可以使用相同的掩码参数,从而节省您计算它们的时间。它们在 表 9-3 中提供了一些建议的用途。

表 9-3. TOS 位掩码的建议用途

TOSAND 掩码XOR 掩码建议用途
最小延迟0x010x10ftp, telnet, ssh
最大吞吐量0x010x08ftp-data, www
最大可靠性0x010x04snmp, dns
最小成本0x010x02nntp, smtp

9.9.2. 使用 iptables 设置 TOS 位

iptables 工具允许您使用以下选项指定规则,这些规则仅捕获 TOS 位与某些预定值匹配的数据报:-m tos选项,以及使用以下目标为匹配规则的 IP 数据报设置 TOS 位:-j TOS目标。您只能在以下链上设置 TOS 位:FORWARDOUTPUT链。匹配和设置是完全独立的。您可以配置各种有趣的规则。例如,您可以配置一个规则来丢弃所有具有特定 TOS 位组合的数据报,或者一个规则来仅为来自某些主机的数据报设置 TOS 位。大多数情况下,您将使用包含匹配和设置的规则来执行 TOS 位转换,就像您可以为 ipfwadmipchains 所做的那样。

ipfwadmipchains 复杂的双掩码配置不同,iptables 使用更简单的方法,即直接指定 TOS 位应该匹配什么,或者应该将 TOS 位设置为什么。此外,您可以使用即将到来的表格中列出的更友好的助记符来指定 TOS 位,而无需记住和使用十六进制值。

用于匹配 TOS 位的一般语法如下所示
-m tos --tos mnemonic [other-args] -j target

用于设置 TOS 位的一般语法如下所示
[other-args] -j TOS --set mnemonic

请记住,这些通常会一起使用,但如果您的配置需要,它们也可以完全独立使用。

助记符十六进制
正常服务0x00
最小成本0x02
最大可靠性0x04
最大吞吐量0x08
最小延迟0x10