當(dāng)前位置 主頁(yè) > 技術(shù)大全 >
無(wú)論是為了保證服務(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)和流量類(lèi)別(class)體系結(jié)構(gòu),允許對(duì)進(jìn)入或離開(kāi)網(wǎng)絡(luò)接口的數(shù)據(jù)流進(jìn)行復(fù)雜的整形和過(guò)濾
TC通過(guò)以下三個(gè)核心組件實(shí)現(xiàn)流量控制: 1.隊(duì)列規(guī)則(qdisc):定義數(shù)據(jù)包的排隊(duì)和發(fā)送方式
常見(jiàn)的隊(duì)列規(guī)則包括pfifo_fast、htb(層次令牌桶)、tbf(令牌桶過(guò)濾器)和prio(優(yōu)先級(jí)隊(duì)列)
2.類(lèi)別(class):對(duì)不同類(lèi)型的流量應(yīng)用不同的策略
每個(gè)類(lèi)別可以包含其他類(lèi)別,形成層次結(jié)構(gòu),從而實(shí)現(xiàn)更復(fù)雜的流量管理
3.過(guò)濾器(filter):根據(jù)指定的條件將流量分配到不同的類(lèi)別中
過(guò)濾器可以基于IP地址、端口、協(xié)議等屬性進(jìn)行匹配
二、TC的基本使用方法 TC命令的基本格式如下: tc 【OPTIONS】 OBJECT ACTION【FILTER】 - OPTIONS:可選參數(shù),如-s顯示統(tǒng)計(jì)數(shù)據(jù),-d刪除對(duì)象等
- OBJECT:操作對(duì)象,可以是qdisc(隊(duì)列規(guī)則)、class(流量類(lèi)別)或filter(過(guò)濾器)
- ACTION:針對(duì)對(duì)象的操作,如add(添加)、change(更改)、replace(替換)、delete(刪除)等
- FILTER:對(duì)象的具體參數(shù),如接口名稱(chēng)(dev eth0)、父級(jí)分類(lèi)ID(parent ...)、qdisc類(lèi)型(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. 添加和刪除類(lèi)別 創(chuàng)建一個(gè)類(lèi)別,限制帶寬為1Mbps: tc class add dev eth0 parent 1: classid 1:1 htb rate 1mbit 刪除類(lèi)別: tc class del dev eth0 parent 1: classid 1:1 3. 添加和刪除過(guò)濾器 創(chuàng)建一個(gè)過(guò)濾器,匹配目的IP地址為192.168.1.2的流量,并將其分配到類(lèi)別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 刪除過(guò)濾器: 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ò)抖動(dòng) 增加100毫秒的基礎(chǔ)延遲,并允許±10毫秒的波動(dòng): tc qdisc add dev eth0 root netem delay 100ms 10ms 刪除抖動(dòng)設(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. 對(duì)ifb0進(jìn)行限速
限制IP為1.1.1.3的下載速度: 1. 設(shè)置根qdisc(隊(duì)列規(guī)則)
2. 創(chuàng)建子類(lèi)進(jìn)行帶寬限制
3. 創(chuàng)建過(guò)濾器以識(shí)別特定流量
具體步驟如下: 創(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 對(duì)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