tc, zwana również traffic control – komenda Linuxa służąca do pokazania i manipulacji ustawieniami ruchu w jądrze.

Kontrola ta składa się na:

  • SHAPING. Za jego pomocą kontrolujemy prędkość transmisji. Używamy go nie tylko do obniżania przepustowości. Służy również do wygładzania pasma co wpływa na stabilniejsze zachowanie sieci. Kontroli podlega ruch wychodzący.
  • SCHEDULING. Poprzez szeregowanie transmisji pakietów można zwiększyć interaktywność ruchu, gwarantując jednocześnie pasmo dla dużych transferów. Zmiana kolejności jest również nazywana priorytetyzacją i zdarza się tylko na wyjściu.
  • Policing. Kształtujemy w ten sposób oferty przekazywania ruchu przychodzącego. Policing zachodzi na wejściu.
  • DROPPING. Ruch przekraczający określoną przepustowość może być odrzucany, zarówno na wejściu jak i na wyjściu.

Przetwarzanie ruchu jest kontrolowane przez trzy rodzaje obiektów:

  • qdisc
      tc  qdisc [ add | change | replace | link ] dev DEV [ parent qdisc-id |
             root ] [ handle qdisc-id ] qdisc [ qdisc specific parameters ]

Służy do podstawowej kontroli ruchu. Ilekroć jądro musi wysłać pakiet jest on kolejkowany na podstawowej kolejce interfejsu do którego został skierowany. Jednocześnie jądro próbuje pobrać maksymalnie jak najwięcej pakietów oczekujących na tej kolejce aby przekazać je odpowiedniej karcie sieciowej. Najprostszy QDISC jest kolejką typu pfifo, co znaczy iż pierwsze co wpadnie będzie pierwszym na wyjściu. Przechowuje on ruch sieciowy jeżeli karta sieciowa nie może go chwilowo obsłużyć.

  • filter
      tc filter [ add | change | replace ] dev DEV [ parent qdisc-id | root ]
             protocol protocol prio priority filtertype [ filtertype specific param-
             eters ] flowid flow-id

Filtr jest używany przez qdisc z klasami, aby ustalić gdzie pakiet ma być zakolejkowany. Gdy tylko ruch dotrze do klasy / subklasy musi tam zostać sklasyfikowany. Można to zrobić na wiele sposobów. Jednym z nich są filtry. Wszystkie filtry dołączone do klas zostają odpytane. Jeżeli żaden z nich nie zwróci odpowiedzi to sprawdzane są warunki dodatkowe.

  • class
      tc class [ add | change | replace ] dev DEV parent qdisc-id  [  classid
             class-id ] qdisc [ qdisc specific parameters ]

Niektóre obiekty QDISC mogą zawierać klasy, które zawierają kolejne obiekty QDISC. Ruch może być kolejkowany na każdym dołączonym QDISC-u.

Przykład użycia[1] edytuj

modemif=eth4
iptables -t mangle -A POSTROUTING -o $modemif -p tcp -m tos --tos Minimize-Delay -j CLASSIFY --set-class 1:10
iptables -t mangle -A POSTROUTING -o $modemif -p tcp --dport 53 -j CLASSIFY --set-class 1:10
iptables -t mangle -A POSTROUTING -o $modemif -p tcp --dport 80 -j CLASSIFY --set-class 1:10
iptables -t mangle -A POSTROUTING -o $modemif -p tcp --dport 443 -j CLASSIFY --set-class 1:10

tc qdisc add dev $modemif root handle 1: htb default 12
tc class add dev $modemif parent 1: classid 1:1 htb rate 1500kbit ceil 1500kbit burst 10k
tc class add dev $modemif parent 1:1 classid 1:10 htb rate 700kbit ceil 1500kbit prio 1 burst 10k
tc class add dev $modemif parent 1:1 classid 1:12 htb rate 800kbit ceil 800kbit prio 2
tc filter add dev $modemif protocol ip parent 1:0 prio 1 u32 match ip protocol 0x11 0xff flowid 1:10
tc qdisc add dev $modemif parent 1:10 handle 20: sfq perturb 10
tc qdisc add dev $modemif parent 1:12 handle 30: sfq perturb 10

Zobacz też edytuj

Przypisy edytuj

  1. Przykład użycia pochodzi ze strony http://www.funtoo.org/wiki/Traffic_Control

Linki zewnętrzne edytuj