Порядок тарификации
Понимание порядка тарификации очень важно для построения тарифных планов и понимания механизма их работы.
Рассмотрим в каком порядке происходит тарификация трафика и времени в разных режимах обсчёта. В каждом соединении ведутся счетчики байт, посчитанных и потреблённых. При этом NetFlow-коллектор по мере получения потоков увеличивает счётчики потреблённых байт в памяти, также они могут изменятся по приходу UPDATE, либо STOP-пакетов (зависит от настройки трафиков в NASе). Ещё одна характеристика соединения - время его окончания - это то время, до которого было обсчитано соединение.
1) При режиме тарификации UPDATE, после получения UPDATE-пакета:
Увеличиваются счётчики потреблённых байт, если настроено извлечение трафика из RADIUS-пакетов.
Тарифицируется потреблённый трафик как разница между счётчиками потреблённых и посчитанных байт. Весь трафик считается потреблённым единоразово в текущее время окончания сединения (время предыдущего UPDATE-пакета).
Тарифицируется потреблённое время. Считается, что в момент текущего времени окончания, было потреблено количество секунд до текущего времени. Если при этом был переход часа, то тарификация времени осуществляется в два этапа. Считается, что в момент текущего времени окончания было потреблено количество секунд до границы часа, а на границе часа было потреблено оставшееся количество секунд.
Изменяется время окончания соединения на текущее время. При необходимости (исчерпан баланс, смена зоны в тарифе) может быть послан сигнал сброса соединения, либо CoA пакет.
Обратите внимание, что каждая услуга считается потреблённой в какой-то определённый момент времени. Это время передаётся в тарифном запросе и используется узлами тарифных планов Фильтр по типу времени, Период и т.п.
2) При режиме тарификации CHECKER (устаревший режим). Тарификация осуществляется по таймеру, периодически просыпающимся потоком. При каждом обсчёте:
Тарифицируется потреблённый трафик, как разница между счётчиками потреблённых и посчитанных байт. Весь трафик считается потреблённым единоразово в текущее время окончания сединения (время предыдущего обсчёта).
От текущего времени окончания соединения отсчитывается аванс времени в update.time секунд. Обсчёт идет в будущее, при переходе часов осуществляется разбивка секунд аналогично режиму UPDATE.
Изменяется время окончания соединения (время может стать в будущем). При необходимости (исчерпан баланс, смена зоны в тарифе) может быть послан сигнал сброса соединения, либо CoA пакет.
Поток засыпает, просыпаясь каждые sleep.time секунд для проверки прохождения времени окончния соединения и, следовательно, необходимости нового обсчёта.
При получении STOP-пакета возможен обсчёт времени в обратном направлении, т.к. соединение может завершиться раньше уже просчитанного времени окончания.