暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

Linux中tc命令详解

watson 2025-02-17
589

tc命令是Linux系统中的一个强大工具,用于配置和管理网络流量控制。它允许用户实现QoS(Quality of Service)策略,包括带宽限制、优先级控制、延迟保证等。以下是tc命令的详细介绍:


1. 基本概念

qdisc(队列规则):qdisc是queueing discipline的缩写,用于定义数据包在网络接口上的排队和调度策略。常见的qdisc类型包括:pfifo_fast(先进先出)、tbf(令牌桶过滤器)、htb(层次令牌桶过滤器)和sfq(随机公平队列)。

class(类别):class用于对流量进行分类和进一步限制。每个class都有一个唯一的classid,可以用来标识该规则。

filter(过滤器):filter用于根据特定条件对数据包进行分类,并将其分配到相应的class中。常见的过滤条件包括:协议类型、源/目的IP地址、源/目的端口号等。


2. 常用命令


2.1 tc qdisc命令


tc qdisc命令用于配置队列规则,即网络流量的调度策略。常用的调度策略有以下几种:


pfifo_fast:先进先出队列,适用于低延迟、高吞吐量的场景。

tbf:令牌桶过滤器,用于限制带宽和速率。

htb:层次令牌桶过滤器,用于实现QoS,可以对不同的流量进行不同的限制。

sfq:随机公平队列,用于公平分配带宽。


例如,以下命令将创建一个htb队列规则,限制eth0接口的带宽为1Mbps:


tc qdisc add dev eth0 root handle 1: htb default 1

tc class add dev eth0 parent 1: classid 1:1 htb rate 1mbit


2.2 tc class命令


tc class命令用于配置类别规则,即对不同的流量进行分类和限制。每个类别规则都有一个唯一的classid,可以用来标识该规则。常用的限制参数有以下几种:


rate:限制带宽速率。

ceil:限制带宽峰值速率。

burst:限制突发流量大小。

cburst:限制类别突发流量大小。


例如,以下命令将创建一个类别规则,将IP地址为192.168.1.2的流量限制为500Kbps:


tc class add dev eth0 parent 1:1 classid 1:10 htb rate 500kbit ceil 1mbit

tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dst 192.168.1.2 flowid 1:10


2.3 tc filter命令


tc filter命令用于配置过滤规则,即根据不同的条件过滤流量并将其分配到不同的类别中。常用的过滤条件有以下几种:


protocol:协议类型。

src/dst:源/目的IP地址。

sport/dport:源/目的端口号。

match:匹配特定的数据包。


例如,以下命令将创建一个过滤规则,将源IP地址为192.168.1.2的流量分配到类别1:10中:


tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip src 192.168.1.2 flowid 1:10


2.4 tc monitor命令


tc monitor命令用于实时监控网络流量和队列状态。可以使用以下命令启动tc monitor:


tc monitor


3. 使用示例


3.1 限制IP示例


假设我们想要限制IP地址为192.168.1.2的流量为500Kbps,可以按照以下步骤操作:


设置根qdisc (队列规则):

tc qdisc add dev eth0 root handle 1: htb default 1


创建子类进行带宽限制:

tc class add dev eth0 parent 1: classid 1:10 htb rate 500kbit ceil 1mbit


创建过滤器以识别特定流量:

tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dst 192.168.1.2 flowid 1:10


3.2 限制端口示例


假设我们想要限制源端口为80的流量为1Mbps,可以按照以下步骤操作:


设置根qdisc (队列规则):

tc qdisc add dev eth0 root handle 1: htb default 1


创建子类进行带宽限制:

tc class add dev eth0 parent 1: classid 1:1 htb rate 1mbit


创建端口过滤器:

tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip sport 80 0xffff flowid 1:1


4. 总结


tc命令是Linux系统中一个功能强大的网络流量控制工具。通过合理配置qdisc、class和filter,可以实现复杂的流量整形和QoS策略。掌握tc命令的使用对于网络管理员和开发人员来说至关重要。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论