Linuxi liikluse juhtimine (tc): praktiline juhend
12 min lugemine - 5. juuni 2026

Ribalaiuse kontrollimine, liikluse prioriseerimine ning sissetuleva ja väljamineva liikluse kujundamine Linuxis tc abil. Töötavad HTB-, IFB-, DSCP- ja fq_codel-konfiguratsioonid reaalsete serverite jaoks.
Linuxi liikluse juhtimine (tc): praktiline juhend
Linuxi tc käsu abil saate otseselt kontrollida, kuidas teie server võrguliiklust haldab. Saate piirata ribalaiust teenuse kaupa, tagada interaktiivsete sessioonide (nt SSH) reageerimisvõime ka suurte andmeülekannete tippkoormuse ajal ning kujundada nii väljaminevat kui ka sissetulevat liiklust ühe tööriista abil. Käesolev juhend käsitleb põhimõisteid, toimivat HTB-seadistust, sissetuleva liikluse kujundamist IFB abil, DSCP-põhist prioriteerimist ning veaotsingut, kui midagi ei tööta.
Kuidas tc töötab
Iga tc seadistus koosneb neljast liikuvast osast:
- qdisc (järjekorrakorraldus). Võrguliidesega seotud ajastaja. See otsustab, kuidas pakette järjekorda lisatakse ja sealt eemaldatakse.
- Klass. Alajaotus klassipõhises qdisc-is. Mõelge sellele kui sõidurajale, millel on oma kiiruspiirang.
- Filter. Kontrollib pakettide päiseid (IP-aadresse, porte, märgistusi) ja määrab iga paketi klassi.
- Action. Mida paketiga juhtub, kui see vastab tingimustele: edastamine, kõrvaldamine, ümbersuunamine.
Need moodustavad puu. Paketid sisenevad juur-qdisc'i, läbivad filtrid, sorteeritakse klassidesse major:minor käepideme järgi klassidesse ja jõuavad edastamiseks lehe-qdisci järjekorda.
Kui soovite midagi keerulisemat kui pordipõhine vastavus, märgistage paketid iptables’i või nftables’i abil mangle-tabelis ning kasutage seejärel fw filtrit tc märgistuse järgi klassifitseerimiseks. See skaleerub palju paremini kui toore u32 reeglite ahelamisest iga liiklustüübi jaoks.
Väljaminev vs sissetulev
Suund on oluline. Tuum võib väljaminevaid pakette puhverdada ja viivitada, mis võimaldabki tõelist liikluse kujundamist. Sissetulevad paketid on juba võrgu läbinud, kui te neid näete, seega saate neid ainult kontrollida (kõrvaldada, kui ületavad künnise), kui te neid esmalt IFB-seadmesse ümber ei suuna.
| Funktsioon | Väljaminev | Sissetulev |
|---|---|---|
| Suund | Väljaminev | Sissetulev |
| Kujundamine | Põhineb | Nõuab IFB-d |
| Järelevalve | Toetatud | Toetatud |
| Tüüpiline kasutus | QoS, ribalaiuse jagamine, andmeedastuse reguleerimine | Kiiruse piiramine, põhiline DDoS-rünnakute leevendamine |
Qdiscid, mida tegelikult kasutate
- HTB (Hierarchical Token Bucket). Klassipõhine. Kasutage seda, kui soovite tagada igale teenusele minimaalse ribalaiuse, säilitades võimaluse laenata kasutamata võimsust teistest klassidest.
- TBF (Token Bucket Filter). Klassivaba. Kasutage seda, kui soovite lihtsalt piirata kogu liidese ühe kindla kiirusega.
- fq_codel (Fair Queuing Controlled Delay). Ühendab voogupõhise õigluse aktiivse järjekorrahaldusega, et vältida bufferbloati. See on olnud vaikimisi qdisc enamikus Linuxi distributsioonides alates systemd 217-st ja on vaikimisi kaasas RHEL 9-s. Ühendage see alati lehe-qdiscina HTB-klasside alla, vastasel juhul võib üks ahne voog kogu klassi enda alla haarata.
tc seadistamine Linuxi serveris
tc on kaasas iproute2 paketiga. Debianis ja Ubuntus installige see käsuga apt-get install iproute2. RHEL-is ja selle derivaatides yum install iproute. Vajate root-õigusi või sudo-õigusi.
Selgitage esmalt välja õige liidese nimi. Liidese valesti nimetamine on kõige levinum põhjus, miks konfiguratsioon vaikimisi midagi ei tee:
ip link showKontrollige, mis liidesel juba on, sealhulgas reaalajas loendurid:
tc -s qdisc show dev eth0Kustutage enne uue konfiguratsiooni rakendamist kõik olemasolevad root-qdisc-id, et vältida RTNETLINK answers: File exists vigu:
tc qdisc del dev eth0 root 2>/dev/null || trueKui te ei alusta nullist, vaid uuendate olemasolevat reeglit, kasutage replace asemel add , et tagada muutuste terviklikkus.
Riistvaraline koormuse ülekandmine, nagu TSO ja GSO, koondab pakette viisil, mis segab kujundamist. Lülitage need kujundataval liidesel välja:
sudo ethtool -K eth0 tso off gso offMäärake fq_codel uute liideste süsteemiülese vaikimisi qdisc-iks:
sysctl -w net.core.default_qdisc=fq_codelHõivatud serverite puhul kombineerige seda BBR-i ülekoormuse kontrolli algoritmiga (tuum 4.9+). BBR hoiab läbilaskevõime kõrgena ilma järjekordi pikendamata:
sysctl -w net.ipv4.tcp_congestion_control=bbrÜks ohutusharjumus, kui konfigureerite kaugseadet SSH kaudu: avage teine sessioon ja hoidke tc qdisc del dev eth0 root valmis kleepimiseks. Vale filtrireegel võib teid koheselt välja lukustada.
Väljamineva liikluse kujundamine HTB abil
HTB võimaldab määrata igale teenusele garanteeritud miinimumi (rate) ja ülempiiri (ceil). Kasutamata ribalaius suunatakse sellele, kes seda vajab, prioriteetide järjekorras. Siin on toimiv kolmetasandiline seadistus 1 Gbps üleslingi jaoks.
Looge juur-HTB qdisc. default 30 saadab kõik klassifitseerimata paketid klassi 1:30 , selle asemel et lasta sellel teie reegleid mööda minna:
tc qdisc add dev eth0 root handle 1: htb default 30Piirata koguläbilaskevõimet 900 Mbps-ni. Kujundage läbilaskevõime alati veidi alla tegeliku ühenduse võimsuse, vastasel juhul tekib järjekord ülesvoolu ruuteris või modemis, mida te ei kontrolli:
tc class add dev eth0 parent 1: classid 1:1 htb rate 900mbit ceil 900mbitMäärake teenustasemed. Madalamad prio väärtused saavad kasutamata ribalaiuse esimesena:
# High priority: web and API traffic
tc class add dev eth0 parent 1:1 classid 1:10 htb rate 500mbit ceil 900mbit prio 1
# Medium priority: database replication
tc class add dev eth0 parent 1:1 classid 1:20 htb rate 300mbit ceil 900mbit prio 2
# Low priority: bulk and backup traffic
tc class add dev eth0 parent 1:1 classid 1:30 htb rate 100mbit ceil 900mbit prio 3Lisage fq_codel iga klassi lehe-qdisc-iks, et üks voog ei saaks oma taset domineerida:
tc qdisc add dev eth0 parent 1:10 handle 10: fq_codel
tc qdisc add dev eth0 parent 1:20 handle 20: fq_codel
tc qdisc add dev eth0 parent 1:30 handle 30: fq_codelNüüd liigita liiklus. Lihtsa pordi sobitamise puhul u32 on kiireim:
tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 \
match ip dport 443 0xffff flowid 1:10Kõigi seisundipõhiste juhtumite puhul märgista iptablesis ja sobi märge kokku fw:
iptables -t mangle -A OUTPUT -p tcp --dport 5432 -j MARK --set-mark 2
tc filter add dev eth0 protocol ip parent 1:0 prio 2 handle 2 fw flowid 1:20Sissetuleva liikluse kujundamine IFB abil
Sissetulevat liiklust ei saa algselt kujundada, sest kui pakett saabub, on see juba teie ribalaiust kasutanud. Lahenduseks on suunata sissetulev liiklus Intermediate Functional Block (IFB) virtuaalse liidese kaudu, kus tuum käsitleb seda väljaminevana ja võimaldab teil rakendada klassipõhiseid qdisc-e.
Laadige moodul ja käivitage liides:
modprobe ifb numifbs=1
ip link set dev ifb0 upLisage füüsilisele liidesele sissetuleva liikluse qdisc ja suunake kogu liiklus ümber aadressile ifb0:
tc qdisc add dev eth0 ingress handle ffff:
tc filter add dev eth0 parent ffff: protocol all u32 \
match u32 0 0 action mirred egress redirect dev ifb0Sellest hetkest alates ifb0 käitub see nagu iga teine liides. Rakendage sellele oma HTB-puu täpselt samamoodi, nagu teeksite väljamineva liikluse puhul:
tc qdisc add dev ifb0 root handle 1: htb default 30
tc class add dev ifb0 parent 1: classid 1:1 htb rate 900mbit ceil 900mbit
tc class add dev ifb0 parent 1:1 classid 1:10 htb rate 500mbit ceil 900mbit prio 1Liikluse prioriseerimine DSCP abil
DSCP (Differentiated Services Code Point) märgistab pakette 6-bitise väärtusega TOS-baitis, nii et teie tc filtrid saaksid klassifitseerida märgistuse järgi, selle asemel et reeglistikus pordid üles otsida. DSCP-väärtuse sobitamisel tc, nihutage väärtust 2 bitti vasakule. DSCP EF (46) muutub 0xb8. Mask 0xfc eraldab 6 DSCP-bitti 2 ECN-bitist.
Mõistlik vaikimisi seos serveri töökoormuste jaoks:
| Liikluse tüüp | DSCP | TOS (kuueteistkümnendkood) | Näited |
|---|---|---|---|
| Interaktiivne | EF | 0xb8 | SSH, DNS, VoIP |
| Äri | AF41 | 0x88 | HTTP, HTTPS, API-d |
| Hulgi | CS1 | 0x20 | Varukoopiad, FTP, pakettide uuendused |
| Parim võimalik | CS0 | 0x00 | Kõik muu |
Märgi väljaminevad paketid iptablesis enne, kui need jõuavad su tc filtritesse jõudmiseks:
iptables -t mangle -A OUTPUT -p tcp --dport 22 -j DSCP --set-dscp 46Seejärel otsi sildit tc ja suunake see õigesse HTB-klassi:
# EF (SSH, VoIP) goes to the high-priority class
tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 \
match ip tos 0xb8 0xfc flowid 1:10
# AF41 (web traffic) goes to the medium class
tc filter add dev eth0 protocol ip parent 1:0 prio 2 u32 \
match ip tos 0x88 0xfc flowid 1:20
# CS1 (bulk) goes to the low-priority class
tc filter add dev eth0 protocol ip parent 1:0 prio 3 u32 \
match ip tos 0x20 0xfc flowid 1:30Seire ja veaotsing
Kolm käsku, mida kasutate pidevalt:
tc -s qdisc show dev eth0
tc -s class show dev eth0
tc -s filter show dev eth0Jälgi dropped ja overlimits loendureid. Kaotatud paketid tähendavad, et järjekord on ülekoormatud; piirmäärade ületamine tähendab, et olete jõudnud klassi ülempiirini ja tuum pidi liiklust edasi lükkama või kõrvaldama. Reaalajas ülevaate saamiseks:
watch -n 1 'tc -s class show dev eth0'lisage -d sisemiste parameetrite (sihtmärk, intervall, kvant) jaoks ning -j JSON-väljundiks, kui suunad andmed mõõdikute kuhja. Kasuta seda koos ss -tin , et näha RTT-hinnanguid ja kordusülekandeid TCP-kihis.
Enamik rikkeid kuulub järgmisse lühikesse nimekirja:
| Sümptom | Tõenäoline põhjus | Lahendus |
|---|---|---|
RTNETLINK answers: File exists | Root qdisc on juba konfigureeritud | tc qdisc del dev eth0 root esimene |
| Reeglid kehtivad, kuid liiklust ei piirata | Vale liides või TSO/GSO on endiselt sisse lülitatud | Kinnita käskuga ip link show, lülita maha koormuse ülekandmine käsuga ethtool -K |
| Filter ei leia kunagi vastet | Vale pordi/IP-süntaks või maski joondus | Lisa vastumeede ja kontrolli tabamuste arvu tc -s filter show |
| Reeglid kaovad pärast taaskäivitamist | Konfiguratsioon asub ainult mälus | Pakenda skriptiks ja kutsu välja systemd või NetworkManageri dispetšeri kaudu |
| Suur viivitus prioriteetsel liiklusel | Puudub leaf-qdisc või purske piirang on liiga madal | Liita fq_codel leheklassidele, tõsta burst |
Kui sa peaksid end kunagi valesti konfigureerides välja lukustama, on taastamine lihtne:
tc qdisc del dev eth0 roottc ei saa luua ribalaiust, mida sul pole, kuid hästi varustatud üleslingil teeb see vahe, kas jõudlus on ennustatav või server kukub kokku niipea, kui üks klient alustab suurt andmeedastust. Kui vajad toor-ribalaiust ja vabadust seda kujundada just nii, nagu soovid, vaata FDC pühendatud servereid.

iperf3 juhend: võrgu kiiruse testimine Linuxis ja Windowsis
Paigaldage iperf3, viige läbi ribalaiuse testid ja häälestage TCP-puhvrid, et saada täpseid tulemusi Linuxis ja Windowsis. Hõlmab UDP-, kahesuunalisi ja 10GbE+ teste
10 min lugemine - 7. mai 2026
Linuxi serverite töökoormuse optimeerimiseks häälestatud profiilid
16 min lugemine - 9. juuni 2026

Kas teil on küsimusi või vajate kohandatud lahendust?
Paindlikud võimalused
Ülemaailmne haare
Kohene kasutuselevõtt
Paindlikud võimalused
Ülemaailmne haare
Kohene kasutuselevõtt