bionic (7) tcp.7.gz

Provided by: manpages-fr_3.65d1p1-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, RFC 1122 et RFC 2001 avec les
       extensions SACK et NewReno. Cela fournit une  connexion  full-duplex  fiable  orientée  flux  entre  deux
       sockets  au-dessus de ip(7), version 4 et 6. TCP garantit que les données arrivent dans l'ordre et assure
       la retransmission des paquets perdus. Il calcule et  vérifie  une  somme  de  contrôle  par  paquet  pour
       détecter les erreurs de transmission. TCP ne préserve pas les limites des enregistrements.

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

       Linux prend en charge les extensions TCP à hautes performances RFC 1323. Cela inclut la protection contre
       les numéros de séquence  bouclant  (PAWS),  la  modification  de  fenêtre  (« Window  Scaling »)  et  les
       horodatages  (« timestamps »).  Le  Window Scaling permet d'utiliser des fenêtres TCP larges (> 64K) pour
       gérer les liaisons avec une latence ou une bande passante élevées. Pour les  utiliser,  les  tailles  des
       tampons d'émission et de réception doivent être augmentées. Ils peuvent être définis globalement avec les
       fichiers /proc/sys/net/ipv4/tcp_wmem et /proc/sys/net/ipv4/tcp_rmem ou individuellement sur  les  sockets
       avec les options SO_SNDBUF et SO_RCVBUF de l'appel système setsockopt(2).

       Les  tailles maximales pour les tampons déclarés à l’aide de SO_SNDBUF et SO_RCVBUF sont limitées par les
       valeurs des fichiers /proc/sys/net/core/rmem_max et /proc/sys/net/core/wmem_max. Notez que TCP alloue  en
       fait  deux  fois  plus  de  place  que  la  taille  demandée  avec  l'appel setsockopt(2), et qu'un appel
       getsockopt(2) réussi ne renverra pas la même taille de tampon que celle réclamée dans  le  setsockopt(2).
       TCP  les  utilise à des fins administratives et pour des structures internes du noyau, et les valeurs des
       fichiers de /proc renvoient des tailles supérieures  à  celle  des  véritables  fenêtres  TCP.  Pour  les
       connexions  individuelles, la taille du tampon doit être définie avant les appels listen(2) ou connect(2)
       pour qu'elle soit prise en compte. Consultez socket(7) pour plus de détails.

       TCP permet de d'indiquer des données urgentes. Elles signalent au récepteur qu'un message  important  est
       dans  le  flux  de  données  et  qu'il  doit  être  traité le plus tôt possible. Pour envoyer des données
       urgentes, indiquez l'option MSG_OOB de send(2). Quand des données urgentes sont reçues, le  noyau  envoie
       un signal SIGURG au processus ou au groupe de processus qui a été indiqué comme propriétaire de la socket
       avec les ioctls SIOCSPGRP ou FIOSETOWN (ou l'opération F_SETOWN de fcntl(2), spécifiée par POSIX.1-2001).
       Quand  l'option  de  socket  SO_OOBINLINE  est  validée,  les données urgentes sont mises dans le flux de
       données normal (et peuvent être détectées avec l'ioctl SIOCATMARK), sinon, elles ne peuvent  être  reçues
       que lorsque l'attribut MSG_OOB est positionné pour recv(2) ou recvmsg(2).

       Linux 2.4  a introduit un certain nombre de changements pour améliorer le débit et l'extensibilité, ainsi
       que des fonctionnalités améliorées. Certaines de ces fonctions incluent la  prise  en  charge  d'émission
       sans  copie  avec  sendfile(2),  la  notification  de congestion explicite (ECN), la nouvelle gestion des
       sockets TIME_WAIT, les options « keep-alive » et la prise en charge des extensions SACK dupliqués.

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

   Interfaces /proc
       Les paramètres TCP du système sont accessibles avec les fichiers du  répertoire  /proc/sys/net/ipv4/.  De
       plus,  la  plupart des interfaces /proc d'IP s'appliquent à TCP. Consultez ip(7). Les variables indiquées
       comme booléennes prennent une valeur entière, une valeur non nulle indiquant que l'option est active, une
       valeur nulle indiquant que l'option est inactive.

       tcp_abc (entier ; 0 par défaut ; depuis Linux 2.6.15)
              Contrôler  l'ABC  (« Appropriate  Byte  Count » :  décompte  d'octets  approprié),  défini dans la
              RFC 3465. ABC est une façon d'augmenter la fenêtre de congestion (cwnd : « congestion window) plus
              lentement en réponse à des acquittements partiels. Les valeurs possibles sont :

              0  augment cwnd une fois par acquittement (pas d'ABC)

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

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

       tcp_abort_on_overflow (booléen ; désactivé par défaut ; depuis Linux 2.4)
              Valider la réinitialisation des connexions si le service en écoute est trop lent et  incapable  de
              les  traiter  et  les  accepter.  Cela  signifie  que  si  un débordement se produit à cause d'une
              surcharge temporaire, la connexion va se rattraper. N'activez cette option que si vous  êtes  SÛRS
              que  le  démon  en écoute ne peut pas être configuré pour accepter les connexions plus vite. Cette
              option peut désorienter les clients de votre serveur.

       tcp_adv_win_scale (entier ; 2 par défaut ; depuis Linux 2.4)
              Calculer le surplus du tampon comme bytes/2^tcp_adv_win_scale, si tcp_adv_win_scale est  supérieur
              à 0 ; ou bytes-bytes/2^(-tcp_adv_win_scale), si tcp_adv_win_scale est inférieur ou égal à zéro.

              L'espace  du  tampon  de  réception  de la socket est partagé entre l'application et le noyau. TCP
              conserve une portion du tampon en tant que fenêtre TCP, c'est la taille de la fenêtre de réception
              indiquée au correspondant. Le reste de cet espace est utilisé comme tampon d'« application », pour
              isoler le réseau des latences de l'ordonnanceur et de l'application. La valeur par défaut  (2)  de
              tcp_adv_win_scale  indique  que  l'espace  utilisé  pour  le  tampon d'application est un quart de
              l'espace total.

       tcp_allowed_congestion_control (chaîne ; voir le texte pour la valeur par défaut ; depuis Linux 2.4.20)
              Afficher ou définir les choix  d'algorithmes  de  contrôle  de  congestion  disponibles  pour  les
              processus  non privilégiés (consultez la description de l'option TCP_CONGESTION pour les sockets).
              Les éléments de la liste sont séparés par des espaces et terminés par un caractère  de  changement
              de    ligne.    La    liste    est    un    sous-ensemble    des    algorithmes    de   la   liste
              tcp_available_congestion_control. La valeur par défaut est « reno » plus le paramètre  par  défaut
              de tcp_congestion_control.

       tcp_autocorking (booléen ; activé par défaut ; depuis Linux 3.14)
              Si  cette  option  est  active,  le noyau essaie de grouper les petites écritures (issues d'appels
              consécutifs à write(2) et sendmsg(2)) autant que possible, afin de diminuer  le  nombre  total  de
              paquets  envoyés. La fusion est effectuée si au moins un paquet est en attent dans les files Qdisc
              ou d'émission du périphérique. Les applications peuvent utiliser l'option de socket TCP_CORK  afin
              de contrôler comment et quand désactiver ce comportement.

       tcp_available_congestion_control (chaîne ; lecture seule ; depuis Linux 2.4.20)
              Afficher une liste des algorithmes de contrôle de congestion qui sont enregistrés. Les éléments de
              la liste sont séparés par des espaces et terminés par un caractère de changement de  ligne.  Cette
              liste  limite l'ensemble des algorithmes permis pour la liste tcp_allowed_congestion_control. Plus
              d'algorithmes de contrôle de congestion peuvent être disponible sous forme de  modules,  mais  non
              chargés.

       tcp_app_win (entier ; 31 par défaut ; depuis Linux 2.4)
              Cette variable définit combien d'octets de la fenêtre TCP sont réservés pour le surplus de tampon.

              Un  maximum  de  (fenetre/2^tcp_app_win,  mss) octets  de  la  fenêtre  est réservé pour le tampon
              d'application. Une valeur nulle indique qu'aucune portion n'est réservée.

       tcp_base_mss (entier ; 512 par défaut ; depuis Linux 2.6.17)
              La valeur initiale de search_low à utiliser pour la découverte du MTU du chemin dans la couche  de
              transport  (mise  en  paquets).  Si  la  découverte du MTU est activée, il s'agit du MSS de départ
              utilisé par la connexion.

       tcp_bic (booléen ; désactivé par défaut ; Linux 2.4.27/2.6.6 à 2.6.13)
              Activer l'algorithme de contrôle de congestion TCP BIC. BIC-TCP est une modification côté émetteur
              qui  assure  une  linéarité  du  RTT  (Délai  d'aller-retour, « Round-Trip Time ») avec de grandes
              fenêtres, tout en permettant un passage à l'échelle et en se bornant à la  compatibilité  TCP.  Le
              protocole  combine  deux  effets  appelés  augmentation  additive et recherche binaire. Lorsque la
              fenêtre de congestion est grande, l'augmentation additive  avec  un  incrément  grand  assure  une
              linéarité  du  RTT  et  un  bon  passage  à l'échelle. Avec des petites fenêtres de congestion, la
              recherche binaire fournit une compatibilité TCP.

       tcp_bic_low_window (entier ; 14 par défaut ; Linux 2.4.27/2.6.6 à 2.6.13)
              Corriger la fenêtre limite (en paquets) pour laquelle BIC TCP commence à  ajuster  la  fenêtre  de
              congestion. Sous cette limite, BIC TCP se comporte comme l'algorithme TCP Reno par défaut.

       tcp_bic_fast_convergence (booléen ; activé par défaut ; Linux 2.4.27/2.6.6 à 2.6.13)
              Forcer  BIC  TCP à répondre plus vite aux changements de fenêtre de congestion. Permet à deux flux
              partageant la même connexion de converger plus vite.

       tcp_congestion_control (chaîne ; voir le texte pour la valeur par défaut ; depuis Linux 2.4.13)
              Définir l'algorithme  de  contrôle  de  congestion  à  utiliser  pour  les  nouvelles  connexions.
              L'algorithme  « reno » est toujours disponible, mais des choix supplémentaires sont disponibles en
              fonction de la configuration du noyau. La valeur par défaut pour ce fichier est  définie  dans  la
              configuration du noyau.

       tcp_dma_copybreak (entier ; 4096 par défaut ; depuis Linux 2.6.24)
              La limite inférieure, en octets, de la taille des lectures sur une socket qui seront délestées sur
              le moteur de copie DMA, s'il y en a un sur le système et si le noyau a été configuré avec l'option
              CONFIG_NET_DMA.

       tcp_dsack (booléen ; activé par défaut ; depuis Linux 2.4)
              Valider la prise en charge TCP SACK dupliqué de la RFC 2883.

       tcp_ecn (booléen ; désactivé par défaut ; depuis Linux 2.4)
              Valider  la  notification  explicite  de congestion de la RFC 2884. Lorsqu'elle est en service, la
              connectivité avec certaines destinations  peut  être  affectée  à  cause  de  vieux  routeurs  mal
              configurés le long du trajet, et les connexions peuvent être rompues.

       tcp_fack (booléen ; activé par défaut ; depuis Linux 2.4)
              Valider la prise en charge TCP Forward Acknowledgement.

       tcp_fin_timeout (entier ; 60 par défaut ; depuis Linux 2.2)
              Nombre  de  secondes  à  attendre  un  paquet  final FIN avant que la socket soit fermée de force.
              Strictement parlant, c’est une violation des spécifications TCP, mais est nécessaire pour empêcher
              les attaques par déni de service. La valeur par défaut dans les noyaux 2.2 est 180.

       tcp_frto (entier ; 0 par défaut ; depuis Linux 2.4.21/2.6)
              Activer  F-RTO,  un  algorithme amélioré de récupération pour les temporisations de retransmission
              TCP  (RTO :  « retransmission  timeouts »).  Il  est   particulièrement   intéressant   dans   des
              environnements  sans  fil,  où  la perte des paquets est typiquement due à des interférences radio
              aléatoire plutôt qu'à la congestion des routeurs intermédiaires. Consultez la RFC 4138  pour  plus
              de détails.

              Ce fichier peut prendre une des valeurs suivantes :

              0  Désactivé.

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

              2  Active  la version améliorée de F-RTO avec des SACK, si le flux utilise des SACK. La version de
                 base peut aussi être utilisée quand des SACK sont utilisés, même si dans ce cas  des  scénarios
                 existent  dans  lesquels  F-RTO interagit mal avec le comptage de paquets du flux TCP utilisant
                 des SACK.

              Avant Linux 2.6.22, ce paramètre était une valeur booléenne, qui ne  prenait  en  charge  que  les
              valeurs 0 et 1 ci-dessous.

       tcp_frto_response (entier ; 0 par défaut ; depuis Linux 2.6.22)
              Quand  F-RTO  a  détecté une fausse expiration d'une temporisation (c'est-à-dire qu'elle aurait pu
              être évitée si TCP avait eu un délai de retransmission plus long), TCP a plusieurs options sur  ce
              qu'il faut faire par la suite. Les valeurs possibles sont :

              0  Diminution  de  moitié  du  débit ;  une  réponse  douce  et  conservatrice  qui résulte en une
                 diminution de moitié de la  fenêtre  de  congestion  (cwnd)  et  du  seuil  de  démarrage  lent
                 (ssthresh, « slow-start threshold ») après un délai d'aller-retour (RTT).

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

              2  Réponse agressive ; supprime les mesures de contrôle de congestion qui sont connues pour ne pas
                 être  nécessaire  (en ignorant la possibilité d'une perte de retransmission qui forcerait TCP à
                 être plus prudent) ; cwnd et ssthresh sont remis aux  valeurs  antérieures  à  l'expiration  du
                 délai.

       tcp_keepalive_intvl (entier ; 75 par défaut ; depuis Linux 2.4)
              L'intervalle en secondes entre deux messages TCP keep-alive.

       tcp_keepalive_probes (entier ; 9 par défaut ; depuis Linux 2.2)
              Nombre  maximal  de tentatives TCP keep-alive à envoyer avant d'abandonner et de tuer la connexion
              si aucune réponse n'est obtenue de l'autre partie.

       tcp_keepalive_time (entier ; 7200 par défaut ; depuis Linux 2.2)
              Nombre de secondes durant  lesquelles  aucune  donnée  n'est  transmise  sur  la  connexion  avant
              d'envoyer  un  message keep-alive. Ces messages ne sont envoyés que si l'option SO_KEEPALIVE de la
              socket est validée. La valeur par défaut est 7200 secondes (2 heures). Une connexion inactive  est
              coupée environ 11 minutes plus tard (9 tentatives à 75 secondes d'écart).

              Notez que les délais de la couche de transport sous-jacente, ou de l'application peuvent être bien
              plus courts.

       tcp_low_latency (booléen ; désactivé par défaut ; depuis Linux 2.4.21/2.6)
              S'il est activé, la pile TCP prend des décisions  qui  favorisent  une  latence  plus  faible  par
              opposition à un débit plus grand. Si cette option est désactivée, un débit plus grand est préféré.
              Un cas où cette valeur par défaut devrait être changée  est  par  exemple  un  cluster  de  calcul
              Beowulf.

       tcp_max_orphans (entier ; valeur par défaut : voir ci‐dessous ; depuis Linux 2.4)
              Le  nombre  maximal  de  sockets TCP orphelines (attachées à aucun descripteur utilisateur) sur le
              système. Quand ce nombre est dépassé, la connexion  orpheline  est  réinitialisée  et  un  message
              d'avertissement  est  affiché.  Cette  limite  n'existe  que  pour éviter les attaques par déni de
              service ; la diminuer n'est pas recommandé.  Certaines  situations  peuvent  réclamer  d'augmenter
              cette limite, mais notez que chaque connexion orpheline peut consommer jusqu'à 64 ko de mémoire ne
              pouvant pas être placé en espace d’échange. La valeur par défaut est égale au paramètre NR_FILE du
              noyau. Elle est ajustée en fonction de la mémoire disponible sur le système.

       tcp_max_syn_backlog (entier ; valeur par défaut : voir ci‐dessous ; depuis Linux 2.2)
              Le  nombre  maximal de requêtes de connexions en attente, qui n'ont pas encore reçu d'acquittement
              de la part du client se connectant. Si ce nombre est atteint, le noyau commencera à abandonner des
              requêtes.  La  valeur  par  défaut,  256,  est  augmentée  jusqu'à 1024 si la mémoire présente est
              suffisante (>= 128 Mo) et peut être diminuée à 128 sur les systèmes avec très peu de  mémoire  (<=
              32 Mo).  Il  est  recommandé,  s'il  faut  augmenter  cette  valeur au dessus de 1024, de modifier
              TCP_SYNQ_HSIZE dans include/net/tcp.h pour conserver TCP_SYNQ_HSIZE * 16 <= tcp_max_syn_backlog et
              de recompiler le noyau.

       tcp_max_tw_buckets (entier ; valeur par défaut : voir ci‐dessous ; depuis Linux 2.4)
              Le  nombre  maximal  de  sockets  dans  l'état  TIME_WAIT  autorisées sur le système. Cette limite
              n'existe que pour éviter les attaques par déni de service. La valeur  par  défaut  est  NR_FILE*2,
              ajustée en fonction de la mémoire disponible. Si ce nombre est atteint, la socket est fermée et un
              avertissement est affiché.

       tcp_moderate_rcvbuf (booléen ; activé par défaut ; Linux 2.4.17/2.6.7)
              S'il est activé, TCP effectue un réglage automatique  du  tampon  de  réception,  en  essayant  de
              trouver  la  bonne  taille automatiquement (pas plus grand que tcp_rmem[2]) pour correspondre à la
              taille nécessaire pour un débit maximal sur le chemin.

       tcp_mem (depuis Linux 2.4)
              Il s'agit d'un vecteur de trois entiers : [bas, charge, haut].  Ces  limites,  mesurées  dans  une
              unité  qui  correspond  à  la  taille des pages système, sont utilisées par TCP pour surveiller sa
              consommation mémoire. Les valeurs par défaut sont calculées au moment du démarrage à partir de  la
              mémoire  disponible.  (TCP  ne  peut  utiliser que la mémoire basse pour cela, qui est limitée aux
              environs de 900 Mo sur les systèmes 32 bits. Les  systèmes  64 bits  ne  souffrent  pas  de  cette
              limitation.)

              low       TCP  ne  cherche  pas à réguler ses allocations mémoire quand le nombre de pages qu'il a
                        alloué est en dessous de ce nombre

              pressure  Lorsque la taille mémoire allouée par TCP dépasse ce nombre  de  pages,  TCP  modère  sa
                        consommation  mémoire.  L'état  de mémoire chargée se termine lorsque le nombre de pages
                        allouées descend en dessous de la marque bas.

              high      Le nombre global maximal de pages que TCP allouera. Cette valeur  surcharge  tout  autre
                        limite imposée par le noyau.

       tcp_mtu_probing (entier ; 0 par défaut ; Linux 2.6.17)
              Ce   paramètre   contrôle   la  découverte  du  MTU  du  chemin  de  la  couche  transport  (« TCP
              Packetization-Layer Path MTU Discovery »). Le fichier peut prendre les valeurs suivantes :

              0  Désactivé

              1  Désactivé par défaut, activé quand un trou noir ICMP est détecté

              2  Toujours activé, utilise le MSS de départ de tcp_base_mss.

       tcp_no_metrics_save (booléen ; désactivé par défaut ; depuis Linux 2.6.6)
              Par défaut, TCP sauve différentes métriques sur la connexion dans la cache  des  routes  quand  la
              connexion  est  fermée,  de  telle sorte que les connexions ouvertes rapidement après puissent les
              utiliser comme conditions initiales. D'habitude, cela augmente globalement les performances,  mais
              peut  parfois  dégrader les performances. Si tcp_no_metrics_save est activé, TCP ne sauvera pas de
              métrique dans la cache lors de la fermeture des connexions.

       tcp_orphan_retries (entier ; 8 par défaut ; depuis Linux 2.4)
              Le nombre maximal de tentatives pour accéder à l'autre extrémité d'une connexion dont notre côté a
              été fermé.

       tcp_reordering (entier ; 3 par défaut ; depuis Linux 2.4)
              Le  nombre  de  réorganisations  dans  un  flux  TCP  avant  de supposer qu'un paquet est perdu et
              reprendre au début. Il n'est pas conseillé de modifier cette valeur. C'est  une  métrique  sur  la
              détection  des  réordonnancements  de  paquets  conçue pour minimiser les retransmissions inutiles
              provoquées par la réorganisation des paquets dans une connexion.

       tcp_retrans_collapse (booléen ; activé par défaut ; depuis Linux 2.2)
              Essayer d'envoyer des paquets de tailles complètes durant les réémissions.

       tcp_retries1 (entier ; 3 par défaut ; depuis Linux 2.2)
              Le nombre de fois  que  TCP  essayera  de  retransmettre  un  paquet  sur  une  connexion  établie
              normalement,  sans demander de contribution supplémentaire de la couche réseau concernée. Une fois
              ce nombre atteint, la couche réseau doit remettre à jour son routage,  si  possible  avant  chaque
              nouvelle transmission. La valeur par défaut, 3, est le minimum indiqué dans la RFC.

       tcp_retries2 (entier ; 15 par défaut ; depuis Linux 2.2)
              Le nombre de fois qu'un paquet TCP est retransmis sur une connexion établie avant d'abandonner. La
              valeur par défaut est 15, ce qui correspond à une durée entre 13 et 30 minutes  suivant  le  délai
              maximal  de  retransmission.  La  limite  minimale  de  100 secondes spécifiée par la RFC 1122 est
              typiquement considérée comme trop courte.

       tcp_rfc1337 (booléen ; désactivé par défaut ; depuis Linux 2.2)
              Activer le comportement TCP conformément à la RFC 1337. Lorsqu'il n'est pas activé, si un RST  est
              reçu  en  état  TIME_WAIT,  la  socket est fermée immédiatement sans attendre la fin de la période
              TIME_WAIT.

       tcp_rmem (depuis Linux 2.4)
              Il s'agit d'un vecteur de trois entiers : [min, défaut, max]. Ces paramètres sont utilisés par TCP
              pour  régler  la  taille du tampon de réception. TCP ajuste dynamiquement la taille à partir de la
              valeur par défaut, dans l'intervalle de ces valeurs, en fonction de la mémoire disponible  sur  le
              système.

              min       taille  minimale  du  tampon  de réception utilisée par chaque socket TCP. La valeur par
                        défaut est la taille des pages du système (sous Linux 2.4, la valeur par défaut  est  de
                        4 Ko  et  descend à PAGE_SIZE octets sur les systèmes avec peu de mémoire). Cette valeur
                        assure qu'en mode de mémoire  chargée,  les  allocations  en  dessous  de  cette  taille
                        réussiront.  Elle  n'est  pas  utilisée  pour  limiter la taille du tampon de réception,
                        déclarée en utilisant l'option SO_RCVBUF sur la socket.

              default   la taille par défaut du tampon de réception pour une socket TCP. Cette valeur écrase  la
                        taille  par  défaut  dans  la valeur globale net.core.rmem_default définie pour tous les
                        protocoles. La valeur par défaut est 87380 octets (sous Linux 2.4, elle descend à  43689
                        sur  les  systèmes  avec peu de mémoire). Si une taille plus grande est désirée, il faut
                        augmenter cette valeur (pour affecter toutes les  sockets).  Pour  utiliser  une  grande
                        fenêtre TCP, l'option net.ipv4.tcp_window_scaling doit être activée (par défaut).

              max       la taille maximale du tampon de réception utilisé par chaque socket TCP. Cette valeur ne
                        surcharge pas la valeur globale net.core.rmem_max. Elle ne  permet  pas  de  limiter  la
                        taille  du tampon de réception déclarée avec l'option SO_RCVBUF sur la socket. La valeur
                        par défaut est calculé par la formule :

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

                        (Sous Linux 2.4, la valeur par défaut est de 87380*2 octets, et descendre  à  87380  sur
                        les systèmes avec peu de mémoire)

       tcp_sack (booléen ; activé par défaut ; depuis Linux 2.2)
              Activer l'acquittement TCP sélectif (RFC 2018).

       tcp_slow_start_after_idle (booléen ; activé par défaut ; depuis Linux 2.6.18)
              S'il  est  activé,  le  comportement de la RFC 2861 est fournit et la fenêtre de congestion expire
              après  une  période  d'inactivité.  Une  période   d'inactivité   est   définie   comme   le   RTO
              (« retransmission  timeout » :  le  délai  de  retransmission).  S'il est désactivé, la fenêtre de
              congestion n'expirera pas après une période d'inactivité.

       tcp_stdurg (booléen ; désactivé par défaut ; depuis Linux 2.2)
              Activation de l'interprétation RFC 1122 du champ TCP Urgent-Pointer. Selon  cette  interprétation,
              le pointeur urgent pointe vers le dernier octet de données urgentes. Par défaut une interprétation
              compatible BSD de ce champ est utilisée, qui pointe  vers  le  premier  octet  après  les  données
              urgentes. Valider cette option peut poser des problèmes d'interaction entre systèmes.

       tcp_syn_retries (entier ; 5 par défaut ; depuis Linux 2.2)
              Le nombre maximal de fois où un paquet SYN initial sera retransmis pour une tentative de connexion
              TCP active. Cette valeur ne doit pas dépasser 255. La valeur par défaut est 5, ce  qui  correspond
              approximativement à 180 secondes.

       tcp_synack_retries (entier ; 5 par défaut ; depuis Linux 2.2)
              Le  nombre maximal de fois où un segment SYN/ACK sera retransmis sur une connexion TCP passive. Ce
              nombre ne doit pas dépasser 255.

       tcp_syncookies (booléen ; depuis Linux 2.2)
              Valider les syncookies TCP. Le noyau doit être compilé avec  l'option  CONFIG_SYN_COOKIES.  Envoie
              des syncookies lorsque la file d'attente des connexions sur une socket déborde. C’est utilisé pour
              se protéger d'une attaque de type « SYN flood ». Ce ne est à utiliser qu'en dernier ressort. C'est
              une  violation  du protocole TCP, et entre en conflit avec d'autres fonctions comme les extensions
              TCP. Cela peut poser des problèmes avec  les  clients  ou  les  relais.  Ce  mécanisme  n'est  pas
              considéré  comme  un  moyen  de  réglage  sur  un  serveur  très chargé ou mal configuré. Pour des
              alternatives      acceptables,      consultez       tcp_max_syn_backlog,       tcp_synack_retries,
              tcp_abort_on_overflow.

       tcp_timestamps (booléen ; activé par défaut ; depuis Linux 2.2)
              Activer les horodatages TCP (RFC 1323).

       tcp_tso_win_divisor (entier ; 3 par défaut ; depuis Linux 2.6.9)
              Ce  paramètre  contrôle  le  pourcentage de la fenêtre de congestion qui peut être utilisé par une
              unique trame de segmentation (TSO : « TCP Segmentation Offload »). La valeur de ce  paramètre  est
              un  compromis  entre  une  transmission  par  rafales  et  construire  des trames avec un TSO plus
              importants.

       tcp_tw_recycle (booléen ; désactivé par défaut ; depuis Linux 2.4)
              Activer le recyclage rapide des sockets TIME_WAIT. Cette option n'est  pas  recommandée  car  elle
              peut poser des problèmes avec les redirections NAT (Network Address Translation).

       tcp_tw_reuse (booléen ; désactivé par défaut ; depuis Linux 2.4.19/2.6)
              Permet  de réutiliser les sockets TIME_WAIT pour les nouvelles connexions quand c'est sûr du point
              de vue du protocole. Cela ne devrait  pas  être  modifié  sans  l'avis  ou  la  demande  d'experts
              techniques.

       tcp_vegas_cong_avoid (booléen ; désactivé par défaut ; Linux 2.2 à 2.6.13)
              Active  l'algorithme  TCP  Vegas  d'évitement  de  congestion. TCP Vegas est une modification côté
              émetteur de TCP qui anticipe la congestion en estimant la bande  passante.  TCP  Vegas  ajuste  la
              vitesse d'émission en modifiant la fenêtre de congestion. TCP Vegas devrait fournir moins de perte
              de paquets, mais n'est pas aussi agressif que TCP Reno.

       tcp_westwood (booléen ; désactivé par défaut ; Linux 2.4.26/2.6.3 à 2.6.13)
              Active l'algorithme TCP Westwood+ de contrôle de congestion. TCP Westwood+  est  une  modification
              côté  émetteur  de  la  pile  de  protocole  TCP  Reno  qui optimise la performance du contrôle de
              congestion TCP. Il est basé sur une estimation de bande passante de bout en bout pour  définir  la
              fenêtre  de  congestion  et  un  redémarrage  lent  après  un épisode de congestion. Grâce à cette
              estimation, TCP Westwood+ définit de façon adaptative une limite de démarrage lent et une  fenêtre
              de  congestion  qui  prennent  en  compte la bande passante utilisée au moment où la congestion se
              produit. TCP Westwood+ augmente de façon significative l'équité par rapport à TCP  Reno  dans  les
              réseaux filaires, et le débit sur des liens sans fil.

       tcp_window_scaling (booléen ; activé par défaut ; depuis Linux 2.2)
              Activer  le  dimensionnement  de la fenêtre TCP (RFC 1323). Cette fonctionnalité permet d'utiliser
              une grande fenêtre (> 64 Ko) sur une connexion  TCP  si  le  correspondant  le  prend  en  charge.
              Normalement,  les  16 bits du champ de longueur de fenêtre dans l'en-tête TCP limitent la taille à
              64 Ko. Si des fenêtres plus grandes sont voulues, l'application peut augmenter la taille du tampon
              de  la  socket  et  activer l'option tcp_window_scaling. Si tcp_window_scaling est inhibée, TCP ne
              négociera pas l'utilisation  du  dimensionnement  des  fenêtres  avec  le  correspondant  lors  de
              l'initialisation de la connexion.

       tcp_wmem (depuis Linux 2.4)
              Il  s'agit  d'un  vecteur de trois entiers : [min, défaut, max]. Ces paramètres servent à TCP pour
              réguler la taille du tampon d'émission. La taille est ajustée dynamiquement à partir de la  valeur
              par défaut, dans l'intervalle de ces valeurs, en fonction de la mémoire disponible.

              min       La  taille  minimale  du  tampon d'émission utilisé par chaque socket TCP. La valeur par
                        défaut est la taille des pages du système (sous Linux 2.4, la valeur par défaut  est  de
                        4 Ko).  Cette valeur assure qu'en mode de mémoire chargée, les allocations en dessous de
                        cette taille réussiront. Elle n'est pas utilisée pour limiter la  taille  du  tampon  de
                        réception, déclarée en utilisant l'option SO_SNDBUF sur la socket.

              default   La taille par défaut du tampon d'émission pour une socket TCP. Cette valeur surcharge la
                        taille par défaut de valeur globale /proc/sys/net/core/wmem_default  définie  pour  tous
                        les  protocoles.  La valeur par défaut est 16 Ko. Si une taille plus grande est désirée,
                        il faut augmenter cette valeur (pour affecter toutes les  sockets).  Pour  utiliser  une
                        grande  fenêtre  TCP,  /proc/sys/net/ipv4/tcp_window_scaling  doit être positionné à une
                        valeur non nulle (par défaut).

              max       max - la taille maximale du tampon d'émission  utilisé  par  chaque  socket  TCP.  Cette
                        valeur    ne    surcharge    pas    la    valeur    globale    qui    se   trouve   dans
                        /proc/sys/net/core/wmem_max. Elle ne permet pas  de  limiter  la  taille  du  tampon  de
                        réception  déclarée  avec  l'option  SO_SNDBUF  sur  la socket. La valeur par défaut est
                        calculée avec la formule :

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

                        Sous Linux 2.4, la valeur par défaut est de 128 Ko et descendre à 64 Ko sur les systèmes
                        avec peu de mémoire)

       tcp_workaround_signed_windows (booléen ; désactivé par défaut ; depuis Linux 2.6.26)
              S'il est activé, supposer que l'absence de réception d'une option de dimensionnement de la fenêtre
              signifie que la pile TCP distante n'est pas correcte et  traite  la  fenêtre  comme  une  quantité
              signée.  S'il est désactivé, supposer que les piles TCP distantes ne sont jamais disfonctionnelles
              même si aucune option de dimensionnement de la fenêtre n'est reçue de leur part.

   Options de sockets
       Pour lire ou écrire une option de socket TCP, appeler getsockopt(2) pour la lecture ou setsockopt(2) pour
       l'écriture,  avec  l'argument  niveau de socket valant IPPROTO_TCP. Sauf mention contraire, optval est un
       pointeur vers un int. De plus, la plupart des options de socket IPPROTO_IP sont valables sur les  sockets
       TCP. Pour plus de détails, voir ip(7).

       TCP_CONGESTION (depuis Linux 2.6.13)
              L’argument  pour  cette  option  est  une  chaîne.  Cette  option  permet  à l’appelant de définir
              l’algorithme de contrôle de congestion TCP par utilisateur. Les  processus  non  privilégiés  sont
              restreints à utiliser un des algorithmes de tcp_allowed_congestion_control (décrit ci-dessus). Les
              processus privilégiés (CAP_NET_ADMIN) peuvent choisir n’importe quel  algorithme  de  contrôle  de
              congestion disponible (consultez la description de tcp_available_congestion_control ci-dessus).

       TCP_CORK (depuis Linux 2.2)
              Ne pas envoyer de trames partielles. Toutes les trames partielles en attente sont envoyées lorsque
              cette option est effacée  à  nouveau.  Cela  permet  de  préparer  les  en-têtes  avant  d'appeler
              sendfile(2),  ou  pour  optimiser  le  débit. Avec l'implémentation actuelle, il y a une limite de
              200 millisecondes au temps pendant lequel des données sont agrégées avec TCP_CORK. Si cette limite
              est  atteinte,  les données mises en attente sont automatiquement transmises. Cette option ne peut
              être combinée avec TCP_NODELAY que depuis Linux 2.5.71. Cette option ne  doit  pas  être  utilisée
              dans du code conçu pour être portable.

       TCP_DEFER_ACCEPT (depuis Linux 2.4)
              Permettre  à  un processus en écoute de n'être réveillé que si des données arrivent sur la socket.
              Prend une valeur entière (en secondes), correspondant au nombre maximal de tentatives que TCP fera
              pour  terminer  la  connexion. Cette option ne doit pas être utilisée dans du code conçu pour être
              portable.

       TCP_INFO (depuis Linux 2.4)
              Fournit des informations sur la socket. Le noyau  renvoie  une  structure  struct  tcp_info  comme
              définie  dans  le fichier /usr/include/linux/tcp.h. Cette option ne doit pas être utilisée dans du
              code conçu pour être portable.

       TCP_KEEPCNT (depuis Linux 2.4)
              Le nombre maximal de messages keepalive envoyés par TCP avant d'abandonner  une  connexion.  Cette
              option ne doit pas être utilisée dans du code conçu pour être portable.

       TCP_KEEPIDLE (depuis Linux 2.4)
              La  durée  (en  secondes)  d'inactivité  sur  une  connexion  avant que TCP commence à envoyer les
              messages keepalive, si l'option SO_KEEPALIVE a été activée sur la socket. Cette option ne doit pas
              être employée dans du code conçu pour être portable.

       TCP_KEEPINTVL (depuis Linux 2.4)
              Délai  (en  seconde) entre deux messages keepalive. Cette option ne doit pas être utilisée dans du
              code conçu pour être portable.

       TCP_LINGER2 (depuis Linux 2.4)
              La durée des sockets orphelines dans l'état FIN_WAIT2. Cette option peut servir  à  surcharger  la
              valeur  du  paramètre  système  du fichier /proc/sys/net/ipv4/tcp_fin_timeout spécialement pour la
              socket. À ne pas confondre avec l'option SO_LINGER du niveau socket(7). Cette option ne  doit  pas
              être utilisée dans du code conçu pour être portable.

       TCP_MAXSEG
              La  taille  maximale  de  segment  pour  les  paquets TCP sortants. Dans Linux 2.2 et les versions
              précédentes, ainsi que dans Linux 2.6.28 et les versions suivantes, si cette  option  est  définie
              avant  d'établir  la connexion, elle modifie également la valeur MSS annoncée à l'autre extrémité,
              dans le paquet initial. Les valeurs supérieures au MTU de l'interface sont ignorées et  n'ont  pas
              d'effet. TCP imposera ses limites minimales et maximales plutôt que les valeurs fournies.

       TCP_NODELAY
              Désactiver l'algorithme Nagle. Cela signifie que les paquets seront envoyés dès que possible, même
              s'il n'y a que très peu de données. Sinon, les données sont conservées jusqu'à ce qu'il y  en  ait
              un  nombre  suffisant,  pour éviter d'envoyer de fréquents petits paquets, au détriment du réseau.
              Cette option est moins prioritaire que TCP_CORK. Cependant, activer cette option force  un  vidage
              des données actuellement en attente, même si TCP_CORK est actif.

       TCP_QUICKACK (depuis Linux 2.4.4)
              Valider  le mode quickack, ou l'inhiber si l'option est nulle. En mode quickack, les acquittements
              sont envoyés immédiatement plutôt que retardés si besoin par rapport au fonctionnement  normal  de
              TCP. Cet attribut n'est pas permanent, il s'agit seulement d'un basculement vers ou depuis le mode
              quickack. Les opérations ultérieures du protocole TCP feront  à  nouveau  entrer/quitter  le  mode
              quickack  en  fonction  des  traitements  internes du protocole et de facteurs tels que les délais
              d'acquittements retardés, ou les transferts de données. Cette option ne  doit  pas  être  utilisée
              dans du code conçu pour être portable.

       TCP_SYNCNT (depuis Linux 2.4)
              Indique  le  nombre de retransmissions de SYN que TCP doit envoyer avant d'annuler la tentative de
              connexion. Ne doit pas dépasser 255. Cette option ne doit pas être utilisée  dans  du  code  conçu
              pour être portable.

       TCP_USER_TIMEOUT (depuis Linux 2.6.37)
              Cette  option  prend  un  unsigned int en argument. Quand la valeur est strictement positive, elle
              indique la durée maximale en milliseconde pendant laquelle les données transmises  peuvent  rester
              sans  acquittement  avant  que  TCP  ne  force la fermeture de connexion correspondante et renvoie
              ETIMEDOUT à l’application. Si la valeur d’option indiquée est  0,  TCP  utilisera  la  valeur  par
              défaut du système.

              Augmenter  les  délais  par utilisateur permet à une connexion TCP de survivre pendant une période
              plus importante sans  connectivité  directe.  Diminuer  les  délais  par  utilisateur  permet  aux
              applications  d’«  échouer  rapidement »  si nécessaire. Sinon, les échecs peuvent prendre jusqu’à
              20 minutes avec les valeurs par défaut actuelles du système dans un environnement WAN normal.

              Cette option peut être définie pendant  n’importe  quel  état  d’une  connexion  TCP,  main  n’est
              effective que pendant les états synchronisés d’une connexion (ESTABLISHED, FIN-WAIT-1, FIN-WAIT-2,
              CLOSE-WAIT, CLOSING et LAST-ACK). De plus, lorsqu’elle est utilisée avec  l’option  TCP  keepalive
              (SO_KEEPALIVE),  TCP_USER_TIMEOUT  écrasera keepalive pour déterminer quand fermer une connexion à
              cause d’une erreur keepalive.

              L’option est sans effet lorsque TCP retransmet un paquet ou quand un message keepalive est envoyé.

              Cette option, comme bien d’autres, sera héritée par la socket renvoyée par accept(2) si elle avait
              été définie sur la socket d’écoute.

              De plus amples précisions sur la fonctionnalité de délai par utilisateur sont disponibles dans les
              RFC 793 et RFC 5482 (« TCP User Timeout Option »).

       TCP_WINDOW_CLAMP (depuis Linux 2.4)
              Limite la taille de la fenêtre. Le noyau impose une taille minimale  de  SOCK_MIN_RCVBUF/2.  Cette
              option ne doit pas être employée dans du code conçu pour être portable.

   API des sockets
       TCP fourni une prise en charge limitée des données hors-bande, sous la forme de données urgentes (un seul
       octet). Sous Linux cela signifie que si l'autre côté envoie de nouvelles données hors-bande, les  données
       urgentes  plus  anciennes  sont insérées comme des données normales dans le flux (même quand SO_OOBINLINE
       n'est pas actif). Cela diffère des piles basées sur BSD.

       Linux utilise par défaut une interprétation  compatible  BSD  du  champ  Urgent-Pointer.  Cela  viole  la
       RFC 1122,  mais  est  indispensable  pour  l'interopérabilité  avec les autres piles. On peut modifier ce
       comportement avec /proc/sys/net/ipv4/tcp_stdurg.

       Il est possible de jeter un coup d'œil  aux  données  hors-bande  en  utilisant  l'attribut  MSG_PEEK  de
       recv(2).

       Depuis  la  version 2.4,  Linux  prend  en  charge  l'utilisation de MSG_TRUNC dans le paramètre flags de
       recv(2) (et recvmsg(2)). Cet attribut a pour effet que les octets de données reçus sont  ignorés,  plutôt
       que  fournit  au  tampon  fournit  par  l'appelant.  Depuis  Linux 2.4.4,  MSG_TRUNC a également un effet
       lorsqu'il est combiné à MSG_OOB pour recevoir les données hors-bande.

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

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

       ioctl_type est l'une des valeurs suivantes :

       SIOCINQ
              Renvoie la quantité de données non lues en attente dans le tampon de réception. La socket ne  doit
              pas  être  dans  l'état  LISTEN,  sinon  l'erreur  EINVAL  est  renvoyée.  SIOCINQ est défini dans
              <linux/sockios.h>. Une alternative est d'utiliser le synonyme FIONREAD, défini dans <sys/ioctl.h>.

       SIOCATMARK
              Renvoie vrai (c'est-à-dire une valeur non nulle) si le flux de données entrantes est à  la  marque
              de données urgentes.

              Si  l'option  SO_OOBINLINE  est  activée,  et SIOCATMARK renvoie vrai, la prochaine lecture sur la
              socket renverra les données urgentes. Si l'option SO_OOBINLINE n'est pas  activée,  et  SIOCATMARK
              renvoie  vrai, la prochaine lecture sur la socket renverra les octets suivant les données urgentes
              (pour lire les données urgentes, il faut utiliser l'option MSG_OOB de recv()).

              Notez qu'une lecture ne lit jamais de part et d'autre de la marque de  données  urgentes.  Si  une
              application  est  informée  de  la  présence  de  données  urgentes  avec  select(2) (en utilisant
              l'argument exceptfds) ou par la réception du signal SIGURG, il peut avancer jusqu'à la marque avec
              une  boucle  qui  teste  de  façon  répétée  SIOCATMARK  et  fait une lecture (demandant un nombre
              quelconque d'octets) tant que SIOCATMARK renvoie faux.

       SIOCOUTQ
              Renvoie la quantité de données non envoyées en attente dans le tampon  d'émission.  La  socket  ne
              doit  pas  être  dans  l'état LISTEN, sinon l'erreur EINVAL est renvoyée. SIOCOUTQ est défini dans
              <linux/sockios.h>. Une alternative est d'utiliser le synonyme TIOCOUTQ, défini dans <sys/ioctl.h>.

   Traitement des erreurs
       Quand une erreur réseau se produit, TCP tente de renvoyer le paquet. S'il ne réussit pas après un certain
       temps, soit ETIMEDOUT soit la dernière erreur reçue sur la connexion est renvoyée.

       Certaines  applications  demandent  une  notification  d'erreur  plus  rapide. Cela peut être validé avec
       l'option de socket IP_RECVERR de niveau IPPROTO_IP. Quand cette option est  active,  toutes  les  erreurs
       arrivant sont immédiatement passées au programme utilisateur. Employez cette option avec précaution, elle
       rend TCP moins tolérant aux modifications de routage et autres conditions réseau normales.

ERREURS

       EAFNOTSUPPORT
              Le type d'adresse de la socket passée dans sin_family n'était pas AF_INET.

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

       ETIMEDOUT
              L'autre côté n'a pas acquitté les données retransmises après un certain délai.

       Toutes  les erreurs définies dans ip(7) ou au niveau générique des sockets peuvent aussi se produire avec
       TCP.

VERSIONS

       La prise en charge de notification explicite de  congestion,  l'émission  de  fichiers  sans  copie  avec
       sendfile(2),  le réordonnancement et certaines extensions SACK (DSACK) ont été introduits dans Linux 2.4.
       La prise en charge du Forward Acknowledgement (FACK), le recyclage de TIME_WAIT et les options  keepalive
       des sockets par connexion ont été introduits dans Linux 2.3.

BOGUES

       Toutes les erreurs ne sont pas documentées.
       IPv6 n'est pas décrit.

VOIR AUSSI

       accept(2), bind(2), connect(2), getsockopt(2), listen(2), recvmsg(2), sendfile(2), sendmsg(2), socket(2),
       ip(7), socket(7)

       RFC 793 pour les spécifications TCP.
       RFC 1122 pour les nécessités TCP et une description de l'algorithme Nagle.
       RFC 1323 pour les options d'horodatage et la fenêtre TCP.
       RFC 1337 pour une description des dangers de TIME_WAIT.
       RFC 3168 pour une description de la notification explicite de congestion.
       RFC 2581 pour des algorithmes de contrôle de congestion TCP.
       RFC 2018 et RFC 2883 pour SACK et ses extensions.

COLOPHON

       Cette page fait partie de la publication 3.65 du projet man-pages Linux. Une description du projet et des
       instructions     pour     signaler     des     anomalies    peuvent    être    trouvées    à    l'adresse
       http://www.kernel.org/doc/man-pages/.

TRADUCTION

       Depuis 2010, cette traduction est maintenue à l'aide de l'outil po4a <http://po4a.alioth.debian.org/> par
       l'équipe de traduction francophone au sein du projet perkamon <http://perkamon.alioth.debian.org/>.

       Christophe       Blaess       <http://www.blaess.fr/christophe/>      (1996-2003),      Alain      Portal
       <http://manpagesfr.free.fr/> (2003-2006).  Julien  Cristau  et  l'équipe  francophone  de  traduction  de
       Debian (2006-2009).

       Veuillez  signaler  toute erreur de traduction en écrivant à <debian-l10n-french@lists.debian.org> ou par
       un rapport de bogue sur le paquet manpages-fr.

       Vous pouvez toujours avoir accès à la version anglaise de ce document en utilisant la commande « man -L C
       <section> <page_de_man> ».