Назад | Перейти на главную страницу

формирование трафика, приоритезация пакетов без использования битрейта ceil / max

Я написал сценарий, который формирует трафик в 3 канала. Первый канал должен иметь высокий приоритет и всегда отправляться первым. Теперь это отлично работает при одном условии. Я ввожу правильный битрейт ceil / max. Этот сценарий написан для работы на устройстве, которое будет работать с множеством различных подключений к Интернету. Максимальный битрейт может быть установлен, но я предпочитаю, чтобы он работал без необходимости устанавливать максимальный битрейт. Или, если я установлю высокое значение, например 999 Мбит / с, приоритезация все равно будет работать. Это возможно? А если как?

Спасибо!

Малик

Вот мой сценарий:

#!/bin/bash

DEV=$1
UPLINK=$2
DOWNLINK=$3
PORT_CLIENT=$4
PORT_TELNET=$5
PORT_SSH=$7
PORT_RTSP=$6

#erase previous qdiscs
tc qdisc del dev $DEV root
#tc qdisc del dev $DEV ingress


#set root qdisc
tc qdisc add dev $DEV root handle 1:0 htb
#set different pipes, rates and priorities        
tc class add dev $DEV parent 1:0 classid 1:1 htb rate ${UPLINK}kbit ceil ${UPLINK}kbit
tc class add dev $DEV parent 1:1 classid 1:10 htb rate $[7*${UPLINK}/10]kbit ceil ${UPLINK}kbit prio 1
tc class add dev $DEV parent 1:1 classid 1:20 htb rate $[2*${UPLINK}/10]kbit ceil ${UPLINK}kbit prio 3
tc class add dev $DEV parent 1:1 classid 1:30 htb rate $[1*${UPLINK}/10]kbit ceil ${UPLINK}kbit prio 4
#unlimited access
#tc class add dev $DEV parent 1:0 classid 1:90 htb rate 100000mbit burst 100000mbit


#stochastic fairness
#tc qdisc add dev $DEV parent 1:10 handle 100: sfq perturb 10
#tc qdisc add dev $DEV parent 1:20 handle 200: sfq perturb 10
#tc qdisc add dev $DEV parent 1:30 handle 300: sfq perturb 10
tc qdisc add dev $DEV parent 1:10 handle 100: pfifo limit 2
tc qdisc add dev $DEV parent 1:20 handle 200: pfifo limit 2
tc qdisc add dev $DEV parent 1:30 handle 300: pfifo limit 2


#filter data streams into pipe1
tc filter add dev $DEV parent 1:0 protocol ip prio 1 u32 match ip sport $PORT_CLIENT 0xffff flowid 1:10
tc filter add dev $DEV parent 1:0 protocol ip prio 1 u32 match ip sport $PORT_TELNET 0xffff flowid 1:10
tc filter add dev $DEV parent 1:0 protocol ip prio 1 u32 match ip sport $PORT_SSH 0xffff flowid 1:10
tc filter add dev $DEV parent 1:0 protocol ip prio 1 u32 match ip protocol 6 0xff match u8 0x10 0xff at nexthdr+13 flowid 1:10
tc filter add dev $DEV parent 1:0 protocol ip prio 1 u32 match ip protocol 6 0xff match u8 0x05 0x0f at 0 match u16 0x0000 0xffc0 at 2 match u8 0x10 0xff at 33 flowid 1:10
tc filter add dev $DEV parent 1:0 protocol ip prio 1 u32 match ip protocol 6 0xff match u32 0x52545350 0xffffffff at 40 flowid 1:10
#filter video streams into pipe2
tc filter add dev $DEV parent 1:0 protocol ip prio 10 u32 match ip sport $PORT_RTSP 0xffff flowid 1:20
#filter rest into pipe3
tc filter add dev $DEV parent 1:0 protocol ip prio 18 u32 match ip dst 0.0.0.0/0 flowid 1:30

Короткий ответ

Вероятно, лучше всего установить потолок (возможно, чуть ниже) максимальной скорости, с которой интерфейс WAN будет доставлять трафик на ваше формирующее устройство.

Теория и объяснение (и зачем нужен потолок)

