如何检查 Linux 中网络 QoS 策略是否激活

LinuxLinuxBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在这个实验中,你将学习如何检查 Linux 中网络服务质量(Quality of Service,QoS)策略是否处于激活状态。你将使用强大的 tc 命令来列出并检查网络接口上配置的 QoS 规则和类别。

具体来说,你将首先使用 tc qdisc show 列出活动的排队规则,了解它们在管理网络流量中的作用。然后,你将探索如何使用 tc class 检查 QoS 类别,这些类别用于对不同类型的流量进行分类和优先级排序。最后,你将学习如何检查 /etc/network 中的网络配置文件,以了解 QoS 策略是如何进行持久化配置的。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicSystemCommandsGroup(["Basic System Commands"]) linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/RemoteAccessandNetworkingGroup(["Remote Access and Networking"]) linux/BasicSystemCommandsGroup -.-> linux/help("Command Assistance") linux/BasicSystemCommandsGroup -.-> linux/man("Manual Access") linux/BasicFileOperationsGroup -.-> linux/ls("Content Listing") linux/BasicFileOperationsGroup -.-> linux/cat("File Concatenating") linux/RemoteAccessandNetworkingGroup -.-> linux/ifconfig("Network Configuring") linux/RemoteAccessandNetworkingGroup -.-> linux/netstat("Network Monitoring") linux/RemoteAccessandNetworkingGroup -.-> linux/ip("IP Managing") subgraph Lab Skills linux/help -.-> lab-558741{{"如何检查 Linux 中网络 QoS 策略是否激活"}} linux/man -.-> lab-558741{{"如何检查 Linux 中网络 QoS 策略是否激活"}} linux/ls -.-> lab-558741{{"如何检查 Linux 中网络 QoS 策略是否激活"}} linux/cat -.-> lab-558741{{"如何检查 Linux 中网络 QoS 策略是否激活"}} linux/ifconfig -.-> lab-558741{{"如何检查 Linux 中网络 QoS 策略是否激活"}} linux/netstat -.-> lab-558741{{"如何检查 Linux 中网络 QoS 策略是否激活"}} linux/ip -.-> lab-558741{{"如何检查 Linux 中网络 QoS 策略是否激活"}} end

使用 tc qdisc 列出 QoS 规则

在这一步中,你将学习如何使用 tc 命令列出服务质量(Quality of Service,QoS)规则。QoS 是一组用于管理网络流量的技术,旨在减少数据包丢失、延迟和抖动。tc 命令是 Linux 中用于配置流量控制的强大工具。

tc qdisc 命令用于管理排队规则。排队规则(queueing discipline,qdisc)是 Linux 内核中决定数据包调度的部分。

要列出网络接口上当前配置的 QoS 规则,请打开终端并输入以下命令:

tc qdisc show

按下回车键。

你应该会看到类似以下的输出:

qdisc noqueue 0: dev lo root refcnt 2
qdisc fq_codel 0: dev eth0 root refcnt 2 limit 10240p flows 1024 quantum 1514 target 5ms interval 100ms memory_limit 32Mb ecn

让我们来分析一下这个输出:

  • qdisc:表示这一行描述的是一个排队规则。
  • noqueue 0: dev lo:显示的是回环接口(lo)的 qdisc。noqueue 表示没有进行排队,因为回环接口上的流量通常不需要进行整形。
  • fq_codel 0: dev eth0:显示的是 eth0 网络接口的 qdisc。fq_codel 是一种特定类型的 qdisc,它将公平排队(Fair Queueing,FQ)与受控延迟(Controlled Delay,CoDel)相结合。
  • root:表示这是该设备的根 qdisc。
  • 其余参数(refcntlimitflows 等)是 fq_codel qdisc 特有的,用于控制其行为。

你看到的输出可能会因 LabEx 环境中网络接口的默认配置而有所不同。重要的是要理解 tc qdisc show 会列出活动的排队规则。

现在,尝试列出特定接口(如 eth0)的 qdisc:

tc qdisc show dev eth0

按下回车键。

此命令将仅显示 eth0 接口上配置的 qdisc。

理解 tc qdisc show 的输出是使用 tc 管理网络流量的第一步。

点击 继续 进入下一步。

使用 tc class 检查 QoS 类别

在上一步中,你了解了排队规则(qdisc)。现在,让我们使用 tc class 命令来探索 QoS 类别。

虽然排队规则(qdisc)定义了接口上的整体调度行为,但类别用于某些排队规则(如 HTBCBQ)中,以创建分层结构并对不同类型的流量应用不同的规则。可以将类别视为排队规则中的分类或细分。

