Как только в linux заходит разговор про QoS, shaping и управление трафиком, у многих сразу одна реакция: tc - это боль, страдание и странные команды из 2009 года. И это недалеко от правды. Утилита мощная, но синтаксис у нее такой, будто она не хочет, чтобы ей пользовались. При этом tc - это стандартный инструмент linux для управления очередями, задержками, полосой и приоритетами трафика.
Что с его помощью обычно делают:
ограничивают скорость;
дают приоритет важному трафику;
режут шумные сервисы;
эмулируют плохую сеть: delay, loss, jitter;
наводят порядок на WAN-линках и VPN.
Самое главное, что нужно понять:
QoS в linux почти всегда про исходящий трафик (egress). Входящий поток контролировать сложнее, обычно его либо полируют через IFB, либо ограничивают уже на стороне отправителя.
▪️ Самый простой пример - ограничить скорость интерфейса до 50 Мбит/с:
tc qdisc add dev eth0 root tbf rate 50mbit burst 32kbit latency 400ms
tbf - Token Bucket Filterrate - лимит скоростиburst - допустимый всплескlatency - максимальная задержка очереди▪️ Удалить правило:
tc qdisc del dev eth0 root
Если нужен вариант без магии, для большинства случаев, чаще смотрят в сторону fq_codel или cake. Например:
tc qdisc add dev eth0 root fq_codel
fq_codel хорош тем, что помогает бороться с bufferbloat и в целом делает очередь более адекватной без сложной ручной настройки.▪️ Если нужно не просто сделать лучше, а именно ограничить канал и при этом сохранить нормальную отзывчивость, часто используют cake:
tc qdisc add dev eth0 root cake bandwidth 100mbit
Почему tc кажется страшным:
qdisc
class
filter
parent
handle
flowid
На первый взгляд это выглядит как отдельная религия. Но на практике часто хватает 3 сценариев:
ограничить скорость
сделать очередь адекватной
эмулировать плохую сеть для тестов
Например, добавить задержку в 100 мс:
tc qdisc add dev eth0 root netem delay 100ms
Или сделать "плохую" сеть с потерями:
tc qdisc add dev eth0 root netem delay 100ms loss 2%
Это уже очень полезно для тестирования приложений, API, VoIP, VPN и всего, что в локалке работает идеально, а в реальной сети нет.
#tc #network
🧑💻 NetworkAdmin