Отмечу из вашего скрипта, что вы формируете входящий (входящий) трафик. В идеале было бы лучше, если бы формирование можно было применить к источнику трафика (интернет-провайдеру) до того, как он попадет на ваше устройство. Это связано с тем, что для входящего трафика у вас фактически нет контроля над тем, как он поступает к вам. Вы можете контролировать его, как только он доходит до вас, что в определенной степени эффективно помогает управлять трафиком (и я понимаю, что это то, что вы пытаетесь сделать), но это не совсем «правильный» способ делать что-то.

Но вернемся к вашему первоначальному вопросу. Я отвечу на основе настройки, использующей формирование исходящего (исходящего) трафика, а это не то, что вы делаете, но, надеюсь, это поместит вещи в контекст. Основная причина, по которой требуется потолок, связана с некоторым ограничением на следующую среду / переход / все, на что собирается или передается трафик. Любое устройство, которое принимает / отправляет трафик, будет иметь буфер приема / отправки, который заполняется, если скорость трафика достигает максимальной скорости, которую может обрабатывать носитель, или когда различные буферы становятся полными, после чего начинается задержка вместе с потерей пакетов.

Чтобы решить эту проблему, если вводится формирование и скорость ограничивается чуть ниже скорости следующего носителя (и это формирование применяется правильно, то есть правильные правила настроены в соответствии с используемыми протоколами), это затем улучшает общую текучесть транспортный поток. Если формирование применяется, но не ограниченный максимальной скоростью следующего носителя, любое ранее примененное формирование теряется и в конечном итоге становится бесполезным, потому что буфер приема / отправки этого носителя начинает выстраиваться в очередь и отменяет всю тяжелую работу, которую ваш комплект сделал ранее для его формирования. Вот почему требуется потолок; формирователю необходимо знать, сколько трафика он может передать на следующий этап, не заставляя следующий носитель опрокинуть его красиво упакованную (имеющую форму) тележку для яблок.

Что касается формирования входящего трафика (это то, что вы здесь делаете), я надеюсь, что теперь вы видите, что, по сути, потолок в основном должен быть установлен на разумное значение тогда и только тогда, когда среда, на которую вы перенаправляете входящий трафик ( LAN) медленнее, чем максимальная скорость трафика, поступающего на сторону WAN. Это единственный случай, когда я могу придумать, где формирование действительно поможет в вашей ситуации. Но я подозреваю, что, как и большинство интернет-соединений в настоящее время, скорость WAN намного ниже, чем скорость LAN, поэтому в основном потолок можно установить на любое разумное значение, которое вам нравится (скорость интерфейса LAN, вероятно, хороший выбор), но Сказав это, возможно, имеет смысл установить потолок чуть ниже максимальной скорости прибытия (загрузки) WAN. Это снизит тенденцию к постановке трафика в очередь на стороне интернет-провайдера, поскольку формирователь будет замедлять и умиротворять трафик, контролируя его (например, соединения TCP, где протокол TCP по своей сути пытается поддерживать увеличение скорости до максимально возможной скорости во время перевод). Мы надеемся, что это означает, что интеллектуальные очереди и формирование в основном будут управляться вашим формирователем, а не будут сначала перехвачены каким-либо тупым ограничивающим оборудованием у провайдера.

У меня есть HOWTO по формированию трафика, которое я написал несколько лет назад: http://phix.me/dm/ - многие люди нашли это полезным, в том числе парень из США, у которого есть маршрутизатор MikroTik, и применил мои методики к своему маршрутизатору, что, в результате, разрешило все проблемы с трафиком, с которыми он сталкивался, от медленного поиска DNS до прерывистых сеансов SSH во время торрент-загрузки и т. Я использую те же принципы и в моей настройке широкополосного доступа в настоящее время. Однако обратите внимание, что мой HOWTO специально говорит о формировании исходящего трафика и вообще не затрагивает входящий поток. Основная причина этого заключается в том, что мне лично не нужно формирование входящего трафика, и я понял (когда все это исследовал много лет назад), что не могу контролировать входящий трафик, который приходит ко мне (как я сказал ранее). Недавно я обратился к интернет-провайдеру, который предлагает несколько умных способов формирования своей стороны, поэтому в сочетании с моими политиками формирования исходящего трафика и их базовыми политиками формирования входящего трафика я знаю, что у меня, вероятно, одно из самых удобных подключений к Интернету.