10.4. 品质服务

10.4.1. 原则与机制

服务品质 (Quality of Service 或缩写为 QoS) 系指提供应用时足以保证或改进服务品质的技术。最常见的技术包括分类网络流量、及依照其类别区分流量的作用。这种区分服务的概念是 流量成形,限制部分服务或主机的数据传输率,使其不致塞饱可用的带宽以及压缩其他的服务。流量成形是 TCP 流量的特定形式,此协议自动调整可用的频。

CULTURE Net neutrality and QoS

Network neutrality is achieved when Internet service providers treat all Internet communications equally, that is, without any access limitation based on content, user, website, destination address, etc.

Quality of service can be implemented in a net neutral Internet, but only if Internet service providers can’t charge a special fee for a higher-quality service.

也可能改变流量的优先级,允许与交互服务有关的 (如 sshtelnet) 或只服务小量数据的封包优先处理。

Debian 核心包括 QoS 必备的功能与相关的模块。这些模块提供多样服务,多半系供 IP 封包数组使用;这些数组行为包括多种可能的需求。

文化 LARTC — Linux 高端路由与流量控制

The Linux Advanced Routing & Traffic Control HOWTO is the reference document covering everything there is to know about network quality of service.

https://www.lartc.org/howto/

10.4.2. 配置与应用

经由 tc 命令 (由 iproute 软件包提供) 设置 QoS 参数。因为其接口较为复杂,建议使用高端的工具。

10.4.2.1. 减少延迟:wondershaper

wondershaper (在同名的软件包中) 的主要目的是最小化独立网络负载的延迟。经由限制整体流量的值缩短链接的饱和值。

配置网络接口后,运行 wondershaper *interface* *download_rate* *upload_rate*命令,设置流量控制。可以是 eth0ppp0 接口,两者的速度均以每秒千位为单位。wondershaper remove *interface* 命令可以在特定接口停用流量控制。

对于一个以太网连接,这个脚本最好在接口配置完成以后调用。这个操作可以通过添加updown操作到/etc/network/interfaces文件来分别在接口配置前,配置完成后运行。比如:

例 10.9. 对文件/etc/network/interfaces的变更

  1. iface eth0 inet dhcp
  2. up /sbin/wondershaper eth0 500 100
  3. down /sbin/wondershaper remove eth0

对于PPP的情况,只要连接已建立,就可以在/etc/ppp/ip-up.d/生成一个脚本调用wondershaper命令来使能流量控制。

进阶优化配置

文件/usr/share/doc/wondershaper/README.Debian.gz描述了由包维护者推荐的,一些细节的配置方式。尤其是,它建议测量下载和上传速度来最好评估实际限制。

10.4.2.2. 标准配置

Barring a specific QoS configuration, the Linux kernel uses the pfifo_fast queue scheduler, which provides a few interesting features by itself. The priority of each processed IP packet is based on the DSCP field (Differentiated of Services Code Point) of this packet; modifying this 6-bit field is enough to take advantage of the scheduling features. Refer to https://en.wikipedia.org/wiki/Differentiated_services#Class_Selector for more information.

The DSCP field can be set by applications that generate IP packets, or modified on the fly by netfilter. The following rules are sufficient to increase responsiveness for a server’s SSH service, note that the DSCP field must be set in hexadecimal:

  1. nft add table ip mangle
  2. nft add rule ip mangle PREROUTING tcp sport 22 counter ip dscp set 0x04
  3. nft add rule ip mangle PREROUTING tcp dport 22 counter ip dscp set 0x04