Provided by: manpages-fr_3.65d1p1-1_all 

NOM
tcp - Protocole TCP
SYNOPSIS
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/tcp.h>
tcp_socket = socket(AF_INET, SOCK_STREAM, 0);
DESCRIPTION
Il s'agit d'une implémentation du protocole TCP défini dans les RFC 793, RFC 1122 et RFC 2001 avec les
extensions SACK et NewReno. Cela fournit une connexion full-duplex fiable orientée flux entre deux
sockets au-dessus de ip(7), version 4 et 6. TCP garantit que les données arrivent dans l'ordre et assure
la retransmission des paquets perdus. Il calcule et vérifie une somme de contrôle par paquet pour
détecter les erreurs de transmission. TCP ne préserve pas les limites des enregistrements.
Une socket TCP neuve n'a pas d'adresse locale ou distante et n'est pas complètement définie. Pour créer
une connexion TCP sortante, utilisez connect(2) pour établir la connexion sur une autre socket TCP. Pour
recevoir les connexions entrantes, attachez d'abord la socket avec bind(2) à une adresse locale et un
port, puis appelez listen(2) pour mettre la socket dans un état d'attente. Après cela, une nouvelle
socket peut être obtenue pour chaque connexion entrante en utilisant accept(2). Une socket sur laquelle
accept(2) ou connect(2) ont été appelé correctement est complètement définie et peut transmettre des
données. Les données ne peuvent pas circuler sur les socket en attente ou non connectées.
Linux prend en charge les extensions TCP à hautes performances RFC 1323. Cela inclut la protection contre
les numéros de séquence bouclant (PAWS), la modification de fenêtre (« Window Scaling ») et les
horodatages (« timestamps »). Le Window Scaling permet d'utiliser des fenêtres TCP larges (> 64K) pour
gérer les liaisons avec une latence ou une bande passante élevées. Pour les utiliser, les tailles des
tampons d'émission et de réception doivent être augmentées. Ils peuvent être définis globalement avec les
fichiers /proc/sys/net/ipv4/tcp_wmem et /proc/sys/net/ipv4/tcp_rmem ou individuellement sur les sockets
avec les options SO_SNDBUF et SO_RCVBUF de l'appel système setsockopt(2).
Les tailles maximales pour les tampons déclarés à l’aide de SO_SNDBUF et SO_RCVBUF sont limitées par les
valeurs des fichiers /proc/sys/net/core/rmem_max et /proc/sys/net/core/wmem_max. Notez que TCP alloue en
fait deux fois plus de place que la taille demandée avec l'appel setsockopt(2), et qu'un appel
getsockopt(2) réussi ne renverra pas la même taille de tampon que celle réclamée dans le setsockopt(2).
TCP les utilise à des fins administratives et pour des structures internes du noyau, et les valeurs des
fichiers de /proc renvoient des tailles supérieures à celle des véritables fenêtres TCP. Pour les
connexions individuelles, la taille du tampon doit être définie avant les appels listen(2) ou connect(2)
pour qu'elle soit prise en compte. Consultez socket(7) pour plus de détails.
TCP permet de d'indiquer des données urgentes. Elles signalent au récepteur qu'un message important est
dans le flux de données et qu'il doit être traité le plus tôt possible. Pour envoyer des données
urgentes, indiquez l'option MSG_OOB de send(2). Quand des données urgentes sont reçues, le noyau envoie
un signal SIGURG au processus ou au groupe de processus qui a été indiqué comme propriétaire de la socket
avec les ioctls SIOCSPGRP ou FIOSETOWN (ou l'opération F_SETOWN de fcntl(2), spécifiée par POSIX.1-2001).
Quand l'option de socket SO_OOBINLINE est validée, les données urgentes sont mises dans le flux de
données normal (et peuvent être détectées avec l'ioctl SIOCATMARK), sinon, elles ne peuvent être reçues
que lorsque l'attribut MSG_OOB est positionné pour recv(2) ou recvmsg(2).
Linux 2.4 a introduit un certain nombre de changements pour améliorer le débit et l'extensibilité, ainsi
que des fonctionnalités améliorées. Certaines de ces fonctions incluent la prise en charge d'émission
sans copie avec sendfile(2), la notification de congestion explicite (ECN), la nouvelle gestion des
sockets TIME_WAIT, les options « keep-alive » et la prise en charge des extensions SACK dupliqués.
Formats d'adresse
TCP est construit au-dessus de IP (consultez ip(7)). Les formats d'adresse définis pour ip(7)
s'appliquent pour TCP. TCP ne gère que les communications point-à-point. Le broadcast et le multicast ne
sont pas gérés.
Interfaces /proc
Les paramètres TCP du système sont accessibles avec les fichiers du répertoire /proc/sys/net/ipv4/. De
plus, la plupart des interfaces /proc d'IP s'appliquent à TCP. Consultez ip(7). Les variables indiquées
comme booléennes prennent une valeur entière, une valeur non nulle indiquant que l'option est active, une
valeur nulle indiquant que l'option est inactive.
tcp_abc (entier ; 0 par défaut ; depuis Linux 2.6.15)
Contrôler l'ABC (« Appropriate Byte Count » : décompte d'octets approprié), défini dans la
RFC 3465. ABC est une façon d'augmenter la fenêtre de congestion (cwnd : « congestion window) plus
lentement en réponse à des acquittements partiels. Les valeurs possibles sont :
0 augment cwnd une fois par acquittement (pas d'ABC)
1 augmenter cwnd une fois par acquittement d'un paquet complet
2 permettre l'augmentation de cwnd par deux si l'acquittement correspond à deux segments, pour
compenser les acquittements avec délais.
tcp_abort_on_overflow (booléen ; désactivé par défaut ; depuis Linux 2.4)
Valider la réinitialisation des connexions si le service en écoute est trop lent et incapable de
les traiter et les accepter. Cela signifie que si un débordement se produit à cause d'une
surcharge temporaire, la connexion va se rattraper. N'activez cette option que si vous êtes SÛRS
que le démon en écoute ne peut pas être configuré pour accepter les connexions plus vite. Cette
option peut désorienter les clients de votre serveur.
tcp_adv_win_scale (entier ; 2 par défaut ; depuis Linux 2.4)
Calculer le surplus du tampon comme bytes/2^tcp_adv_win_scale, si tcp_adv_win_scale est supérieur
à 0 ; ou bytes-bytes/2^(-tcp_adv_win_scale), si tcp_adv_win_scale est inférieur ou égal à zéro.
L'espace du tampon de réception de la socket est partagé entre l'application et le noyau. TCP
conserve une portion du tampon en tant que fenêtre TCP, c'est la taille de la fenêtre de réception
indiquée au correspondant. Le reste de cet espace est utilisé comme tampon d'« application », pour
isoler le réseau des latences de l'ordonnanceur et de l'application. La valeur par défaut (2) de
tcp_adv_win_scale indique que l'espace utilisé pour le tampon d'application est un quart de
l'espace total.
tcp_allowed_congestion_control (chaîne ; voir le texte pour la valeur par défaut ; depuis Linux 2.4.20)
Afficher ou définir les choix d'algorithmes de contrôle de congestion disponibles pour les
processus non privilégiés (consultez la description de l'option TCP_CONGESTION pour les sockets).
Les éléments de la liste sont séparés par des espaces et terminés par un caractère de changement
de ligne. La liste est un sous-ensemble des algorithmes de la liste
tcp_available_congestion_control. La valeur par défaut est « reno » plus le paramètre par défaut
de tcp_congestion_control.
tcp_autocorking (booléen ; activé par défaut ; depuis Linux 3.14)
Si cette option est active, le noyau essaie de grouper les petites écritures (issues d'appels
consécutifs à write(2) et sendmsg(2)) autant que possible, afin de diminuer le nombre total de
paquets envoyés. La fusion est effectuée si au moins un paquet est en attent dans les files Qdisc
ou d'émission du périphérique. Les applications peuvent utiliser l'option de socket TCP_CORK afin
de contrôler comment et quand désactiver ce comportement.
tcp_available_congestion_control (chaîne ; lecture seule ; depuis Linux 2.4.20)
Afficher une liste des algorithmes de contrôle de congestion qui sont enregistrés. Les éléments de
la liste sont séparés par des espaces et terminés par un caractère de changement de ligne. Cette
liste limite l'ensemble des algorithmes permis pour la liste tcp_allowed_congestion_control. Plus
d'algorithmes de contrôle de congestion peuvent être disponible sous forme de modules, mais non
chargés.
tcp_app_win (entier ; 31 par défaut ; depuis Linux 2.4)
Cette variable définit combien d'octets de la fenêtre TCP sont réservés pour le surplus de tampon.
Un maximum de (fenetre/2^tcp_app_win, mss) octets de la fenêtre est réservé pour le tampon
d'application. Une valeur nulle indique qu'aucune portion n'est réservée.
tcp_base_mss (entier ; 512 par défaut ; depuis Linux 2.6.17)
La valeur initiale de search_low à utiliser pour la découverte du MTU du chemin dans la couche de
transport (mise en paquets). Si la découverte du MTU est activée, il s'agit du MSS de départ
utilisé par la connexion.
tcp_bic (booléen ; désactivé par défaut ; Linux 2.4.27/2.6.6 à 2.6.13)
Activer l'algorithme de contrôle de congestion TCP BIC. BIC-TCP est une modification côté émetteur
qui assure une linéarité du RTT (Délai d'aller-retour, « Round-Trip Time ») avec de grandes
fenêtres, tout en permettant un passage à l'échelle et en se bornant à la compatibilité TCP. Le
protocole combine deux effets appelés augmentation additive et recherche binaire. Lorsque la
fenêtre de congestion est grande, l'augmentation additive avec un incrément grand assure une
linéarité du RTT et un bon passage à l'échelle. Avec des petites fenêtres de congestion, la
recherche binaire fournit une compatibilité TCP.
tcp_bic_low_window (entier ; 14 par défaut ; Linux 2.4.27/2.6.6 à 2.6.13)
Corriger la fenêtre limite (en paquets) pour laquelle BIC TCP commence à ajuster la fenêtre de
congestion. Sous cette limite, BIC TCP se comporte comme l'algorithme TCP Reno par défaut.
tcp_bic_fast_convergence (booléen ; activé par défaut ; Linux 2.4.27/2.6.6 à 2.6.13)
Forcer BIC TCP à répondre plus vite aux changements de fenêtre de congestion. Permet à deux flux
partageant la même connexion de converger plus vite.
tcp_congestion_control (chaîne ; voir le texte pour la valeur par défaut ; depuis Linux 2.4.13)
Définir l'algorithme de contrôle de congestion à utiliser pour les nouvelles connexions.
L'algorithme « reno » est toujours disponible, mais des choix supplémentaires sont disponibles en
fonction de la configuration du noyau. La valeur par défaut pour ce fichier est définie dans la
configuration du noyau.
tcp_dma_copybreak (entier ; 4096 par défaut ; depuis Linux 2.6.24)
La limite inférieure, en octets, de la taille des lectures sur une socket qui seront délestées sur
le moteur de copie DMA, s'il y en a un sur le système et si le noyau a été configuré avec l'option
CONFIG_NET_DMA.
tcp_dsack (booléen ; activé par défaut ; depuis Linux 2.4)
Valider la prise en charge TCP SACK dupliqué de la RFC 2883.
tcp_ecn (booléen ; désactivé par défaut ; depuis Linux 2.4)
Valider la notification explicite de congestion de la RFC 2884. Lorsqu'elle est en service, la
connectivité avec certaines destinations peut être affectée à cause de vieux routeurs mal
configurés le long du trajet, et les connexions peuvent être rompues.
tcp_fack (booléen ; activé par défaut ; depuis Linux 2.4)
Valider la prise en charge TCP Forward Acknowledgement.
tcp_fin_timeout (entier ; 60 par défaut ; depuis Linux 2.2)
Nombre de secondes à attendre un paquet final FIN avant que la socket soit fermée de force.
Strictement parlant, c’est une violation des spécifications TCP, mais est nécessaire pour empêcher
les attaques par déni de service. La valeur par défaut dans les noyaux 2.2 est 180.
tcp_frto (entier ; 0 par défaut ; depuis Linux 2.4.21/2.6)
Activer F-RTO, un algorithme amélioré de récupération pour les temporisations de retransmission
TCP (RTO : « retransmission timeouts »). Il est particulièrement intéressant dans des
environnements sans fil, où la perte des paquets est typiquement due à des interférences radio
aléatoire plutôt qu'à la congestion des routeurs intermédiaires. Consultez la RFC 4138 pour plus
de détails.
Ce fichier peut prendre une des valeurs suivantes :
0 Désactivé.
1 La version de base de l'algorithme F-RTO est activée.
2 Active la version améliorée de F-RTO avec des SACK, si le flux utilise des SACK. La version de
base peut aussi être utilisée quand des SACK sont utilisés, même si dans ce cas des scénarios
existent dans lesquels F-RTO interagit mal avec le comptage de paquets du flux TCP utilisant
des SACK.
Avant Linux 2.6.22, ce paramètre était une valeur booléenne, qui ne prenait en charge que les
valeurs 0 et 1 ci-dessous.
tcp_frto_response (entier ; 0 par défaut ; depuis Linux 2.6.22)
Quand F-RTO a détecté une fausse expiration d'une temporisation (c'est-à-dire qu'elle aurait pu
être évitée si TCP avait eu un délai de retransmission plus long), TCP a plusieurs options sur ce
qu'il faut faire par la suite. Les valeurs possibles sont :
0 Diminution de moitié du débit ; une réponse douce et conservatrice qui résulte en une
diminution de moitié de la fenêtre de congestion (cwnd) et du seuil de démarrage lent
(ssthresh, « slow-start threshold ») après un délai d'aller-retour (RTT).
1 Réponse très conservatrice ; pas recommandée parce que bien que correcte, elle interagit mal
avec le reste de TCP sous Linux ; réduction de moitié de cwnd et de ssthresh immédiatement.
2 Réponse agressive ; supprime les mesures de contrôle de congestion qui sont connues pour ne pas
être nécessaire (en ignorant la possibilité d'une perte de retransmission qui forcerait TCP à
être plus prudent) ; cwnd et ssthresh sont remis aux valeurs antérieures à l'expiration du
délai.
tcp_keepalive_intvl (entier ; 75 par défaut ; depuis Linux 2.4)
L'intervalle en secondes entre deux messages TCP keep-alive.
tcp_keepalive_probes (entier ; 9 par défaut ; depuis Linux 2.2)
Nombre maximal de tentatives TCP keep-alive à envoyer avant d'abandonner et de tuer la connexion
si aucune réponse n'est obtenue de l'autre partie.
tcp_keepalive_time (entier ; 7200 par défaut ; depuis Linux 2.2)
Nombre de secondes durant lesquelles aucune donnée n'est transmise sur la connexion avant
d'envoyer un message keep-alive. Ces messages ne sont envoyés que si l'option SO_KEEPALIVE de la
socket est validée. La valeur par défaut est 7200 secondes (2 heures). Une connexion inactive est
coupée environ 11 minutes plus tard (9 tentatives à 75 secondes d'écart).
Notez que les délais de la couche de transport sous-jacente, ou de l'application peuvent être bien
plus courts.
tcp_low_latency (booléen ; désactivé par défaut ; depuis Linux 2.4.21/2.6)
S'il est activé, la pile TCP prend des décisions qui favorisent une latence plus faible par
opposition à un débit plus grand. Si cette option est désactivée, un débit plus grand est préféré.
Un cas où cette valeur par défaut devrait être changée est par exemple un cluster de calcul
Beowulf.
tcp_max_orphans (entier ; valeur par défaut : voir ci‐dessous ; depuis Linux 2.4)
Le nombre maximal de sockets TCP orphelines (attachées à aucun descripteur utilisateur) sur le
système. Quand ce nombre est dépassé, la connexion orpheline est réinitialisée et un message
d'avertissement est affiché. Cette limite n'existe que pour éviter les attaques par déni de
service ; la diminuer n'est pas recommandé. Certaines situations peuvent réclamer d'augmenter
cette limite, mais notez que chaque connexion orpheline peut consommer jusqu'à 64 ko de mémoire ne
pouvant pas être placé en espace d’échange. La valeur par défaut est égale au paramètre NR_FILE du
noyau. Elle est ajustée en fonction de la mémoire disponible sur le système.
tcp_max_syn_backlog (entier ; valeur par défaut : voir ci‐dessous ; depuis Linux 2.2)
Le nombre maximal de requêtes de connexions en attente, qui n'ont pas encore reçu d'acquittement
de la part du client se connectant. Si ce nombre est atteint, le noyau commencera à abandonner des
requêtes. La valeur par défaut, 256, est augmentée jusqu'à 1024 si la mémoire présente est
suffisante (>= 128 Mo) et peut être diminuée à 128 sur les systèmes avec très peu de mémoire (<=
32 Mo). Il est recommandé, s'il faut augmenter cette valeur au dessus de 1024, de modifier
TCP_SYNQ_HSIZE dans include/net/tcp.h pour conserver TCP_SYNQ_HSIZE * 16 <= tcp_max_syn_backlog et
de recompiler le noyau.
tcp_max_tw_buckets (entier ; valeur par défaut : voir ci‐dessous ; depuis Linux 2.4)
Le nombre maximal de sockets dans l'état TIME_WAIT autorisées sur le système. Cette limite
n'existe que pour éviter les attaques par déni de service. La valeur par défaut est NR_FILE*2,
ajustée en fonction de la mémoire disponible. Si ce nombre est atteint, la socket est fermée et un
avertissement est affiché.
tcp_moderate_rcvbuf (booléen ; activé par défaut ; Linux 2.4.17/2.6.7)
S'il est activé, TCP effectue un réglage automatique du tampon de réception, en essayant de
trouver la bonne taille automatiquement (pas plus grand que tcp_rmem[2]) pour correspondre à la
taille nécessaire pour un débit maximal sur le chemin.
tcp_mem (depuis Linux 2.4)
Il s'agit d'un vecteur de trois entiers : [bas, charge, haut]. Ces limites, mesurées dans une
unité qui correspond à la taille des pages système, sont utilisées par TCP pour surveiller sa
consommation mémoire. Les valeurs par défaut sont calculées au moment du démarrage à partir de la
mémoire disponible. (TCP ne peut utiliser que la mémoire basse pour cela, qui est limitée aux
environs de 900 Mo sur les systèmes 32 bits. Les systèmes 64 bits ne souffrent pas de cette
limitation.)
low TCP ne cherche pas à réguler ses allocations mémoire quand le nombre de pages qu'il a
alloué est en dessous de ce nombre
pressure Lorsque la taille mémoire allouée par TCP dépasse ce nombre de pages, TCP modère sa
consommation mémoire. L'état de mémoire chargée se termine lorsque le nombre de pages
allouées descend en dessous de la marque bas.
high Le nombre global maximal de pages que TCP allouera. Cette valeur surcharge tout autre
limite imposée par le noyau.
tcp_mtu_probing (entier ; 0 par défaut ; Linux 2.6.17)
Ce paramètre contrôle la découverte du MTU du chemin de la couche transport (« TCP
Packetization-Layer Path MTU Discovery »). Le fichier peut prendre les valeurs suivantes :
0 Désactivé
1 Désactivé par défaut, activé quand un trou noir ICMP est détecté
2 Toujours activé, utilise le MSS de départ de tcp_base_mss.
tcp_no_metrics_save (booléen ; désactivé par défaut ; depuis Linux 2.6.6)
Par défaut, TCP sauve différentes métriques sur la connexion dans la cache des routes quand la
connexion est fermée, de telle sorte que les connexions ouvertes rapidement après puissent les
utiliser comme conditions initiales. D'habitude, cela augmente globalement les performances, mais
peut parfois dégrader les performances. Si tcp_no_metrics_save est activé, TCP ne sauvera pas de
métrique dans la cache lors de la fermeture des connexions.
tcp_orphan_retries (entier ; 8 par défaut ; depuis Linux 2.4)
Le nombre maximal de tentatives pour accéder à l'autre extrémité d'une connexion dont notre côté a
été fermé.
tcp_reordering (entier ; 3 par défaut ; depuis Linux 2.4)
Le nombre de réorganisations dans un flux TCP avant de supposer qu'un paquet est perdu et
reprendre au début. Il n'est pas conseillé de modifier cette valeur. C'est une métrique sur la
détection des réordonnancements de paquets conçue pour minimiser les retransmissions inutiles
provoquées par la réorganisation des paquets dans une connexion.
tcp_retrans_collapse (booléen ; activé par défaut ; depuis Linux 2.2)
Essayer d'envoyer des paquets de tailles complètes durant les réémissions.
tcp_retries1 (entier ; 3 par défaut ; depuis Linux 2.2)
Le nombre de fois que TCP essayera de retransmettre un paquet sur une connexion établie
normalement, sans demander de contribution supplémentaire de la couche réseau concernée. Une fois
ce nombre atteint, la couche réseau doit remettre à jour son routage, si possible avant chaque
nouvelle transmission. La valeur par défaut, 3, est le minimum indiqué dans la RFC.
tcp_retries2 (entier ; 15 par défaut ; depuis Linux 2.2)
Le nombre de fois qu'un paquet TCP est retransmis sur une connexion établie avant d'abandonner. La
valeur par défaut est 15, ce qui correspond à une durée entre 13 et 30 minutes suivant le délai
maximal de retransmission. La limite minimale de 100 secondes spécifiée par la RFC 1122 est
typiquement considérée comme trop courte.
tcp_rfc1337 (booléen ; désactivé par défaut ; depuis Linux 2.2)
Activer le comportement TCP conformément à la RFC 1337. Lorsqu'il n'est pas activé, si un RST est
reçu en état TIME_WAIT, la socket est fermée immédiatement sans attendre la fin de la période
TIME_WAIT.
tcp_rmem (depuis Linux 2.4)
Il s'agit d'un vecteur de trois entiers : [min, défaut, max]. Ces paramètres sont utilisés par TCP
pour régler la taille du tampon de réception. TCP ajuste dynamiquement la taille à partir de la
valeur par défaut, dans l'intervalle de ces valeurs, en fonction de la mémoire disponible sur le
système.
min taille minimale du tampon de réception utilisée par chaque socket TCP. La valeur par
défaut est la taille des pages du système (sous Linux 2.4, la valeur par défaut est de
4 Ko et descend à PAGE_SIZE octets sur les systèmes avec peu de mémoire). Cette valeur
assure qu'en mode de mémoire chargée, les allocations en dessous de cette taille
réussiront. Elle n'est pas utilisée pour limiter la taille du tampon de réception,
déclarée en utilisant l'option SO_RCVBUF sur la socket.
default la taille par défaut du tampon de réception pour une socket TCP. Cette valeur écrase la
taille par défaut dans la valeur globale net.core.rmem_default définie pour tous les
protocoles. La valeur par défaut est 87380 octets (sous Linux 2.4, elle descend à 43689
sur les systèmes avec peu de mémoire). Si une taille plus grande est désirée, il faut
augmenter cette valeur (pour affecter toutes les sockets). Pour utiliser une grande
fenêtre TCP, l'option net.ipv4.tcp_window_scaling doit être activée (par défaut).
max la taille maximale du tampon de réception utilisé par chaque socket TCP. Cette valeur ne
surcharge pas la valeur globale net.core.rmem_max. Elle ne permet pas de limiter la
taille du tampon de réception déclarée avec l'option SO_RCVBUF sur la socket. La valeur
par défaut est calculé par la formule :
max(87380, min(4MB, tcp_mem[1]*PAGE_SIZE/128))
(Sous Linux 2.4, la valeur par défaut est de 87380*2 octets, et descendre à 87380 sur
les systèmes avec peu de mémoire)
tcp_sack (booléen ; activé par défaut ; depuis Linux 2.2)
Activer l'acquittement TCP sélectif (RFC 2018).
tcp_slow_start_after_idle (booléen ; activé par défaut ; depuis Linux 2.6.18)
S'il est activé, le comportement de la RFC 2861 est fournit et la fenêtre de congestion expire
après une période d'inactivité. Une période d'inactivité est définie comme le RTO
(« retransmission timeout » : le délai de retransmission). S'il est désactivé, la fenêtre de
congestion n'expirera pas après une période d'inactivité.
tcp_stdurg (booléen ; désactivé par défaut ; depuis Linux 2.2)
Activation de l'interprétation RFC 1122 du champ TCP Urgent-Pointer. Selon cette interprétation,
le pointeur urgent pointe vers le dernier octet de données urgentes. Par défaut une interprétation
compatible BSD de ce champ est utilisée, qui pointe vers le premier octet après les données
urgentes. Valider cette option peut poser des problèmes d'interaction entre systèmes.
tcp_syn_retries (entier ; 5 par défaut ; depuis Linux 2.2)
Le nombre maximal de fois où un paquet SYN initial sera retransmis pour une tentative de connexion
TCP active. Cette valeur ne doit pas dépasser 255. La valeur par défaut est 5, ce qui correspond
approximativement à 180 secondes.
tcp_synack_retries (entier ; 5 par défaut ; depuis Linux 2.2)
Le nombre maximal de fois où un segment SYN/ACK sera retransmis sur une connexion TCP passive. Ce
nombre ne doit pas dépasser 255.
tcp_syncookies (booléen ; depuis Linux 2.2)
Valider les syncookies TCP. Le noyau doit être compilé avec l'option CONFIG_SYN_COOKIES. Envoie
des syncookies lorsque la file d'attente des connexions sur une socket déborde. C’est utilisé pour
se protéger d'une attaque de type « SYN flood ». Ce ne est à utiliser qu'en dernier ressort. C'est
une violation du protocole TCP, et entre en conflit avec d'autres fonctions comme les extensions
TCP. Cela peut poser des problèmes avec les clients ou les relais. Ce mécanisme n'est pas
considéré comme un moyen de réglage sur un serveur très chargé ou mal configuré. Pour des
alternatives acceptables, consultez tcp_max_syn_backlog, tcp_synack_retries,
tcp_abort_on_overflow.
tcp_timestamps (booléen ; activé par défaut ; depuis Linux 2.2)
Activer les horodatages TCP (RFC 1323).
tcp_tso_win_divisor (entier ; 3 par défaut ; depuis Linux 2.6.9)
Ce paramètre contrôle le pourcentage de la fenêtre de congestion qui peut être utilisé par une
unique trame de segmentation (TSO : « TCP Segmentation Offload »). La valeur de ce paramètre est
un compromis entre une transmission par rafales et construire des trames avec un TSO plus
importants.
tcp_tw_recycle (booléen ; désactivé par défaut ; depuis Linux 2.4)
Activer le recyclage rapide des sockets TIME_WAIT. Cette option n'est pas recommandée car elle
peut poser des problèmes avec les redirections NAT (Network Address Translation).
tcp_tw_reuse (booléen ; désactivé par défaut ; depuis Linux 2.4.19/2.6)
Permet de réutiliser les sockets TIME_WAIT pour les nouvelles connexions quand c'est sûr du point
de vue du protocole. Cela ne devrait pas être modifié sans l'avis ou la demande d'experts
techniques.
tcp_vegas_cong_avoid (booléen ; désactivé par défaut ; Linux 2.2 à 2.6.13)
Active l'algorithme TCP Vegas d'évitement de congestion. TCP Vegas est une modification côté
émetteur de TCP qui anticipe la congestion en estimant la bande passante. TCP Vegas ajuste la
vitesse d'émission en modifiant la fenêtre de congestion. TCP Vegas devrait fournir moins de perte
de paquets, mais n'est pas aussi agressif que TCP Reno.
tcp_westwood (booléen ; désactivé par défaut ; Linux 2.4.26/2.6.3 à 2.6.13)
Active l'algorithme TCP Westwood+ de contrôle de congestion. TCP Westwood+ est une modification
côté émetteur de la pile de protocole TCP Reno qui optimise la performance du contrôle de
congestion TCP. Il est basé sur une estimation de bande passante de bout en bout pour définir la
fenêtre de congestion et un redémarrage lent après un épisode de congestion. Grâce à cette
estimation, TCP Westwood+ définit de façon adaptative une limite de démarrage lent et une fenêtre
de congestion qui prennent en compte la bande passante utilisée au moment où la congestion se
produit. TCP Westwood+ augmente de façon significative l'équité par rapport à TCP Reno dans les
réseaux filaires, et le débit sur des liens sans fil.
tcp_window_scaling (booléen ; activé par défaut ; depuis Linux 2.2)
Activer le dimensionnement de la fenêtre TCP (RFC 1323). Cette fonctionnalité permet d'utiliser
une grande fenêtre (> 64 Ko) sur une connexion TCP si le correspondant le prend en charge.
Normalement, les 16 bits du champ de longueur de fenêtre dans l'en-tête TCP limitent la taille à
64 Ko. Si des fenêtres plus grandes sont voulues, l'application peut augmenter la taille du tampon
de la socket et activer l'option tcp_window_scaling. Si tcp_window_scaling est inhibée, TCP ne
négociera pas l'utilisation du dimensionnement des fenêtres avec le correspondant lors de
l'initialisation de la connexion.
tcp_wmem (depuis Linux 2.4)
Il s'agit d'un vecteur de trois entiers : [min, défaut, max]. Ces paramètres servent à TCP pour
réguler la taille du tampon d'émission. La taille est ajustée dynamiquement à partir de la valeur
par défaut, dans l'intervalle de ces valeurs, en fonction de la mémoire disponible.
min La taille minimale du tampon d'émission utilisé par chaque socket TCP. La valeur par
défaut est la taille des pages du système (sous Linux 2.4, la valeur par défaut est de
4 Ko). Cette valeur assure qu'en mode de mémoire chargée, les allocations en dessous de
cette taille réussiront. Elle n'est pas utilisée pour limiter la taille du tampon de
réception, déclarée en utilisant l'option SO_SNDBUF sur la socket.
default La taille par défaut du tampon d'émission pour une socket TCP. Cette valeur surcharge la
taille par défaut de valeur globale /proc/sys/net/core/wmem_default définie pour tous
les protocoles. La valeur par défaut est 16 Ko. Si une taille plus grande est désirée,
il faut augmenter cette valeur (pour affecter toutes les sockets). Pour utiliser une
grande fenêtre TCP, /proc/sys/net/ipv4/tcp_window_scaling doit être positionné à une
valeur non nulle (par défaut).
max max - la taille maximale du tampon d'émission utilisé par chaque socket TCP. Cette
valeur ne surcharge pas la valeur globale qui se trouve dans
/proc/sys/net/core/wmem_max. Elle ne permet pas de limiter la taille du tampon de
réception déclarée avec l'option SO_SNDBUF sur la socket. La valeur par défaut est
calculée avec la formule :
max(65536, min(4MB, tcp_mem[1]*PAGE_SIZE/128))
Sous Linux 2.4, la valeur par défaut est de 128 Ko et descendre à 64 Ko sur les systèmes
avec peu de mémoire)
tcp_workaround_signed_windows (booléen ; désactivé par défaut ; depuis Linux 2.6.26)
S'il est activé, supposer que l'absence de réception d'une option de dimensionnement de la fenêtre
signifie que la pile TCP distante n'est pas correcte et traite la fenêtre comme une quantité
signée. S'il est désactivé, supposer que les piles TCP distantes ne sont jamais disfonctionnelles
même si aucune option de dimensionnement de la fenêtre n'est reçue de leur part.
Options de sockets
Pour lire ou écrire une option de socket TCP, appeler getsockopt(2) pour la lecture ou setsockopt(2) pour
l'écriture, avec l'argument niveau de socket valant IPPROTO_TCP. Sauf mention contraire, optval est un
pointeur vers un int. De plus, la plupart des options de socket IPPROTO_IP sont valables sur les sockets
TCP. Pour plus de détails, voir ip(7).
TCP_CONGESTION (depuis Linux 2.6.13)
L’argument pour cette option est une chaîne. Cette option permet à l’appelant de définir
l’algorithme de contrôle de congestion TCP par utilisateur. Les processus non privilégiés sont
restreints à utiliser un des algorithmes de tcp_allowed_congestion_control (décrit ci-dessus). Les
processus privilégiés (CAP_NET_ADMIN) peuvent choisir n’importe quel algorithme de contrôle de
congestion disponible (consultez la description de tcp_available_congestion_control ci-dessus).
TCP_CORK (depuis Linux 2.2)
Ne pas envoyer de trames partielles. Toutes les trames partielles en attente sont envoyées lorsque
cette option est effacée à nouveau. Cela permet de préparer les en-têtes avant d'appeler
sendfile(2), ou pour optimiser le débit. Avec l'implémentation actuelle, il y a une limite de
200 millisecondes au temps pendant lequel des données sont agrégées avec TCP_CORK. Si cette limite
est atteinte, les données mises en attente sont automatiquement transmises. Cette option ne peut
être combinée avec TCP_NODELAY que depuis Linux 2.5.71. Cette option ne doit pas être utilisée
dans du code conçu pour être portable.
TCP_DEFER_ACCEPT (depuis Linux 2.4)
Permettre à un processus en écoute de n'être réveillé que si des données arrivent sur la socket.
Prend une valeur entière (en secondes), correspondant au nombre maximal de tentatives que TCP fera
pour terminer la connexion. Cette option ne doit pas être utilisée dans du code conçu pour être
portable.
TCP_INFO (depuis Linux 2.4)
Fournit des informations sur la socket. Le noyau renvoie une structure struct tcp_info comme
définie dans le fichier /usr/include/linux/tcp.h. Cette option ne doit pas être utilisée dans du
code conçu pour être portable.
TCP_KEEPCNT (depuis Linux 2.4)
Le nombre maximal de messages keepalive envoyés par TCP avant d'abandonner une connexion. Cette
option ne doit pas être utilisée dans du code conçu pour être portable.
TCP_KEEPIDLE (depuis Linux 2.4)
La durée (en secondes) d'inactivité sur une connexion avant que TCP commence à envoyer les
messages keepalive, si l'option SO_KEEPALIVE a été activée sur la socket. Cette option ne doit pas
être employée dans du code conçu pour être portable.
TCP_KEEPINTVL (depuis Linux 2.4)
Délai (en seconde) entre deux messages keepalive. Cette option ne doit pas être utilisée dans du
code conçu pour être portable.
TCP_LINGER2 (depuis Linux 2.4)
La durée des sockets orphelines dans l'état FIN_WAIT2. Cette option peut servir à surcharger la
valeur du paramètre système du fichier /proc/sys/net/ipv4/tcp_fin_timeout spécialement pour la
socket. À ne pas confondre avec l'option SO_LINGER du niveau socket(7). Cette option ne doit pas
être utilisée dans du code conçu pour être portable.
TCP_MAXSEG
La taille maximale de segment pour les paquets TCP sortants. Dans Linux 2.2 et les versions
précédentes, ainsi que dans Linux 2.6.28 et les versions suivantes, si cette option est définie
avant d'établir la connexion, elle modifie également la valeur MSS annoncée à l'autre extrémité,
dans le paquet initial. Les valeurs supérieures au MTU de l'interface sont ignorées et n'ont pas
d'effet. TCP imposera ses limites minimales et maximales plutôt que les valeurs fournies.
TCP_NODELAY
Désactiver l'algorithme Nagle. Cela signifie que les paquets seront envoyés dès que possible, même
s'il n'y a que très peu de données. Sinon, les données sont conservées jusqu'à ce qu'il y en ait
un nombre suffisant, pour éviter d'envoyer de fréquents petits paquets, au détriment du réseau.
Cette option est moins prioritaire que TCP_CORK. Cependant, activer cette option force un vidage
des données actuellement en attente, même si TCP_CORK est actif.
TCP_QUICKACK (depuis Linux 2.4.4)
Valider le mode quickack, ou l'inhiber si l'option est nulle. En mode quickack, les acquittements
sont envoyés immédiatement plutôt que retardés si besoin par rapport au fonctionnement normal de
TCP. Cet attribut n'est pas permanent, il s'agit seulement d'un basculement vers ou depuis le mode
quickack. Les opérations ultérieures du protocole TCP feront à nouveau entrer/quitter le mode
quickack en fonction des traitements internes du protocole et de facteurs tels que les délais
d'acquittements retardés, ou les transferts de données. Cette option ne doit pas être utilisée
dans du code conçu pour être portable.
TCP_SYNCNT (depuis Linux 2.4)
Indique le nombre de retransmissions de SYN que TCP doit envoyer avant d'annuler la tentative de
connexion. Ne doit pas dépasser 255. Cette option ne doit pas être utilisée dans du code conçu
pour être portable.
TCP_USER_TIMEOUT (depuis Linux 2.6.37)
Cette option prend un unsigned int en argument. Quand la valeur est strictement positive, elle
indique la durée maximale en milliseconde pendant laquelle les données transmises peuvent rester
sans acquittement avant que TCP ne force la fermeture de connexion correspondante et renvoie
ETIMEDOUT à l’application. Si la valeur d’option indiquée est 0, TCP utilisera la valeur par
défaut du système.
Augmenter les délais par utilisateur permet à une connexion TCP de survivre pendant une période
plus importante sans connectivité directe. Diminuer les délais par utilisateur permet aux
applications d’« échouer rapidement » si nécessaire. Sinon, les échecs peuvent prendre jusqu’à
20 minutes avec les valeurs par défaut actuelles du système dans un environnement WAN normal.
Cette option peut être définie pendant n’importe quel état d’une connexion TCP, main n’est
effective que pendant les états synchronisés d’une connexion (ESTABLISHED, FIN-WAIT-1, FIN-WAIT-2,
CLOSE-WAIT, CLOSING et LAST-ACK). De plus, lorsqu’elle est utilisée avec l’option TCP keepalive
(SO_KEEPALIVE), TCP_USER_TIMEOUT écrasera keepalive pour déterminer quand fermer une connexion à
cause d’une erreur keepalive.
L’option est sans effet lorsque TCP retransmet un paquet ou quand un message keepalive est envoyé.
Cette option, comme bien d’autres, sera héritée par la socket renvoyée par accept(2) si elle avait
été définie sur la socket d’écoute.
De plus amples précisions sur la fonctionnalité de délai par utilisateur sont disponibles dans les
RFC 793 et RFC 5482 (« TCP User Timeout Option »).
TCP_WINDOW_CLAMP (depuis Linux 2.4)
Limite la taille de la fenêtre. Le noyau impose une taille minimale de SOCK_MIN_RCVBUF/2. Cette
option ne doit pas être employée dans du code conçu pour être portable.
API des sockets
TCP fourni une prise en charge limitée des données hors-bande, sous la forme de données urgentes (un seul
octet). Sous Linux cela signifie que si l'autre côté envoie de nouvelles données hors-bande, les données
urgentes plus anciennes sont insérées comme des données normales dans le flux (même quand SO_OOBINLINE
n'est pas actif). Cela diffère des piles basées sur BSD.
Linux utilise par défaut une interprétation compatible BSD du champ Urgent-Pointer. Cela viole la
RFC 1122, mais est indispensable pour l'interopérabilité avec les autres piles. On peut modifier ce
comportement avec /proc/sys/net/ipv4/tcp_stdurg.
Il est possible de jeter un coup d'œil aux données hors-bande en utilisant l'attribut MSG_PEEK de
recv(2).
Depuis la version 2.4, Linux prend en charge l'utilisation de MSG_TRUNC dans le paramètre flags de
recv(2) (et recvmsg(2)). Cet attribut a pour effet que les octets de données reçus sont ignorés, plutôt
que fournit au tampon fournit par l'appelant. Depuis Linux 2.4.4, MSG_TRUNC a également un effet
lorsqu'il est combiné à MSG_OOB pour recevoir les données hors-bande.
Ioctls
Les ioctl(2)s suivants renvoient des informations dans valeur. La syntaxe correcte est :
int valeur;
error = ioctl(tcp_socket, ioctl_type, &valeur);
ioctl_type est l'une des valeurs suivantes :
SIOCINQ
Renvoie la quantité de données non lues en attente dans le tampon de réception. La socket ne doit
pas être dans l'état LISTEN, sinon l'erreur EINVAL est renvoyée. SIOCINQ est défini dans
<linux/sockios.h>. Une alternative est d'utiliser le synonyme FIONREAD, défini dans <sys/ioctl.h>.
SIOCATMARK
Renvoie vrai (c'est-à-dire une valeur non nulle) si le flux de données entrantes est à la marque
de données urgentes.
Si l'option SO_OOBINLINE est activée, et SIOCATMARK renvoie vrai, la prochaine lecture sur la
socket renverra les données urgentes. Si l'option SO_OOBINLINE n'est pas activée, et SIOCATMARK
renvoie vrai, la prochaine lecture sur la socket renverra les octets suivant les données urgentes
(pour lire les données urgentes, il faut utiliser l'option MSG_OOB de recv()).
Notez qu'une lecture ne lit jamais de part et d'autre de la marque de données urgentes. Si une
application est informée de la présence de données urgentes avec select(2) (en utilisant
l'argument exceptfds) ou par la réception du signal SIGURG, il peut avancer jusqu'à la marque avec
une boucle qui teste de façon répétée SIOCATMARK et fait une lecture (demandant un nombre
quelconque d'octets) tant que SIOCATMARK renvoie faux.
SIOCOUTQ
Renvoie la quantité de données non envoyées en attente dans le tampon d'émission. La socket ne
doit pas être dans l'état LISTEN, sinon l'erreur EINVAL est renvoyée. SIOCOUTQ est défini dans
<linux/sockios.h>. Une alternative est d'utiliser le synonyme TIOCOUTQ, défini dans <sys/ioctl.h>.
Traitement des erreurs
Quand une erreur réseau se produit, TCP tente de renvoyer le paquet. S'il ne réussit pas après un certain
temps, soit ETIMEDOUT soit la dernière erreur reçue sur la connexion est renvoyée.
Certaines applications demandent une notification d'erreur plus rapide. Cela peut être validé avec
l'option de socket IP_RECVERR de niveau IPPROTO_IP. Quand cette option est active, toutes les erreurs
arrivant sont immédiatement passées au programme utilisateur. Employez cette option avec précaution, elle
rend TCP moins tolérant aux modifications de routage et autres conditions réseau normales.
ERREURS
EAFNOTSUPPORT
Le type d'adresse de la socket passée dans sin_family n'était pas AF_INET.
EPIPE L'autre extrémité a fermé inopinément la socket, ou une lecture est tentée sur une socket
terminée.
ETIMEDOUT
L'autre côté n'a pas acquitté les données retransmises après un certain délai.
Toutes les erreurs définies dans ip(7) ou au niveau générique des sockets peuvent aussi se produire avec
TCP.
VERSIONS
La prise en charge de notification explicite de congestion, l'émission de fichiers sans copie avec
sendfile(2), le réordonnancement et certaines extensions SACK (DSACK) ont été introduits dans Linux 2.4.
La prise en charge du Forward Acknowledgement (FACK), le recyclage de TIME_WAIT et les options keepalive
des sockets par connexion ont été introduits dans Linux 2.3.
BOGUES
Toutes les erreurs ne sont pas documentées.
IPv6 n'est pas décrit.
VOIR AUSSI
accept(2), bind(2), connect(2), getsockopt(2), listen(2), recvmsg(2), sendfile(2), sendmsg(2), socket(2),
ip(7), socket(7)
RFC 793 pour les spécifications TCP.
RFC 1122 pour les nécessités TCP et une description de l'algorithme Nagle.
RFC 1323 pour les options d'horodatage et la fenêtre TCP.
RFC 1337 pour une description des dangers de TIME_WAIT.
RFC 3168 pour une description de la notification explicite de congestion.
RFC 2581 pour des algorithmes de contrôle de congestion TCP.
RFC 2018 et RFC 2883 pour SACK et ses extensions.
COLOPHON
Cette page fait partie de la publication 3.65 du projet man-pages Linux. Une description du projet et des
instructions pour signaler des anomalies peuvent être trouvées à l'adresse
http://www.kernel.org/doc/man-pages/.
TRADUCTION
Depuis 2010, cette traduction est maintenue à l'aide de l'outil po4a <http://po4a.alioth.debian.org/> par
l'équipe de traduction francophone au sein du projet perkamon <http://perkamon.alioth.debian.org/>.
Christophe Blaess <http://www.blaess.fr/christophe/> (1996-2003), Alain Portal
<http://manpagesfr.free.fr/> (2003-2006). Julien Cristau et l'équipe francophone de traduction de
Debian (2006-2009).
Veuillez signaler toute erreur de traduction en écrivant à <debian-l10n-french@lists.debian.org> ou par
un rapport de bogue sur le paquet manpages-fr.
Vous pouvez toujours avoir accès à la version anglaise de ce document en utilisant la commande « man -L C
<section> <page_de_man> ».
Linux 31 mars 2014 TCP(7)