{{tag>netadmin protocole tcp}} ====== Généralités ====== Dans les RFC l'unité de données transmise par le protocole TCP est nommée segment TCP. TCP est un protocole connecté encapsulant IP (Internet Protocole). Il permet de s'assurer que les informations sont échangées de façon fiable: * Arrivent jusqu'au bon programme dans la couche application * Les informations sont dans l'ordre TCP considère les données comme un flux continu avec signal de début et de fin. - Le client transmet un paquet avec le bit SYN pour signaler le début d'un nouveau flux. - Le serveur répond SYN/AKC s'il accepte ou SYN/RST pour refus. - Si le client a reçu un SYN/ACK il valide avec ACK, les données sont alors transmises. C'est pendant l’établissement de connexion (handshake) que les options de transmissions sont négociées. - Un paquet FIN clôture la transmission. Le serveur accuse réception avec FIN/ACK. Lors de la transmission des données le client numérote chaque paquet de la séquence. Le serveur accuse réception (ACK) pour chaque paquet. ===== CWND et RWND ===== **CWND**((**C**ongestion **W**i**ND**ow)) et **RWND**((**R**eceiver **W**i**ND**ow)) sont des variables d'état utilisées conjointement par le protocole TCP pour contrôler le flux de données entre la source (serveur) et la destination (client) afin de limiter les congestions et d'améliorer les performances. * La valeur de **CWND** est modulée par le serveur, elle indique la quantité limite de données pouvant transiter sur le réseau sans réception d'un ACK. * La valeur **RWND** est communiquée par le client, elle indique la quantité de données que la destination peut recevoir. La congestion se produit lorsque le flux émis par le serveur dépasse la quantité admissible coté client. Lorsque les tampons sont pleins coté client, les paquets sont temporairement stockés dans des tampons auxiliaires à la fois coté serveur et coté client en attendant de pouvoir être transmis dans les couches adjacentes. Cela peut conduire à la perte de paquets, leur retransmission, la dégradation des performances ou l'effondrement du réseau dans les cas extrêmes. Le client communique la valeur de **RWND** dans l’entête TCP. Cela permet au serveur d'initialiser la valeur de **CWND** en s'adaptant progressivement aux capacités du client. La valeur **CWND** évolue jusqu’à atteindre une valeur limite pouvant correspondre à **RWND** ou aux limites du réseau. Le débit d'émission des données est lié à la taille de **CWND** et même si la valeur de **RWND** est grande, **CWND** peut rester faible notamment si la capacité de transmission du réseau est inférieure à la valeur maximale de **RWND**. La congestion est détectée soit par la réception d'un ACK dupliqué soit par un signal de temps dépassé. Le serveur baisse alors la valeur de **CWND** et son débit d'émission. Le protocole TCP ajuste la valeur de **CWND** pour atteindre un débit d'émission optimal avec un minimum de perte de paquets ou d'effet de congestion. ===== Références ===== * RFC 793 * RFC 3268 * https://blog.stackpath.com/glossary/cwnd-and-rwnd/