# NetFlow

NetFlow est une architecture de surveillance des réseaux développée par Cisco Systems qui permet de collecter des informations sur les flux IP. Elle définit un format d'exportation d'informations sur les flux réseau nommé NetFlow services export format (format d'exportation des services NetFlow, en abrégé protocole NetFlow). Elle permet de superviser de façon fine les ressources du réseau utilisées.
En 2004, Cisco a publié les caractéristiques de la version 9 du protocole NetFlow dans la RFC 3954. L'IETF en a dérivé le protocole IPFIX (IP Flow Information Export), normalisé en 2008 dans les RFC 5101, RFC 5102 et RFC 5103.

## Architecture

Des éléments réseau (commutateurs et routeurs) établissent des statistiques sur les données des flux réseau qu'ils exportent vers des collecteurs. Ces statistiques détaillées peuvent porter sur les nombres de paquets et d'octets, les ports applicatifs, les adresses IP, les champs de qualité de service, les interfaces par lesquelles ils transitent, etc.

### Les flux réseau

Un flux réseau NetFlow est unidirectionnel. Il est caractérisé par 7 champs clés :
* le protocole de couche 3 (en général IPv4, mais d'autres protocoles sont possibles)
* l'adresse IP source
* l'adresse IP de destination
* le port source (UDP ou TCP, 0 pour les autres protocoles)
* le port de destination
* le champ Type of Service
* l'interface en entrée
Les paquets appartenant à un même flux (même adresse IP source, même adresse IP destination, etc.) sont décomptés dans les statistiques. On remarque que l'interface de sortie ne caractérise pas un flux, ce qui est une bonne chose sur les routeurs où les routes de sortie peuvent changer.
Il existe aussi des champs non clés qui ne caractérisent pas un flux, mais dont la valeur est relevée. En règle générale, seule la valeur pour le premier paquet du flux est indiquée. On peut par exemple relever la date et l'heure du début du flux.

### Les données exportées

L'équipement réseau envoie un enregistrement décrivant le flux quand le flux s'achève. Un flux est considéré comme achevé lorsqu'il n'y a plus de paquets qui passent pendant un certain temps, ou quand la connexion TCP est close. On peut aussi configurer l'équipement pour envoyer des enregistrements à intervalles réguliers, même quand le flux est encore en train de s'écouler.
Ces enregistrements NetFlow sont en général transportés par UDP. L'adresse IP du collecteur auquel ils sont envoyés doit être configurée sur l'équipement émetteur. Un paquet NetFlow peut regrouper plusieurs enregistrements en un seul envoi. Par défaut, on utilise le port UDP 2055, mais il est courant de choisir un autre port.
Pour des raisons d'efficacité, si un de ces enregistrements NetFlow est perdu pour cause de congestion du réseau ou de paquet corrompu, l'équipement réseau est dans l'incapacité de le renvoyer, car il n'en conserve pas une copie. Cela peut conduire à des statistiques dégradées. Pour cette raison, certaines implémentations récentes de NetFlow utilisent SCTP à la place de UDP pour garantir que les statistiques seront reçues (TCP ne convient pas, car il est trop lourd).

## Versions de NetFlow

| Version | Commentaire |
| v1 | Première implémentation, à présent dépassée. Limitée à IPv4 sans masque réseau ni numéro de système autonome. |
| v2 | Version interne à Cisco, jamais publiée. |
| v3 | Version interne à Cisco, jamais publiée. |
| v4 | Version interne à Cisco, jamais publiée. |
| v5 | La version la plus courante (en 2009) sur de nombreux équipements de différentes marques, mais restreinte aux flux IPv4. |
| v6 | Version qui n'est plus prise en charge par Cisco. |
| v7 | Comme la version 5, avec un champ « routeur source ». |
| v8 | Agrégation de plusieurs informations. |
| v9 | S'appuie sur des modèles (templates), ce qui permet d'ajouter des champs sans redéfinir le standard. Permet de rapporter des flux IPv6, MPLS, ou le prochain saut BGP en IPv4. |
| v10 | Connue comme IP Flow Information Export. Champs définis par les utilisateurs, champs en longueur variable. |

## Prise en charge de NetFlow

En plus de Cisco, de nombreux constructeurs d'équipements réseau offrent une prise en charge de NetFlow sur leurs boitiers. La liste comprend Juniper, Alcatel-Lucent et Nortel, entre autres. En ce qui concerne les plates-formes logicielles, il y a une prise en charge sur serveurs VMWare et sous Linux.
Certains constructeurs utilisent un autre nom pour cette technologie, sans doute parce que NetFlow est ressenti comme une marque déposée de Cisco:
* Jflow ou cflowd chez Juniper Networks
* NetStream chez 3Com/HP
* NetStream chez Huawei Technologies
* Cflowd chez Alcatel-Lucent
* Rflow chez Ericsson
* AppFlow chez Citrix
Il existe aussi des alternatives. sFlow (en) est un protocole concurrent. IPFIX est le standard de l'IETF dérivé de NetFlow.