oracular (7) tcp.7.gz

Provided by: manpages-fr_4.23.1-1_all bug

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, 1122 et 2001 avec les extensions
       SACK (Selective acknowledgment) et NewReno. Ce protocole fournit une connexion  bidirectionnelle  fiable,
       orientée  flux,  entre  deux  sockets  au-dessus de ip(7), pour les versions 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.

       Un socket TCP nouvellement créé n'a pas d'adresse locale ou distante et n'est  pas  complètement  défini.
       Pour créer une connexion TCP sortante, utilisez connect(2) pour établir la connexion vers un autre socket
       TCP. Pour recevoir les connexions entrantes, attachez d'abord le socket avec bind(2) à une adresse locale
       et  un  port, puis appelez listen(2) pour mettre le socket dans un état d'attente. Après cela, un nouveau
       socket peut être accepté pour chaque connexion entrante en utilisant  accept(2).  Un  socket  sur  lequel
       accept(2)  ou  connect(2)  ont  été  appelés correctement est complètement défini et peut transmettre des
       données. Les données ne peuvent pas circuler sur les sockets en attente ou non connectés.

       Linux prend en charge les extensions TCP à hautes  performances  RFC 1323.  Ces  extensions  incluent  la
       protection  contre  les  numéros  de  séquence  bouclant  (PAWS  – Protection  Against Wrapped Sequence),
       l’augmentation de fenêtre (« Window Scaling ») et les horodatages  (« timestamps »).  Le  Window  Scaling
       permet d'utiliser des fenêtres TCP larges (> 64 ko) 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.  Elles  peuvent  être  définies  globalement avec les fichiers /proc/sys/net/ipv4/tcp_wmem et
       /proc/sys/net/ipv4/tcp_rmem ou  individuellement  pour  chaque  socket  avec  les  options  SO_SNDBUF  et
       SO_RCVBUF de l'appel système setsockopt(2).

       Les  tailles  maximales  pour  les  tampons  de  socket  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 l’appel
       setsockopt(2).  TCP  utilise  l’espace  supplémentaire  à des fins administratives et pour des structures
       internes du noyau, et les valeurs des fichiers de /proc renvoient des tailles supérieures  à  celles  des
       véritables  fenêtres  TCP.  Pour  les  connexions  individuelles, la taille du tampon de socket 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 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  à 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  du  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 activée, les données urgentes sont mises  dans  le  flux  de  données
       normal (et un programme peut détecter leur emplacement avec l'ioctl SIOCATMARK décrit ci-dessous), sinon,
       elles ne peuvent être reçues que lorsque l'attribut MSG_OOB est positionné pour recv(2) ou recvmsg(2).

       Quand des données hors bande sont présentes, select(2) indique le descripteur de fichier comme ayant  une
       condition exceptionnelle et poll(2) indique un événement POLLPRI.

       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 de sendfile(2)
       sans copie, la notification de congestion explicite (ECN), la nouvelle gestion des sockets TIME_WAIT, les
       options de socket « keep-alive » et la prise en charge des extensions  Duplicate  SACK  (acquittement  en
       double) .

   Formats d'adresse
       TCP est construit au-dessus de IP (consultez ip(7)). Les formats d'adresse définis par ip(7) s'appliquent
       pour TCP. TCP ne gère que les communications point-à-point. Les diffusion et multidiffusion (broadcast et
       multicast) ne sont pas gérées.

   /proc interfaces
       Les  paramètres  TCP  du système sont accessibles dans 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 ; Linux 2.6.15 à 3.8)
              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      augmenter cwnd une fois par acquittement (pas d'ABC)

              1      augmenter cwnd une fois par acquittement d'un segment complet

              2      permettre l'augmentation de cwnd par deux si l'acquittement  correspond  à  deux  segments,
                     pour compenser les acquittements retardés.

       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 de les accepter. Cela signifie que si un  débordement  se  produit  à  cause  d'une
              surcharge  temporaire, la connexion sera rétablie. N'activez cette option que si vous êtes sûr 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 du 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 la définition 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 fusionner 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 avant le flux est en  attente  dans
              les  files  d’attente  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 libérer leurs sockets.

       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 dans  tcp_allowed_congestion_control.
              Plus  d'algorithmes de contrôle de congestion peuvent être disponibles 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 (window/2^tcp_app_win, mss  – maximum  segment  size)  octets  de  la  fenêtre  sont
              réservés 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 (maximum transmission unit)
              du chemin dans la couche de transport (interrogation du MTU). Si la découverte du MTU est activée,
              il s'agit du MSS (maximum segment size) de départ utilisé par la connexion.

       tcp_bic (booléen ; désactivé par défaut ; Linux 2.4.27/2.6.6 à Linux 2.6.13)
              Activer  l'algorithme  de contrôle de congestion TCP BIC (Binary Increase Congestion control). BIC
              TCP est une modification  uniquement  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  schémas  appelés
              augmentation  additive et augmentation de recherche dichotomique. Lorsque la fenêtre de congestion
              est grande, l'augmentation additive avec un grand incrément assure une bonne linéarité du  RTT  et
              un  bon  passage à l'échelle. Avec des petites fenêtres de congestion, l’augmentation de recherche
              dichotomique augmente la compatibilité TCP.

       tcp_bic_low_window (entier ; 14 par défaut ; Linux 2.4.27/2.6.6 à Linux 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 à Linux 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  par  défaut  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 de socket qui seront transférées sur le
              moteur de copie DMA (accès direct à la mémoire), 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)
              Activer la prise en charge de TCP Duplicate SACK de la RFC 2883.

       tcp_fastopen (masque de bits ; défaut : 0x1 ; depuis Linux 3.7)
              Activer  la  prise en charge de l’accélération de connexion (Fast Open) de la RFC 7413. Ce drapeau
              est utilisé comme un tableau de bits avec les valeurs suivantes :

              0x1    Activer Fast Open du côté client

              0x2    Activer Fast Open du côté serveur

              0x4    Autoriser le côté client à transmettre des données dans SYN sans option Fast Open

              0x200  Autoriser le côté serveur à accepter des données de SYN sans option Fast Open

              0x400  Autoriser Fast Open pour tous les écouteurs sans option de socket TCP_FASTOPEN

       tcp_fastopen_key (depuis Linux 3.7)
              Définir la clé Fast Open RFC 7413 côté serveur pour générer le cookie de Fast Open quand la  prise
              en charge de Fast Open côté serveur est activée.

       tcp_ecn (entier ; valeur par défaut : voir ci‐dessous ; depuis Linux 2.4)
              Activer la notification explicite de congestion (ECN) de la RFC 3168.

              Ce fichier peut prendre une des valeurs suivantes :

              0      Désactiver  l’ECN.  Ne  jamais  initier  ni  accepter  l’ECN.  Valeur  par  défaut  jusqu’à
                     Linux 2.6.30 inclus.

              1      Activer l’ECN si demandée par les connexions entrantes et  aussi  requérir  l’ECN  sur  les
                     essais de connexion sortante.

              2      Activer  l’ECN si demandée par les connexions entrantes, mais ne pas requérir l’ECN sur les
                     connexions sortantes. Cette valeur est prise en charge et est la valeur par  défaut  depuis
                     Linux 2.6.31.

              Lorsqu’activé,   la   connectivité   vers  certaines  destinations  peut  être  affectée  à  cause
              d'équipements intermédiaires anciens au comportement défectueux le long du chemin, faisant que des
              connexions  sont rejetées. Cependant, pour faciliter et encourager le déploiement de l’option 1 et
              contourner de tels équipements bogués, l’option tcp_ecn_fallback a été introduite.

       tcp_ecn_fallfack (booléen ; activé par défaut ; depuis Linux 4.1)
              Activer la solution de secours de la RFC 3168, Section 6.1.1.1.  Lorsqu’activée,  les  SYN  de  la
              configuration  ECN  arrivant  à  échéance  dans  le  délai  normal de retransmission de SYN seront
              renvoyés avec CWR (Congestion Window Reduced) et ECE (ECN-Echo) effacés.

       tcp_fack (booléen ; activé par défaut ; depuis Linux 2.4)
              Activer la prise en charge de 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  le  socket  soit  fermé  de  force.
              Strictement parlant, c’est une violation des spécifications TCP, mais nécessaire pour empêcher les
              attaques par déni de service. La valeur par défaut dans les noyaux 2.2 était 180.

       tcp_frto (entier ; 0 par défaut ; depuis Linux 2.4.21/2.6)
              Activer  F-RTO  (forward  RTO-recovery),  un  algorithme  amélioré  de   récupération   pour   les
              temporisations  de  retransmission  TCP  (RTO :  « retransmission  timeouts »).  Cette  option est
              particulièrement intéressante dans les environnements sans fil, où la perte  des  paquets  est  en
              général  due  à  des  interférences  radio  aléatoires  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é. C’était la valeur par défaut jusqu’à Linux 2.6.23 inclus.

              1      La version de base de l'algorithme F-RTO est activée.

              2      Activer la version F-RTO améliorée de 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. C’est la valeur par défaut depuis Linux 2.6.24.

              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-dessus.

       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 TCP (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 prudente et sans problèmes 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  seul  RTT   (Round-trip   time   – temps
                     d’aller-retour).

              1      Réponse  très  prudente ; déconseillée parce que bien que correcte, elle interagit mal avec
                     le reste de TCP sous Linux ; elle réduit immédiatement de moitié de cwnd et de ssthresh.

              2      Réponse risquée ; supprime les mesures de contrôle de congestion qui  ne  sont  pas  jugées
                     nécessaires  (en  ignorant la possibilité d'une perte de retransmission qui devrait inciter
                     TCP à être plus prudent) ; cwnd et  ssthresh  sont  redéfinis  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  sondages  KA  (keep-alive)  de TCP à 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 une connexion est sans activité  avant  que  TCP  envoie  des
              sondages  keep-alive.  Ceux-ci ne sont envoyés que si l'option SO_KEEPALIVE de socket est activée.
              La valeur par défaut est 7200 secondes (2 heures).  Une  connexion  inactive  est  coupée  environ
              11 minutes plus tard (9 sondages avec 75 secondes d'écart).

              Notez  que  les  délais  des mécanismes de connexion sous-jacents 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 ; obsolète depuis Linux 4.14)
              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  une  grille  de  calcul
              Beowulf. Depuis Linux 4.14, la valeur de ce fichier est ignorée, même s'il existe toujours.

       tcp_max_orphans (entier ; valeur par défaut : voir ci‐dessous ; depuis Linux 2.4)
              Le  nombre maximal de sockets TCP orphelins (attachés à aucun gestionnaire de fichier 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 simples
              par déni de service. Sa diminution n'est pas recommandée. Certaines conditions de  réseau  peuvent
              nécessiter  l'augmentation  de  cette limite, mais notez que chaque socket orphelin peut consommer
              jusqu'à ~64 ko de mémoire ne pouvant pas être placés 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 dépassé, le noyau commencera à rejeter 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).

              Avant Linux 2.6.20, et s'il fallait augmenter cette valeur au dessus de 1024, il était  recommandé
              de  modifier  la taille de la table de hachage SYNACK (TCP_SYNQ_HSIZE) dans include/net/tcp.h pour
              conserver

                  TCP_SYNQ_HSIZE * 16 <= tcp_max_syn_backlog

              et le noyau devait être  recompilé.  Dans  Linux 2.6.20,  la  taille  fixe  TCP_SYNQ_HSIZE  a  été
              supprimée en faveur d'une taille dynamique.

       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és sur le système. Cette limite n'existe
              que pour éviter les attaques simples par déni de service. La valeur par défaut  de  NR_FILE*2  est
              ajustée  en fonction de la mémoire disponible. Si ce nombre est atteint, le socket est fermé et un
              avertissement est affiché.

       tcp_moderate_rcvbuf (booléen ; activé par défaut ; Linux 2.4.17/2.6.7)
              Si activé, TCP effectue un ajustage 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 : [low, pressure, high]. 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 pour cela que la mémoire basse qui est limitée à environ
              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ées 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 (pressure) se termine lorsque le nombre  de
                     pages allouées descend en dessous de la marque low.

              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  sauvegarde différentes métriques de connexion dans le cache des routes quand la
              connexion ferme, de telle sorte que les connexions ouvertes dans  un  futur  proche  puissent  les
              utiliser  pour  définir  les  conditions  initiales.  En  général,  cela  augmente globalement les
              performances, mais peut aussi parfois les dégrader. Si  tcp_no_metrics_save  est  activé,  TCP  ne
              sauvera pas de métriques dans le 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 sonder l'autre extrémité d'une connexion qui a été fermée par
              notre côté.

       tcp_reordering (entier ; 3 par défaut ; depuis Linux 2.4)
              Le nombre maximal de réarrangements d’un paquet dans un flux de paquets TCP sans que TCP assume la
              perte  du paquet et passe dans un démarrage lent. Il n'est pas conseillé de modifier cette valeur.
              C'est une métrique sur la détection de réarrangement de paquet conçue pour minimiser la diminution
              de  débit  et  les  retransmissions  inutiles  provoquées  par le réarrangement de paquet dans une
              connexion.

       tcp_retrans_collapse (booléen ; activé par défaut ; depuis Linux 2.2)
              Essayer d'envoyer des paquets de taille standard durant la retransmission.

       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  maximal  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 en général 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. Si désactivé, et si un  RST  est  reçu  en
              état TIME_WAIT, le socket est immédiatement fermé 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, default, max]. Ces paramètres sont utilisés par
              TCP pour réguler les tailles 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 pressure, 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 le socket.

              default
                     la  taille  par  défaut  du  tampon de réception pour un socket TCP. Cette valeur écrase la
                     taille par défaut initiale de la valeur globale net.core.rmem_default définie pour tous les
                     protocoles.  La  valeur par défaut est 87 380 octets (sous Linux 2.4, elle descend à 43 689
                     sur les systèmes avec peu de mémoire). Si une taille plus grande  est  souhaitée,  il  faut
                     augmenter  cette  valeur (pour affecter tous les sockets). Pour utiliser une grande fenêtre
                     TCP, l'option net.ipv4.tcp_window_scaling doit être activée (elle l'est 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 le socket. La valeur par défaut
                     est calculée par la formule :

                         max(87380, min(4 MB, tcp_mem[1]*PAGE_SIZE/128))

                     Sous  Linux 2.4,  la  valeur  par  défaut est de 87380*2 octets et réduite à 87 380 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)
              Si activé, adopte le comportement de la RFC 2861 et l’expiration de la fenêtre de congestion après
              une  période  d'inactivité.  Une  période  d'inactivité est définie comme le RTO (« retransmission
              timeout » : délai de retransmission). Si 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)
              Si  cette  option  est  activée,  alors  utilisation  de l’interprétation RFC 1122 du champ TCP de
              pointeur de données urgentes. Selon cette interprétation, le pointeur  d’urgence  pointe  vers  le
              dernier  octet  des  données  urgentes.  Si  cette  option  est  désactivée,  alors utilisation de
              l’interprétation compatible avec BSD de ce pointeur : pointage vers le  premier  octet  après  les
              données urgentes. Activer cette option peut poser des problèmes d'interopérabilité.

       tcp_syn_retries (entier ; 6 par défaut ; depuis Linux 2.2)
              Le  nombre  maximal  de  fois  où  une demande SYN initiale sera retransmise pour une tentative de
              connexion TCP active. Cette valeur ne doit pas dépasser 255. La valeur par défaut  est 6,  ce  qui
              correspond  approximativement  à  des  essais pendant 127 secondes. Avant Linux 3.7, la valeur par
              défaut était 5, ce qui (en conjonction avec des calculs basés sur d’autres  paramètres  du  noyau)
              correspondait approximativement à 180 secondes.

       tcp_synack_retries (entier ; 5 par défaut ; depuis Linux 2.2)
              Le  nombre  maximal  de  retransmissions  d'un  segment SYN/ACK pour une connexion TCP passive. Ce
              nombre ne doit pas dépasser 255.

       tcp_syncookies (entier ; 1 par défaut ; depuis Linux 2.2)
              Activer  les  syncookies  TCP  (SYN  cookies).  Le  noyau  doit   être   compilé   avec   l'option
              CONFIG_SYN_COOKIES.  La  fonctionnalité  des syncookies essaie de protéger un socket d’une attaque
              par inondation de SYN. Elle n’est à utiliser qu'en dernier ressort. Elle constitue  une  violation
              du  protocole  TCP et entre en conflit avec d'autres zones de TCP comme les extensions TCP, ce qui
              peut poser des problèmes aux clients ou aux relais. Ce mécanisme n'est pas recommandé comme  moyen
              de réglage sur un serveur très chargé pour faire face à des conditions de surcharge ou de mauvaise
              configuration.   Pour    des    alternatives    recommandées,    consultez    tcp_max_syn_backlog,
              tcp_synack_retries, tcp_abort_on_overflow. À régler à une des valeurs suivantes :

              0      Désactivation des syncookies TCP.

              1      Envoi de syncookies quand la file d’accumulation de SYN d’un socket déborde.

              2      (depuis  Linux 3.12)  Envoi de syncookies sans conditions. Cela peut être utile pour tester
                     un réseau.

       tcp_timestamps (entier ; par défaut 1 ; depuis Linux 2.2)
              À régler à une des valeurs suivantes  pour  activer  ou  désactiver  les  horodatages  TCP  de  la
              RFC 1323 :

              0      Désactiver les horodatages.

              1      Activer  les  horodatages  comme  définis  dans  la RFC 1323 et utiliser une heure de début
                     aléatoire pour chaque connexion plutôt que d’utiliser l’heure actuelle.

              2      Comme pour la valeur 1, mais sans  décalages  aléatoires.  Régler  tcp_timestamps  à  cette
                     valeur est significatif depuis Linux 4.10.

       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 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 importantes.

       tcp_tw_recycle (booléen ; désactivé par défaut ; de Linux 2.4 à Linux 4.11)
              Activer  le  recyclage rapide des sockets TIME_WAIT. Activer cette option n’est pas recommandé car
              l’IP distante peut ne pas incrémenter de manière monotone les horodatages (périphériques  derrière
              un NAT, périphériques avec décalages d’horodatage par connexion). Consulter les RFC 1323 (PAWS) et
              RFC 6191.

       tcp_tw_reuse (booléen ; désactivé par défaut ; depuis Linux 2.4.19/2.6)
              Permettre 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 à Linux 2.6.13)
              Activer l'algorithme TCP Vegas d'évitement de congestion. TCP  Vegas  est  une  modification  côté
              émetteur  de  TCP  qui anticipe la survenue de congestion en estimant la bande passante. TCP Vegas
              ajuste la vitesse d'émission en modifiant la fenêtre de congestion. TCP Vegas devrait diminuer  la
              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 à Linux 2.6.13)
              Activer  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 le seuil de redémarrage lent après un  épisode  de  congestion.  Grâce  à
              cette  estimation,  TCP  Westwood+  définit  de façon adaptative un seuil 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 la prend en charge.
              Normalement, les 16 bits du champ de largeur de fenêtre dans l'en-tête TCP limitent  la  taille  à
              moins  de  64 Ko.  Si  des  fenêtres plus grandes sont souhaitées, l'application peut augmenter la
              taille  de  leurs  tampons  de  socket  et   l'option   tcp_window_scaling   sera   utilisée.   Si
              tcp_window_scaling  est  désactivé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, default, 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 « pressure », les allocations en dessous de cette
                     taille  réussiront.  Elle  n'est  pas  utilisée pour limiter la taille du tampon d’émission
                     déclarée en utilisant l'option SO_SNDBUF sur un socket.

              default
                     La taille par défaut du tampon d'émission pour un 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 tous 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    La  taille  maximale  du  tampon d'émission utilisée 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 d’émission déclarée avec l'option SO_SNDBUF sur
                     un socket. La valeur par défaut est calculée avec la formule :

                         max(65536, min(4 MB, tcp_mem[1]*PAGE_SIZE/128))

                     Sous Linux 2.4, la valeur par défaut est de 128 Ko, réduite à 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 dysfonctionnelles
              même si aucune option de dimensionnement de la fenêtre n'est reçue de leur part.

   Options de socket
       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).

       Voici  une  liste  d’options  de  socket  spécifiques  à  TCP.  Pour  des  détails sur les autres options
       applicables aux sockets TCP, consulter socket(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  à  utiliser pour chaque socket. Les processus non
              privilégiés sont  contraints  d'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    (consulter    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 le socket.
              Cette option 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)
              Cette option est utilisée pour collecter des informations sur un  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 le 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 orphelins 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 le
              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 segments 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  retirée.  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)
              Indiquer  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  ou que les données en tampon demeurent non transmises (à cause d’une taille de
              fenêtre égale à zéro) 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, mais 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 le socket renvoyé par accept(2) s'il était
              défini sur le 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)
              Limiter  la  taille  de la fenêtre annoncée à cette valeur. 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.

       TCP_FASTOPEN (depuis Linux 3.6)
              Cette option active Fast Open (RFC 7413) sur le socket d’écoute.  La  valeur  spécifie  la  taille
              maximale  des  SYN  en attente (similaire à l’argument de file d’accumulation dans listen(2)). Une
              fois activée, le socket d’écoute avertit le cookie TCP Fast Open des SYN entrants  ayant  l’option
              TCP Fast Open.

              Plus  important, il accepte les données dans SYN avec un cookie Fast Open valable et répond par un
              acquittement SYN-ACK pour les données et la séquence SYN. accept(2) renvoie un socket pouvant être
              lu  et écrit quand l’établissement de la connexion (handshake) n’est pas encore terminé. L’échange
              de données  peut  ainsi  débuter  avant  la  fin  de  cet  établissement.  Cette  option  requiert
              l’activation  de  la prise en charge côté serveur de sysctl net.ip4.tcp_fastopen (voir au-dessus).
              Pour la prise en charge de Fast Open côté client, consulter MSG_FASTOPEN  ou  TCP_FASTOPEN_CONNECT
              de send(2) ci-dessous.

       TCP_FASTOPEN_CONNECT (depuis Linux 4.11)
              Cette  option  active un moyen de remplacement pour utiliser Fast Open sur le coté actif (client).
              Quand cette option est activée, connect(2) se comportera différemment selon qu’un cookie Fast Open
              est disponible ou non pour la destination.

              Si  un  cookie  n’est  pas  disponible (c’est-à-dire pour le premier contact avec la destination),
              connect(2) se comporte comme d’habitude en envoyant un SYN immédiatement, sauf que le SYN  inclura
              un cookie Fast Open vide pour solliciter un cookie.

              Si  un  cookie est disponible, connect(2) renvoie 0 immédiatement, mais la transmission du SYN est
              reportée. Un write(2) ou sendmsg(2) subséquent déclenchera un SYN  avec  données  et  cookie  dans
              l’option  Fast Open. En d’autres mots, la connexion réelle est reportée jusqu’à ce que des données
              soient fournies.

              Remarque : bien que cette option soit conçue pour plus de commodité, son  activation  ne  changera
              pas les comportements et certains appels système peuvent définir des valeurs errno différentes. Si
              le cookie est présent, write(2) ou sendmsg(2) doivent être appelées juste après connect(2) dans le
              but  d’envoyer  SYN + données  pour  achever  les  trois  étapes de connexion (three-way-handshake
              – 3WHS) et établir la connexion. Si on appelle read(2) juste après connect(2)  sans  write(2),  le
              socket bloquant sera bloqué à jamais.

              L’application  devrait  soit  définir  l’option  de  socket TCP_FASTOPEN_CONNECT avant write(2) ou
              sendmsg(2), ou appeler write(2) ou sendmsg(2) avec l’attribut MSG_FASTOPEN  directement,  au  lieu
              des deux sur la même connexion.

              Voici le flux typique d’appel avec cette nouvelle option.

                  s = socket();
                  setsockopt(s, IPPROTO_TCP, TCP_FASTOPEN_CONNECT, 1, ...);
                  connect(s);
                  write(s); /* write() doit toujours suivre connect()
                             * dans le but de déclencher l’émission de SYN */
                  read(s)/write(s);
                  /* ... */
                  close(s);

   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 l’interprétation compatible BSD du champ de pointeur de données urgentes, ce qui
       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 Linux 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  transmis
       au  tampon  fourni  par  l'appelant.  Depuis  Linux 2.4.4,  MSG_TRUNC a également cet effet lorsqu'il est
       combiné à MSG_OOB pour recevoir les données hors-bande.

   Ioctls
       Les appels ioctl(2) suivants renvoient des informations dans value. La syntaxe correcte est :

              int valeur;
              erreur = ioctl(tcp_socket, ioctl_type, &valeur);

       ioctl_type est l'une des valeurs suivantes :

       SIOCINQ
              Renvoi de la quantité de données non lues en attente dans le tampon de  réception.  Le  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
              Renvoi de 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  de  socket SO_OOBINLINE est activée et SIOCATMARK renvoie vrai, la prochaine lecture
              sur le socket renverra les données  urgentes.  Si  l'option  SO_OOBINLINE  n'est  pas  activée  et
              SIOCATMARK  renvoie  vrai,  la  prochaine  lecture  sur  le socket renverra les octets suivant les
              données urgentes (pour réellement lire les données urgentes, il faut utiliser l'option  l’attribut
              recv(MSG_OOB)).

              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, elle 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
              Renvoi  de  la  quantité  de  données non envoyées en attente dans la file d’attente d'émission de
              socket. Le socket ne doit pas être  dans  l'état  LISTEN,  sinon  l'erreur  EINVAL  est  renvoyée.
              SIOCOUTQ  est  défini  dans  <linux/sockios.h>.  Alternativement,  on  peut  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 activé 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 du socket passé dans sin_family n'était pas AF_INET.

       EPIPE  L'autre extrémité a fermé inopinément le socket ou une lecture est tentée sur un socket fermé.

       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  être  renvoyées
       pour TCP.

