當(dāng)前位置 主頁 > 技術(shù)大全 >
無論是為了保證服務(wù)質(zhì)量(QoS),限制帶寬,還是模擬網(wǎng)絡(luò)條件,Linux內(nèi)核中的TC(Traffic Control)工具都為我們提供了強(qiáng)大的功能
本文將詳細(xì)介紹TC的基本概念、使用方法、以及實(shí)際案例,幫助你更好地理解和運(yùn)用這一工具
一、TC的基本概念 TC(Traffic Control)是Linux內(nèi)核中提供的一個(gè)用于控制和管理網(wǎng)絡(luò)流量的強(qiáng)大工具
它基于內(nèi)核的隊(duì)列規(guī)則(qdisc)和流量類別(class)體系結(jié)構(gòu),允許對進(jìn)入或離開網(wǎng)絡(luò)接口的數(shù)據(jù)流進(jìn)行復(fù)雜的整形和過濾
TC通過以下三個(gè)核心組件實(shí)現(xiàn)流量控制: 1.隊(duì)列規(guī)則(qdisc):定義數(shù)據(jù)包的排隊(duì)和發(fā)送方式
常見的隊(duì)列規(guī)則包括pfifo_fast、htb(層次令牌桶)、tbf(令牌桶過濾器)和prio(優(yōu)先級隊(duì)列)
2.類別(class):對不同類型的流量應(yīng)用不同的策略
每個(gè)類別可以包含其他類別,形成層次結(jié)構(gòu),從而實(shí)現(xiàn)更復(fù)雜的流量管理
3.過濾器(filter):根據(jù)指定的條件將流量分配到不同的類別中
過濾器可以基于IP地址、端口、協(xié)議等屬性進(jìn)行匹配
二、TC的基本使用方法 TC命令的基本格式如下: tc 【OPTIONS】 OBJECT ACTION【FILTER】 - OPTIONS:可選參數(shù),如-s顯示統(tǒng)計(jì)數(shù)據(jù),-d刪除對象等
- OBJECT:操作對象,可以是qdisc(隊(duì)列規(guī)則)、class(流量類別)或filter(過濾器)
- ACTION:針對對象的操作,如add(添加)、change(更改)、replace(替換)、delete(刪除)等
- FILTER:對象的具體參數(shù),如接口名稱(dev eth0)、父級分類ID(parent ...)、qdisc類型(htb、pfifo_fast等)、速率限制(rate ...)等
1. 添加和刪除隊(duì)列規(guī)則 添加一個(gè)根隊(duì)列規(guī)則,使用htb調(diào)度策略: tc qdisc add dev eth0 root handle 1: htb default 1 刪除隊(duì)列規(guī)則: tc qdisc del dev eth0 root 2. 添加和刪除類別 創(chuàng)建一個(gè)類別,限制帶寬為1Mbps: tc class add dev eth0 parent 1: classid 1:1 htb rate 1mbit 刪除類別: tc class del dev eth0 parent 1: classid 1:1 3. 添加和刪除過濾器 創(chuàng)建一個(gè)過濾器,匹配目的IP地址為192.168.1.2的流量,并將其分配到類別1:10中: tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dst 192.168.1.2 flowid 1:10 刪除過濾器: tc filter del dev eth0 protocol ip parent 1:0 prio 1 handle 1:10 三、TC的實(shí)際應(yīng)用案例 1. 模擬網(wǎng)絡(luò)延遲 增加100毫秒的延遲: tc qdisc add dev eth0 root netem delay 100ms 刪除延遲設(shè)置: tc qdisc del dev eth0 root netem delay 100ms 2. 模擬網(wǎng)絡(luò)丟包 設(shè)置10%的丟包率: tc qdisc add dev eth0 root netem loss 10% 刪除丟包設(shè)置: tc qdisc del dev eth0 root netem loss 10% 3. 模擬網(wǎng)絡(luò)抖動 增加100毫秒的基礎(chǔ)延遲,并允許±10毫秒的波動: tc qdisc add dev eth0 root netem delay 100ms 10ms 刪除抖動設(shè)置: tc qdisc del dev eth0 root netem delay 100ms 10ms 4. 限制特定IP的帶寬 限制IP為1.1.1.3的上傳速度: 1. 創(chuàng)建虛擬網(wǎng)卡并啟用,暫定虛擬網(wǎng)卡名為ifb0
2. 創(chuàng)建Ingress隊(duì)列并進(jìn)行導(dǎo)流
3. 對ifb0進(jìn)行限速
限制IP為1.1.1.3的下載速度: 1. 設(shè)置根qdisc(隊(duì)列規(guī)則)
2. 創(chuàng)建子類進(jìn)行帶寬限制
3. 創(chuàng)建過濾器以識別特定流量
具體步驟如下: 創(chuàng)建虛擬網(wǎng)卡并啟用 ip link add name ifb0 type ifb ip link set dev ifb0 up 將ifb0添加到橋接或路由配置中(視情況而定) 例如,將其橋接到eth0 brctl addif br0 ifb0 創(chuàng)建Ingress隊(duì)列并進(jìn)行導(dǎo)流 tc qdisc add dev ifb0 handle ffff: ingress tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip src 1.1.1.3 action mirred egress redirect dev ifb0 對ifb0進(jìn)行限速 tc qdisc add dev ifb0 root handle 1: htb default 30 tc class add dev ifb0 parent 1: classid 1:1 htb rate 1mbit tc filter add dev ifb0 protocol ip parent 1:0 prio 1 u32 match ip src 1.1.1.3 flowid 1:1 5. 限制特定端口的帶寬 限制源端口為2049的流量帶寬: 設(shè)置根qdis