Всем привет. Юзаю Cat3560 12.2(35)SE.Настроил полисинг на физическом гигабитном интерфейсе g0/1 т.о.:
!
class-map match-any direct-connect
match access-group 101
!
policy-map direct-connect
class direct-connect
police 100000000 1000000 exceed-action drop
!
interface GigabitEthernet0/1
switchport trunk encapsulation dot1q
switchport mode trunk
switchport nonegotiate
service-policy input direct-connect
!
access-list 101 permit tcp any eq www any
access-list 101 permit tcp any eq ftp any
access-list 101 permit tcp any eq ftp-data any
access-list 101 permit tcp any eq 6667 any
access-list 101 permit tcp host 192.168.254.241 any
!
На аргументы директивы police не обращайте внимания, по ним и вопрос. Известно, что и полисинг и шейпинг используют механизм токен-бакет для вырезания или помещения в буфер пакетов, которые не уместились в карзину.
Моё понимание механизма token-bucket:
n - длина пакета
b - ёмкость ведра в токенах
r - rate. Он же CIR
- Каждый установленный интервал токены "кладутся" в ведро.
- У ведра есть определенная ёмкость. Токен прилетевший в полное ведро будет отвергнут.
- В момент попадения пакета на интерфейс из ведра извлекается количество токенов равное количеству байт в самом пакете и пакет отправляется далее.
- Если в ведре осталось настолько мало токенов, что n>b, соответствия не наступает (non-conformant).
Ёмкость ведра можно регулировать (burst size). Также пакеты, n которых совпала с токенами могут быть лимитированы r. Т.е. в любом случае на выходе мы не сможем получить скорость, большую чем CIR.
Рекомендованная формула для рассчета burst size: <Burst> = 2 * <RTT> * <Rate> (Cisco Press). Причем, RRT (round-trip time for a TCP session) может колебаться от 1 мс до 100сек. Как выявить реальное значение я не знаю. Пусть оно будет 10мс.
<Burst> = 2 * <.100 sec> * <64000 bits/sec>
В контексте policy есть только два инструмента управления пропускной способностью. Это:
<8000-10000000000> Bits per second
<8000-1000000> Normal burst bytes
Ну и exceed-action
Допустим я хочу сделать ограничение в 50 мегабит. Естественно, CIR (первый аргумент директивы Policy) я установлю в 50000000.
Приводим всё в биты и в секунды:
<Burst> = 2 * 0.01 * 50000000 = 1 000 000 bps = 125 000 bytes per second.
И остановиться на таких параметрах:
police 50000000 125000 exceed-action drop
Правильно ли я всё понял? И как всё-таки подобрать RRT?