如果大量数据正在通过您的链路下载或上传,并且您尝试通过 telnet 或 ssh 进行一些维护,这可能不会很顺利。其他数据包会阻止您的击键。如果有一种方法可以让您的交互式数据包绕过大量流量,那不是很好吗?Linux 可以为您做到这一点!
和以前一样,我们需要处理双向流量。显然,如果您的链路两端都有 Linux 机器,这将效果最佳,尽管其他 UNIX 也能做到这一点。请咨询您当地的 Solaris/BSD 专家。
标准的 pfifo_fast 调度器有 3 个不同的“频带”。频带 0 中的流量首先被传输,之后才会考虑频带 1 和 2 中的流量。至关重要的是,我们的交互式流量必须在频带 0 中!
我们公然地从(即将过时的)ipchains HOWTO 中改编。
IP 报头中有四个很少使用的位,称为服务类型 (TOS) 位。它们影响数据包的处理方式;这四个位是“最小延迟”、“最大吞吐量”、“最大可靠性”和“最小成本”。只允许设置其中一位。ipchains TOS 篡改代码的作者 Rob van Nieuwkerk 这样描述它
Especially the "Minimum Delay" is important for me. I switch it on for "interactive" packets in my upstream (Linux) router. I'm behind a 33k6 modem link. Linux prioritizes packets in 3 queues. This way I get acceptable interactive performance while doing bulk downloads at the same time. |
最常见的用法是将 telnet 和 ftp 控制连接设置为“最小延迟”,将 FTP 数据设置为“最大吞吐量”。这将通过以下方式完成,在您的上游路由器上
# iptables -A PREROUTING -t mangle -p tcp --sport telnet \ -j TOS --set-tos Minimize-Delay # iptables -A PREROUTING -t mangle -p tcp --sport ftp \ -j TOS --set-tos Minimize-Delay # iptables -A PREROUTING -t mangle -p tcp --sport ftp-data \ -j TOS --set-tos Maximize-Throughput |
现在,这仅适用于从您的 telnet 远程主机到本地计算机的数据。反过来似乎是为您完成的,即 telnet、ssh 和朋友都会自动在外发数据包上设置 TOS 字段。
如果您的应用程序没有这样做,您始终可以使用 netfilter 来完成。在您的本地机器上
# iptables -A OUTPUT -t mangle -p tcp --dport telnet \ -j TOS --set-tos Minimize-Delay # iptables -A OUTPUT -t mangle -p tcp --dport ftp \ -j TOS --set-tos Minimize-Delay # iptables -A OUTPUT -t mangle -p tcp --dport ftp-data \ -j TOS --set-tos Maximize-Throughput |