Ответ на этот вопрос зависит главным образом от набора правил и производительности процессора. Для большинства приложений, имеющих дело с ethernet и простым набором правил, ответ: незначительно. Для тех, кому нужны реальные цифры для удовлетвореия любопытства, читайте дальше.
Следующие измерения были сделаны с использованием 2.2.5-STABLE на
машине 486-66. IPFW был модифицирован для измерения времени,
затрачиваемого внутри процедуры ip_fw_chk
и вывода результатов
на консоль каждую тысячу пакетов.
Тестировались два набора по 1000 правил в каждом. Первый набор был предназначен для демонстрации наихудшего случая, повторяя условие
ipfw add deny tcp from any to any 55555
Это наихудший случай, так как все условия IPFW будут проверены
перед тем, как будет принято окончательное решение о том, что пакет
не соответствует условию (мы меняли номер порта). После 999
повторений этого условия находилось правило
allow ip from any to any
.
Второй набор был предназначен для быстрого прерывания процесса проверки условий:
ipfw add deny ip from 1.2.3.4 to 1.2.3.4
Неподходяший IP-адрес источника для указанного условия
быстро вызывает пропуск этого правила. Как и ранее, последним правилом
было allow ip from any to any
.
Затраты на обработку пакета в первом случае было примерно 2.703 мс/пакет, или примерно 2.7 микросекунд на правило. Таким образом, теоретический предел скорости обработки пакетов с этими правилами равен примерно 370 пакетам в секунду. Предполагая использование ethernet 10Мб/с с размером пакета примерно 1500, мы можем достигнуть только 55.5% использования пропускной способности.
В последнем случае на обработку каждого пакета было затрачено примерно 1.172мс, или около 1.2 микросекунд на правило. Теоретический предел обработки будет равен около 853 пакетам в секунду, что почти соответствует скорости 10Мб/с ethernet.
Большое количество протестированных правил и природа этих правил не даёт представление о реальной жизни - они были использованы только для генерации информации о времени обработки. Вот несколько наблюдений, которые нужно иметь в виду для построении эффективного набора правил:
allow tcp
.
ipfw -a l
.