要列出当前配置的 QoS 类别,你需要指定网络接口以及父排队规则或类别。由于 eth0 上默认的 fq_codel 排队规则不像其他一些排队规则那样使用类别层次结构,因此直接运行 tc class show dev eth0 最初可能不会显示任何类别。

无论如何,让我们尝试运行该命令以查看输出:

tc class show dev eth0

按下回车键。

你可能看不到任何输出,或者看到表明未定义类别的输出,类似于以下内容:

这是预期的结果,因为 fq_codel 是无类别排队规则。无类别排队规则在不需要将流量分类到不同组的情况下执行其工作。

但是,如果配置了像 HTB(分层令牌桶,Hierarchical Token Bucket)或 CBQ(基于类别的排队,Class Based Queueing)这样的排队规则,你将看到该排队规则下定义的类别列表,显示它们的参数,如带宽限制、优先级等。

例如,如果在 eth0 上配置了 HTB,输出可能如下所示(这只是一个示例,在当前环境中你不会看到此输出):

class htb 1:1 root prio 0 rate 100Mbit ceil 100Mbit burst 1600b cburst 1600b
class htb 1:10 parent 1:1 prio 1 rate 50Mbit ceil 80Mbit burst 1600b cburst 1600b
class htb 1:20 parent 1:1 prio 2 rate 20Mbit ceil 30Mbit burst 1600b cburst 1600b

在这个假设的示例中:

  • class htb:表示一个 HTB 类别。
  • 1:1:根类别的句柄。
  • 1:101:20:根类别 1:1 下子类别句柄。
  • rateceil:定义该类别的保证带宽和最大带宽。
  • prio:定义该类别的优先级。

虽然在默认配置下你看不到类别,但理解 tc class show 命令对于在配置了有类别排队规则时进行操作至关重要。

点击 继续 进入下一步。

检查 /etc/network 中的 QoS 配置

在前面的步骤中,你使用 tc 命令查看了当前活动的 QoS 配置。虽然 tc 显示的是运行时状态,但配置文件通常决定了系统启动或网络接口启用时这些设置的应用方式。

在像 Ubuntu 这样基于 Debian 的系统上,网络接口配置通常在 /etc/network/interfaces 文件以及 /etc/network/interfaces.d/ 目录下的文件中进行管理。这些文件可以包含在配置接口时要执行的命令,包括用于设置 QoS 的 tc 命令。

让我们检查一下主要的网络配置文件。打开终端并使用 cat 命令查看 /etc/network/interfaces 的内容:

cat /etc/network/interfaces

按下回车键。

你将看到基本的网络接口配置。在这个 LabEx 环境中,输出可能如下所示:

## interfaces(5) file used by ifup(8) and ifdown(8)
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

此文件定义了回环接口(lo)和主网络接口(eth0),后者配置为使用 DHCP 来获取 IP 地址。

对于复杂的设置,QoS 配置通常不会直接放在 /etc/network/interfaces 中。相反,它们通常包含在单独的脚本或配置片段中,这些脚本或片段在接口启用时执行。这些片段可能位于 /etc/network/if-up.d/ 目录中。该目录中的脚本会在网络接口启用后执行。

让我们列出 /etc/network/if-up.d/ 目录中的文件,看看是否有与 QoS 或流量控制相关的脚本:

ls /etc/network/if-up.d/

按下回车键。

输出将显示该目录中存在的文件。你可能会看到各种与网络配置相关的脚本,但在这个基本环境中,可能没有专门用于复杂 QoS 设置的脚本。

## Example output (may vary)
avahi-autoipd  ethtool  mountnfs  ntp  openssh-server  resolvconf  upstart

如果有设计用于在启动时应用 tc 规则的脚本,它们通常会放在这里。例如,该目录中名为 qos-setup 的脚本可能包含用于配置排队规则(qdisc)和类别的 tc 命令。

虽然在这个基本环境的这些标准位置中你没有找到明确的 QoS 配置,但了解在哪里查找(/etc/network/interfaces/etc/network/interfaces.d//etc/network/if-up.d/)对于理解如何在 Linux 系统上持久地配置 QoS 至关重要。

点击 继续 完成此实验。

总结

在这个实验中,你学习了如何检查 Linux 中网络 QoS 策略是否处于激活状态。你首先使用 tc qdisc show 命令列出了网络接口上的活动排队规则(qdisc),了解到排队规则决定了数据包调度,是 QoS 配置的关键部分。你通过检查输出识别了排队规则的类型和关联的网络接口,还学习了如何使用 tc qdisc show dev <interface> 列出特定接口的排队规则。