[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: inet priors-получилось



Wed, Jul 06, 2005 at 09:56:29AM +0800, sem написал:
Юра wrote:
Ю> какой п-мой можно задать приоритеты портам ТСП и п-мам , юзающим
сетевой
Ю> интерфейс (ppp) ?
Ю> напр. обозреватель - главный , почта - второй , закачки - третий .

Ю> а также допустимую широту канала(скорость) для каждого процесса ?

tc.  http://lartc.org


Если кому интересно - могу рассказать как сделал. Но только для программ
, для
процессов пока нестал делать .

Если не сложно расскажи :)
А реализация для процессов будет иметь принципиальные отличия?

Спасибо.

++++++++++++++++++++++++
TRAFFIC CONTROL

pacets : iproute , iptables
docs : man iptables ,lartc - Linux Advanced Routing & Traffic Control HOWTO
(есть на русском)

Прим.
	1)модуль owner работает только в цепочке OUTPUT (man iptables)
	2)Чтобы иметь возможность маркировать пакеты, вы должны собрать
         ядро с рядом включенных опций:
               IP: advanced router (CONFIG IP ADVANCED ROUTER) [Y/n/?]
               IP: policy routing (CONFIG IP MULTIPLE TABLES) [Y/n/?]
               IP: use netfilter MARK value as routing key (CONFIG IP ROUTE FWMARK) [Y/n/?]
         (lartc).
	  см. /boot/config-2.4.27-...(напр.)
	  У этого ядра они включены .
этот скрипт можно поместить в /etc/ppp/ip-up.d
*****************************************************************
#!/bin/zsh
#opera-главный приоритет , elinks - второй , wget - последний

#назначение любых меток TCP пакетам по отправившей их программе
iptables -A OUTPUT -t mangle -m owner --cmd-owner opera -j MARK --set-mark 2
iptables -A OUTPUT -t mangle -m owner --cmd-owner elinks -j MARK --set-mark 5
iptables -A OUTPUT -t mangle -m owner --cmd-owner wget -j MARK --set-mark 8

#создаем корневую дисциплину prio  с дескриптором 1 и 4-мя(например) классами(полосами)
#принцип действия :
#пакеты беруться сначала из первой полосы , потом из второй и т.п.
#пока есть пакеты в первой полосе , пакеты из второй не берутся .
tc qdisc add dev ppp0 root handle 1: prio bands 4 priomap

#каждой полосе - по безклассовой дисциплине sfq (следит равным
#использованием процессами канала). Вроде как можно и без этого - но так удобнее
#просматривать куда идет траффик .
tc qdisc add dev ppp0 parent 1:1 handle 10: sfq
tc qdisc add dev ppp0 parent 1:2 handle 20: sfq
tc qdisc add dev ppp0 parent 1:3 handle 30: sfq
tc qdisc add dev ppp0 parent 1:4 handle 40: sfq

###################################################
#назначение фильтров
#parent 1: -корневая дисциплина #handle 2 - метки пакетов
#flowid 1:1 - класс назначения
#prio -приоритет фильтра , порядок их обработки , от меньшего к большему
#траффик от wget  - в полосу с низким приоритетом
tc filter add dev ppp0 protocol ip parent 1: prio 1 handle 2 fw flowid 1:1
tc filter add dev ppp0 protocol ip parent 1: prio 2 handle 5 fw flowid 1:2
tc filter add dev ppp0 protocol ip parent 1: prio 3 handle 8 fw flowid 1:4

#остальной неклассифицированный трафик - в среднюю полосу- неполучается #tc filter add dev ppp0 protocol ip parent 1: prio 4 fw
#tc filter add dev ppp0 protocol ip parent 1: prio 4 flowid 1:3
#eof
***************************************************************************

Подключаюсь к тестовому вохду провайдера , закачиваю его сайт сначала через wget ,
потом захожу через elinks , потом черезх оперу .


просмотр командой # tc -s qdisc ls dev ppp0
(у меня это скрипт ./l)

после wget

inf 12:45# ./l qdisc sfq 40: limit 128p quantum 1000b
Sent 1647 bytes 32 pkts (dropped 0, overlimits 0)
qdisc sfq 30: limit 128p quantum 1000b
Sent 0 bytes 0 pkts (dropped 0, overlimits 0)
qdisc sfq 20: limit 128p quantum 1000b
Sent 239 bytes 5 pkts (dropped 0, overlimits 0)
qdisc sfq 10: limit 128p quantum 1000b
Sent 0 bytes 0 pkts (dropped 0, overlimits 0)
qdisc prio 1: bands 4 priomap  1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
Sent 1886 bytes 37 pkts (dropped 0, overlimits 0)

Весь траффик идет через 4-ю , самую низкоприоритетную полосу .
какой-то(системный что ли) траффик проходит через вторую полосу .Ничего не смог придумать - как
направить остальной траффик , точнее пробовал - неработает .
пробовал так, как написано в lartc :
inf  1:30# tc filter add dev ppp0 protocol ip parent 1: prio 4 flowid 1:3
tc filter add dev ppp0 protocol ip parent 1: prio 4 flowid 1:3
Unknown filter "flowid", hence option "1:3" is unparsable
inf 3:47# --------------------------
после elinks

inf 12:45# ./l
qdisc sfq 40: limit 128p quantum 1000b
Sent 1647 bytes 32 pkts (dropped 0, overlimits 0)
qdisc sfq 30: limit 128p quantum 1000b
Sent 0 bytes 0 pkts (dropped 0, overlimits 0)
qdisc sfq 20: limit 128p quantum 1000b
Sent 3378 bytes 55 pkts (dropped 0, overlimits 0)
qdisc sfq 10: limit 128p quantum 1000b
Sent 0 bytes 0 pkts (dropped 0, overlimits 0)
qdisc prio 1: bands 4 priomap  1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
Sent 5025 bytes 87 pkts (dropped 0, overlimits 0)

Прошел через вторую полосу .
----------------------------

после opera

inf 12:46# ./l qdisc sfq 40: limit 128p quantum 1000b
Sent 1647 bytes 32 pkts (dropped 0, overlimits 0)
qdisc sfq 30: limit 128p quantum 1000b
Sent 0 bytes 0 pkts (dropped 0, overlimits 0)
qdisc sfq 20: limit 128p quantum 1000b
Sent 4678 bytes 84 pkts (dropped 0, overlimits 0)
qdisc sfq 10: limit 128p quantum 1000b
Sent 16558 bytes 137 pkts (dropped 0, overlimits 0)
qdisc prio 1: bands 4 priomap  1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
Sent 22883 bytes 253 pkts (dropped 0, overlimits 0)
inf 12:46#
траффик прошел через первую полосу .Все как надо .
----------------------------------
--
With best regards , Yura .



Reply to: