# Contrôle de flux

Le contrôle de flux, dans un réseau informatique ou un réseau de télécommunications, représente un asservissement du débit binaire de l'émetteur vers le récepteur. Quand une machine a un débit montant supérieur au débit descendant de la destination, la source diminue son débit pour ne pas submerger le puits de requêtes (obligeant parfois, lorsque le puits ne peut pas les traiter, à la ré-émission de ces dernières). Le contrôle de flux doit être différencié du contrôle de congestion, qui est utilisé pour contrôler le flux de données lorsque la congestion a déjà eu lieu. Les mécanismes de contrôle de flux sont définis par le fait que le récepteur envoie une information de retour à l'émetteur.

## Stop and wait

Le stop and wait est la forme la plus simple de contrôle de flux. Dans cette méthode, le récepteur indique qu'il est prêt à recevoir chaque segment, le message étant divisé en plusieurs segments. L'émetteur doit attendre un acquittement (ACK) pour chaque segment pendant une période de temps (appelée time out). L'ACK est envoyé afin de s'assurer que le récepteur a bien reçu le segment. Par suite, l'émetteur peut transmettre le segment suivant après avoir reçu l'ACK.

### Algorithme

* Émetteur : transmet un seul segment à la fois.
* Récepteur: transmet un acquittement (ACK) lorsqu'il reçoit le segment.
* Émetteur reçoit un ACK au plus tard après la période time out.
* Retour à l'étape 1.
Si le segment ou l'ACK est perdu durant la transmission, alors il doit être retransmis. La procédure de retransmission est connue sous le nom de Automatic Repeat reQuest (ARQ).
Le problème de stop and wait provient du fait qu'un seul segment est transmis à la fois. Ceci mène à une faible efficacité de l'utilisation du canal de transmission, étant donné que l'émetteur ne peut envoyer un autre segment qu'après avoir reçu un "ACK".

## Fenêtre glissante

L'utilisation d'une fenêtre glissante, pour le contrôle des flux est une méthode dans laquelle le récepteur donne la permission à l'émetteur de transmettre des données jusqu'à ce que la fenêtre (le nombre de paquets autorisés en attente d'acquittement) devienne pleine. Lorsque la fenêtre est pleine, l'émetteur doit arrêter la transmission jusqu'à ce qu'il reçoive un acquittement ou un ordre d'extension de la taille de la fenêtre.

## Exemples d'application de contrôle de flux
### Transmission Control Protocol (TCP)

TCP met en œuvre un contrôle de flux dichotomique (le contrôle de flux de TCP est fusionné à son système de contrôle de congestion).
Exemple : Si on (avec une connexion bas débit, ligne 56 kbit/s) vous envoie un fichier via un logiciel de partage (vous disposez d'une connexion haut débit type ADSL). Vous ne pourrez jamais le recevoir plus vite que le maximum d'émission de votre correspondant. Le protocole de transport qui a été utilisé a mis en œuvre un contrôle de flux. De la même façon si vous lui envoyez un fichier, le même mécanisme se mettra en place et vous ne lui enverrez pas plus vite qu'il ne peut le recevoir.

### Communication série

En communication série asynchrone RS-232, deux modes de contrôle de flux sont proposés : en hardware via les lignes RTS/CTS (Ready To Send/Clear To Send) ou sous contrôle logiciel via les caractères ASCII XON/XOFF. En hardware, les lignes RTS/CTS de l'UART peuvent être pilotées par le logiciel. Le contrôle hardware, en RS-232, nécessite 5 fils (Rx, Tx, Gnd, RTS, CTS), le contrôle logiciel n'en nécessite que 3 (Rx, Tx, Gnd).