NetFlow — сетевой протокол, предназначенный для учёта сетевого трафика, разработанный компанией Cisco Systems. Является фактическим промышленным стандартом и поддерживается не только оборудованием Cisco, но и многими другими устройствами (в частности, Juniper, ZTE и Enterasys). Также существуют свободные реализации для UNIX-подобных систем.
Существует несколько версий протокола, наиболее распространёнными из которых на 2011 год являются версии 5 и 9. На основе версии 9 также был разработан открытый стандарт под названием IPFIX (Internet Protocol Flow Information eXport, экспорт информации о потоках IP)[1][2].
Для сбора информации о трафике по протоколу NetFlow требуются следующие компоненты:
NetFlow использует UDP или SCTP для передачи данных о трафике коллектору. Как правило, коллектор слушает порт 2055, 9555 или 9995.
Сенсор выделяет из проходящего трафика потоки, характеризуемые следующими параметрами:
Потоком считается набор пакетов, проходящих в одном направлении. Когда сенсор определяет, что поток закончился (по изменению параметров пакетов, либо по сбросу TCP-сессии), он отправляет информацию в коллектор. В зависимости от настроек он также может периодически отправлять в коллектор информацию о все еще идущих потоках.
Собранная информация отправляется в виде записей, содержащих следующие параметры (для версии 5):
Версия 9 также поддерживает дополнительные поля, такие как заголовки IPv6, метки потоков MPLS и адрес шлюза BGP. Некоторые сенсоры могут также поддерживать номер автономной системы.
Если используется UDP, то потерянная из-за проблем с сетью запись не будет получена коллектором. Коллектор может определить потери пакетов по значениям номера записи, которые по стандарту должны быть возрастающими.
Если сенсором выступает сетевое устройство (маршрутизатор или коммутатор), то для экономии ресурсов NetFlow включают только для тех интерфейсов, на которых хотят собирать статистику.
Для экономии ресурсов процессора также применяется «sampled NetFlow». В этом случае сенсор анализирует не все, а каждый n-ый пакет, где n может быть заданным административно или выбираемым случайным образом. При использовании sampled NetFlow получаемые значения являются не точными, а оценочными.