tc
è un potente strumento della riga di comando in Linux utilizzato per configurare il controllo del traffico nel kernel. Permette di modellare il traffico di rete, dando priorità a specifici tipi di pacchetti, limitando la larghezza di banda e simulando la perdita di pacchetti. In sostanza, tc
ti permette di definire come i pacchetti vengono gestiti in entrata (ingress) e in uscita (egress) dalle tue interfacce di rete.
A cosa serve?
tc
viene utilizzato per una vasta gamma di scopi, tra cui:
Componenti principali di tc:
qdisc
(Queueing Discipline): Determina come i pacchetti vengono accodati prima di essere trasmessi. Esempi comuni includono pfifo_fast
, htb
e fq_codel
. qdisc
sono il nucleo della configurazione tc
. Ogni interfaccia di rete ha una qdisc
radice.
class
: Divide una qdisc
in sottoclassi, consentendo di applicare regole diverse a diversi tipi di traffico. Le class
sono organizzate in una struttura gerarchica, con una qdisc
radice e poi class
figlie.
filter
: Definisce quali pacchetti appartengono a quale class
. I filter
utilizzano criteri come indirizzi IP, porte, protocolli, e TOS (Type of Service) per classificare i pacchetti.
Sintassi di base:
La sintassi generale di tc
è la seguente:
tc [ OPTIONS ] OBJECT COMMAND [ ARGUMENTS ]
Dove:
OBJECT
è l'oggetto su cui si vuole agire (es. qdisc
, class
, filter
).COMMAND
è l'azione da eseguire (es. add
, change
, del
, show
).ARGUMENTS
sono i parametri specifici per l'oggetto e il comando.Esempi di utilizzo:
Visualizzare le qdisc
configurate su un'interfaccia:
tc qdisc show dev eth0
Aggiungere una qdisc
htb
all'interfaccia eth0
:
tc qdisc add dev eth0 root handle 1: htb default 10
Aggiungere una class
all'interno della qdisc
htb
:
tc class add dev eth0 parent 1: classid 1:1 htb rate 10mbit ceil 10mbit
Aggiungere un filter
per indirizzare il traffico sulla porta 80 verso la class
1:1:
tc filter add dev eth0 parent 1: protocol ip prio 1 u32 match ip dport 80 0xffff flowid 1:1
Argomenti importanti:
htb
(Hierarchical Token Bucket): Una qdisc
potente e flessibile, ampiamente utilizzata per il traffic shaping gerarchico. Permette di definire una gerarchia di classi con diverse velocità e priorità.
fq_codel
(Fair Queueing Controlled Delay): Una qdisc
che riduce la latenza e la jitter, particolarmente adatta per connessioni interattive. Utilizza algoritmi di "fair queueing" per garantire che nessuna connessione soffochi le altre.
rate
: Definisce la velocità minima garantita per una class
.
ceil
: Definisce la velocità massima che una class
può raggiungere.
prio
: La priorità del filtro (più basso è il valore, maggiore è la priorità).
Avvertenze:
La configurazione di tc
può essere complessa e richiede una buona comprensione dei concetti di networking. Una configurazione errata può degradare le prestazioni della rete o addirittura bloccare il traffico. È consigliabile studiare a fondo la documentazione e testare le configurazioni in un ambiente di prova prima di applicarle a un sistema di produzione.
Ricorda che le modifiche apportate con tc
sono generalmente temporanee e vengono perse al riavvio del sistema. Per rendere le modifiche permanenti, è necessario salvarle in un file di configurazione e caricarle all'avvio del sistema. Il metodo per farlo varia a seconda della distribuzione Linux.