VERSIONS

       Les   prises  en  charge  de  notification  explicite  de  congestion,  de  sendfile(2)  sans  copie,  du
       réordonnancement et de certaines extensions SACK (DSACK) ont été introduites 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)

       Le fichier source du noyau Documentation/networking/ip-sysctl.txt.

       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 de dimensionnement de fenêtre TCP.
       RFC 1337 pour une description des risques surnommés « TIME_WAIT assassination hazards ».
       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.

TRADUCTION

       La   traduction   française   de   cette   page   de   manuel   a   été   créée   par  Christophe  Blaess
       <https://www.blaess.fr/christophe/>,   Stéphan   Rafin   <stephan.rafin@laposte.net>,   Thierry   Vignaud
       <tvignaud@mandriva.com>,  François  Micaux,  Alain Portal <aportal@univ-montp2.fr>, Jean-Philippe Guérard
       <fevrier@tigreraye.org>,   Jean-Luc   Coulon   (f5ibh)   <jean-luc.coulon@wanadoo.fr>,   Julien   Cristau
       <jcristau@debian.org>,      Thomas      Huriaux      <thomas.huriaux@gmail.com>,     Nicolas     François
       <nicolas.francois@centraliens.net>,    Florentin    Duneau    <fduneau@gmail.com>,     Simon     Paillard
       <simon.paillard@resel.enst-bretagne.fr>,     Denis    Barbier    <barbier@debian.org>,    David    Prévot
       <david@tilapin.org> et Jean-Paul Guillonneau <guillonneau.jeanpaul@free.fr>

       Cette traduction est une documentation libre ; veuillez vous reporter à la  GNU  General  Public  License
       version 3   ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩   concernant   les  conditions  de  copie  et  de
       distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.

       Si vous découvrez un bogue dans la traduction de cette page de manuel,  veuillez  envoyer  un  message  à
       ⟨debian-l10n-french@lists.debian.org⟩.