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