tcp(7) Miscellaneous Information Manual tcp(7) NOM tcp - Protocole TCP SYNOPSIS #include #include #include tcp_socket = socket(AF_INET, SOCK_STREAM, 0); DESCRIPTION Il s'agit d'une implementation du protocole TCP defini dans les RFC 793, 1122 et 2001 avec les extensions SACK (Selective acknowledgment) et NewReno. Ce protocole fournit une connexion bidirectionnelle fiable, orientee flux, entre deux sockets au-dessus de ip(7), pour les versions 4 et 6. TCP garantit que les donnees arrivent dans l'ordre et assure la retransmission des paquets perdus. Il calcule et verifie une somme de controle par paquet pour detecter les erreurs de transmission. TCP ne preserve pas les limites des enregistrements. Un socket TCP nouvellement cree n'a pas d'adresse locale ou distante et n'est pas completement defini. Pour creer une connexion TCP sortante, utilisez connect(2) pour etablir la connexion vers un autre socket TCP. Pour recevoir les connexions entrantes, attachez d'abord le socket avec bind(2) a une adresse locale et un port, puis appelez listen(2) pour mettre le socket dans un etat d'attente. Apres cela, un nouveau socket peut etre accepte pour chaque connexion entrante en utilisant accept(2). Un socket sur lequel accept(2) ou connect(2) ont ete appeles correctement est completement defini et peut transmettre des donnees. Les donnees ne peuvent pas circuler sur les sockets en attente ou non connectes. Linux prend en charge les extensions TCP a hautes performances RFC 1323. Ces extensions incluent la protection contre les numeros de sequence bouclant (PAWS - Protection Against Wrapped Sequence), l'augmentation de fenetre (<< Window Scaling >>) et les horodatages (<< timestamps >>). Le Window Scaling permet d'utiliser des fenetres TCP larges (> 64 ko) pour gerer les liaisons avec une latence ou une bande passante elevees. Pour les utiliser, les tailles des tampons d'emission et de reception doivent etre augmentees. Elles peuvent etre definies 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 systeme setsockopt(2). Les tailles maximales pour les tampons de socket declares a l'aide de SO_SNDBUF et SO_RCVBUF sont limitees 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 demandee avec l'appel setsockopt(2), et qu'un appel getsockopt(2) reussi ne renverra pas la meme taille de tampon que celle reclamee dans l'appel setsockopt(2). TCP utilise l'espace supplementaire a des fins administratives et pour des structures internes du noyau, et les valeurs des fichiers de /proc renvoient des tailles superieures a celles des veritables fenetres TCP. Pour les connexions individuelles, la taille du tampon de socket doit etre definie avant les appels listen(2) ou connect(2) pour qu'elle soit prise en compte. Consultez socket(7) pour plus de details. TCP permet d'indiquer des donnees urgentes. Elles signalent au recepteur qu'un message important est dans le flux de donnees et qu'il doit etre traite le plus tot possible. Pour envoyer des donnees urgentes, indiquez l'option MSG_OOB a send(2). Quand des donnees urgentes sont recues, le noyau envoie un signal SIGURG au processus ou au groupe de processus qui a ete indique comme proprietaire du socket avec les ioctls SIOCSPGRP ou FIOSETOWN (ou l'operation F_SETOWN de fcntl(2), specifiee par POSIX.1-2001). Quand l'option de socket SO_OOBINLINE est activee, les donnees urgentes sont mises dans le flux de donnees normal (et un programme peut detecter leur emplacement avec l'ioctl SIOCATMARK decrit ci-dessous), sinon, elles ne peuvent etre recues que lorsque l'attribut MSG_OOB est positionne pour recv(2) ou recvmsg(2). Quand des donnees hors bande sont presentes, select(2) indique le descripteur de fichier comme ayant une condition exceptionnelle et poll(2) indique un evenement POLLPRI. Linux 2.4 a introduit un certain nombre de changements pour ameliorer le debit et l'extensibilite, ainsi que des fonctionnalites ameliorees. 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 definis par ip(7) s'appliquent pour TCP. TCP ne gere que les communications point-a-point. Les diffusion et multidiffusion (broadcast et multicast) ne sont pas gerees. /proc interfaces Les parametres TCP du systeme sont accessibles dans les fichiers du repertoire /proc/sys/net/ipv4/. De plus, la plupart des interfaces /proc d'IP s'appliquent a TCP. Consultez ip(7). Les variables indiquees comme booleennes prennent une valeur entiere, une valeur non nulle indiquant que l'option est active, une valeur nulle indiquant que l'option est inactive. tcp_abc (entier ; 0 par defaut ; Linux 2.6.15 a 3.8) Controler l'ABC (<< Appropriate Byte Count >> : decompte d'octets approprie), defini dans la RFC 3465. ABC est une facon d'augmenter la fenetre de congestion (cwnd : congestion window) plus lentement en reponse a 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 a deux segments, pour compenser les acquittements retardes. tcp_abort_on_overflow (booleen ; desactive par defaut ; depuis Linux 2.4) Valider la reinitialisation des connexions si le service en ecoute est trop lent et incapable de les traiter et de les accepter. Cela signifie que si un debordement se produit a cause d'une surcharge temporaire, la connexion sera retablie. N'activez cette option que si vous etes sur que le demon en ecoute ne peut pas etre configure pour accepter les connexions plus vite. Cette option peut desorienter les clients de votre serveur. tcp_adv_win_scale (entier ; 2 par defaut ; depuis Linux 2.4) Calculer le surplus du tampon comme bytes/2^tcp_adv_win_scale, si tcp_adv_win_scale est superieur a 0 ; ou bytes-bytes/2^(-tcp_adv_win_scale), si tcp_adv_win_scale est inferieur ou egal a zero. L'espace du tampon de reception du socket est partage entre l'application et le noyau. TCP conserve une portion du tampon en tant que fenetre TCP, c'est la taille de la fenetre de reception indiquee au correspondant. Le reste de cet espace est utilise comme tampon << d'application >>, pour isoler le reseau des latences de l'ordonnanceur et de l'application. La valeur par defaut (2) de tcp_adv_win_scale indique que l'espace utilise pour le tampon d'application est un quart de l'espace total. tcp_allowed_congestion_control (chaine ; voir le texte pour la valeur par defaut ; depuis Linux 2.4.20) Afficher ou definir les choix d'algorithmes de controle de congestion disponibles pour les processus non privilegies (consultez la description de l'option TCP_CONGESTION pour les sockets). Les elements de la liste sont separes par des espaces et termines par un caractere de changement de ligne. La liste est un sous-ensemble des algorithmes de la liste tcp_available_congestion_control. La valeur par defaut est << reno >> plus la definition par defaut de tcp_congestion_control. tcp_autocorking (booleen ; active par defaut ; depuis Linux 3.14) Si cette option est active, le noyau essaie de fusionner les petites ecritures (issues d'appels consecutifs a write(2) et sendmsg(2)) autant que possible, afin de diminuer le nombre total de paquets envoyes. La fusion est effectuee si au moins un paquet avant le flux est en attente dans les files d'attente Qdisc ou d'emission du peripherique. Les applications peuvent utiliser l'option de socket TCP_CORK afin de controler comment et quand liberer leurs sockets. tcp_available_congestion_control (chaine ; lecture seule ; depuis Linux 2.4.20) Afficher une liste des algorithmes de controle de congestion qui sont enregistres. Les elements de la liste sont separes par des espaces et termines par un caractere de changement de ligne. Cette liste limite l'ensemble des algorithmes permis pour la liste dans tcp_allowed_congestion_control. Plus d'algorithmes de controle de congestion peuvent etre disponibles sous forme de modules, mais non charges. tcp_app_win (entier ; 31 par defaut ; depuis Linux 2.4) Cette variable definit combien d'octets de la fenetre TCP sont reserves pour le surplus de tampon. Un maximum de (window/2^tcp_app_win, mss - maximum segment size) octets de la fenetre sont reserves pour le tampon d'application. Une valeur nulle indique qu'aucune portion n'est reservee. tcp_base_mss (entier ; 512 par defaut ; depuis Linux 2.6.17) La valeur initiale de search_low a utiliser pour la decouverte du MTU (maximum transmission unit) du chemin dans la couche de transport (interrogation du MTU). Si la decouverte du MTU est activee, il s'agit du MSS (maximum segment size) de depart utilise par la connexion. tcp_bic (booleen ; desactive par defaut ; Linux 2.4.27/2.6.6 a Linux 2.6.13) Activer l'algorithme de controle de congestion TCP BIC (Binary Increase Congestion control). BIC TCP est une modification uniquement cote emetteur qui assure une linearite du RTT (Delai d'aller-retour, << Round-Trip Time >>) avec de grandes fenetres, tout en permettant un passage a l'echelle et en se bornant a la compatibilite TCP. Le protocole combine deux schemas appeles augmentation additive et augmentation de recherche dichotomique. Lorsque la fenetre de congestion est grande, l'augmentation additive avec un grand increment assure une bonne linearite du RTT et un bon passage a l'echelle. Avec des petites fenetres de congestion, l'augmentation de recherche dichotomique augmente la compatibilite TCP. tcp_bic_low_window (entier ; 14 par defaut ; Linux 2.4.27/2.6.6 a Linux 2.6.13) Corriger la fenetre limite (en paquets) pour laquelle BIC TCP commence a ajuster la fenetre de congestion. Sous cette limite, BIC TCP se comporte comme l'algorithme TCP Reno par defaut. tcp_bic_fast_convergence (booleen ; active par defaut ; Linux 2.4.27/2.6.6 a Linux 2.6.13) Forcer BIC TCP a repondre plus vite aux changements de fenetre de congestion. Permet a deux flux partageant la meme connexion de converger plus vite. tcp_congestion_control (chaine ; voir le texte pour la valeur par defaut ; depuis Linux 2.4.13) Definir l'algorithme de controle de congestion a utiliser par defaut pour les nouvelles connexions. L'algorithme << reno >> est toujours disponible, mais des choix supplementaires sont disponibles en fonction de la configuration du noyau. La valeur par defaut pour ce fichier est definie dans la configuration du noyau. tcp_dma_copybreak (entier ; 4096 par defaut ; depuis Linux 2.6.24) La limite inferieure, en octets, de la taille des lectures de socket qui seront transferees sur le moteur de copie DMA (acces direct a la memoire), s'il y en a un sur le systeme et si le noyau a ete configure avec l'option CONFIG_NET_DMA. tcp_dsack (booleen ; active par defaut ; depuis Linux 2.4) Activer la prise en charge de TCP Duplicate SACK de la RFC 2883. tcp_fastopen (masque de bits ; defaut : 0x1 ; depuis Linux 3.7) Activer la prise en charge de l'acceleration de connexion (Fast Open) de la RFC 7413. Ce drapeau est utilise comme un tableau de bits avec les valeurs suivantes : 0x1 Activer Fast Open du cote client 0x2 Activer Fast Open du cote serveur 0x4 Autoriser le cote client a transmettre des donnees dans SYN sans option Fast Open 0x200 Autoriser le cote serveur a accepter des donnees de SYN sans option Fast Open 0x400 Autoriser Fast Open pour tous les ecouteurs sans option de socket TCP_FASTOPEN tcp_fastopen_key (depuis Linux 3.7) Definir la cle Fast Open RFC 7413 cote serveur pour generer le cookie de Fast Open quand la prise en charge de Fast Open cote serveur est activee. tcp_ecn (entier ; valeur par defaut : 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 Desactiver l'ECN. Ne jamais initier ni accepter l'ECN. Valeur par defaut jusqu'a Linux 2.6.30 inclus. 1 Activer l'ECN si demandee par les connexions entrantes et aussi requerir l'ECN sur les essais de connexion sortante. 2 Activer l'ECN si demandee par les connexions entrantes, mais ne pas requerir l'ECN sur les connexions sortantes. Cette valeur est prise en charge et est la valeur par defaut depuis Linux 2.6.31. Lorsqu'active, la connectivite vers certaines destinations peut etre affectee a cause d'equipements intermediaires anciens au comportement defectueux le long du chemin, faisant que des connexions sont rejetees. Cependant, pour faciliter et encourager le deploiement de l'option 1 et contourner de tels equipements bogues, l'option tcp_ecn_fallback a ete introduite. tcp_ecn_fallfack (booleen ; active par defaut ; depuis Linux 4.1) Activer la solution de secours de la RFC 3168, Section 6.1.1.1. Lorsqu'activee, les SYN de la configuration ECN arrivant a echeance dans le delai normal de retransmission de SYN seront renvoyes avec CWR (Congestion Window Reduced) et ECE (ECN-Echo) effaces. tcp_fack (booleen ; active par defaut ; depuis Linux 2.4) Activer la prise en charge de TCP Forward Acknowledgement. tcp_fin_timeout (entier ; 60 par defaut ; depuis Linux 2.2) Nombre de secondes a attendre un paquet final FIN avant que le socket soit ferme de force. Strictement parlant, c'est une violation des specifications TCP, mais necessaire pour empecher les attaques par deni de service. La valeur par defaut dans les noyaux 2.2 etait 180. tcp_frto (entier ; 0 par defaut ; depuis Linux 2.4.21/2.6) Activer F-RTO (forward RTO-recovery), un algorithme ameliore de recuperation pour les temporisations de retransmission TCP (RTO : << retransmission timeouts >>). Cette option est particulierement interessante dans les environnements sans fil, ou la perte des paquets est en general due a des interferences radio aleatoires plutot qu'a la congestion des routeurs intermediaires. Consultez la RFC 4138 pour plus de details. Ce fichier peut prendre une des valeurs suivantes : 0 Desactive. C'etait la valeur par defaut jusqu'a Linux 2.6.23 inclus. 1 La version de base de l'algorithme F-RTO est activee. 2 Activer la version F-RTO amelioree de SACK si le flux utilise des SACK. La version de base peut aussi etre utilisee quand des SACK sont utilises, meme si dans ce cas des scenarios existent dans lesquels F-RTO interagit mal avec le comptage de paquets du flux TCP utilisant des SACK. C'est la valeur par defaut depuis Linux 2.6.24. Avant Linux 2.6.22, ce parametre etait une valeur booleenne, qui ne prenait en charge que les valeurs 0 et 1 ci-dessus. tcp_frto_response (entier ; 0 par defaut ; depuis Linux 2.6.22) Quand F-RTO a detecte une fausse expiration d'une temporisation TCP (c'est-a-dire qu'elle aurait pu etre evitee si TCP avait eu un delai de retransmission plus long), TCP a plusieurs options sur ce qu'il faut faire par la suite. Les valeurs possibles sont : 0 Diminution de moitie du debit ; une reponse prudente et sans problemes qui resulte en une diminution de moitie de la fenetre de congestion (cwnd) et du seuil de demarrage lent (ssthresh, << slow-start threshold >>) apres un seul RTT (Round-trip time - temps d'aller-retour). 1 Reponse tres prudente ; deconseillee parce que bien que correcte, elle interagit mal avec le reste de TCP sous Linux ; elle reduit immediatement de moitie de cwnd et de ssthresh. 2 Reponse risquee ; supprime les mesures de controle de congestion qui ne sont pas jugees necessaires (en ignorant la possibilite d'une perte de retransmission qui devrait inciter TCP a etre plus prudent) ; cwnd et ssthresh sont redefinis aux valeurs anterieures a l'expiration du delai. tcp_keepalive_intvl (entier ; 75 par defaut ; depuis Linux 2.4) L'intervalle en secondes entre deux messages TCP keep-alive. tcp_keepalive_probes (entier ; 9 par defaut ; depuis Linux 2.2) Nombre maximal de sondages KA (keep-alive) de TCP a envoyer avant d'abandonner et de tuer la connexion si aucune reponse n'est obtenue de l'autre partie. tcp_keepalive_time (entier ; 7200 par defaut ; depuis Linux 2.2) Nombre de secondes durant lesquelles une connexion est sans activite avant que TCP envoie des sondages keep-alive. Ceux-ci ne sont envoyes que si l'option SO_KEEPALIVE de socket est activee. La valeur par defaut est 7200 secondes (2 heures). Une connexion inactive est coupee environ 11 minutes plus tard (9 sondages avec 75 secondes d'ecart). Notez que les delais des mecanismes de connexion sous-jacents ou de l'application peuvent etre bien plus courts. tcp_low_latency (booleen ; desactive par defaut ; depuis Linux 2.4.21/2.6 ; obsolete depuis Linux 4.14) S'il est active, la pile TCP prend des decisions qui favorisent une latence plus faible par opposition a un debit plus grand. Si cette option est desactivee, un debit plus grand est prefere. Un cas ou cette valeur par defaut devrait etre changee est par exemple une grille de calcul Beowulf. Depuis Linux 4.14, la valeur de ce fichier est ignoree, meme s'il existe toujours. tcp_max_orphans (entier ; valeur par defaut : voir ci-dessous ; depuis Linux 2.4) Le nombre maximal de sockets TCP orphelins (attaches a aucun gestionnaire de fichier utilisateur) sur le systeme. Quand ce nombre est depasse, la connexion orpheline est reinitialisee et un message d'avertissement est affiche. Cette limite n'existe que pour eviter les attaques simples par deni de service. Sa diminution n'est pas recommandee. Certaines conditions de reseau peuvent necessiter l'augmentation de cette limite, mais notez que chaque socket orphelin peut consommer jusqu'a ~64 ko de memoire ne pouvant pas etre places en espace d'echange. La valeur par defaut est egale au parametre NR_FILE du noyau. Elle est ajustee en fonction de la memoire disponible sur le systeme. tcp_max_syn_backlog (entier ; valeur par defaut : voir ci-dessous ; depuis Linux 2.2) Le nombre maximal de requetes de connexions en attente qui n'ont pas encore recu d'acquittement de la part du client se connectant. Si ce nombre est depasse, le noyau commencera a rejeter des requetes. La valeur par defaut, 256, est augmentee jusqu'a 1024 si la memoire presente est suffisante (>= 128 Mo) et peut etre diminuee a 128 sur les systemes avec tres peu de memoire (<= 32 Mo). Avant Linux 2.6.20, et s'il fallait augmenter cette valeur au dessus de 1024, il etait recommande 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 etre recompile. Dans Linux 2.6.20, la taille fixe TCP_SYNQ_HSIZE a ete supprimee en faveur d'une taille dynamique. tcp_max_tw_buckets (entier ; valeur par defaut : voir ci-dessous ; depuis Linux 2.4) Le nombre maximal de sockets dans l'etat TIME_WAIT autorises sur le systeme. Cette limite n'existe que pour eviter les attaques simples par deni de service. La valeur par defaut de NR_FILE*2 est ajustee en fonction de la memoire disponible. Si ce nombre est atteint, le socket est ferme et un avertissement est affiche. tcp_moderate_rcvbuf (booleen ; active par defaut ; Linux 2.4.17/2.6.7) Si active, TCP effectue un ajustage automatique du tampon de reception, en essayant de trouver la bonne taille automatiquement (pas plus grand que tcp_rmem[2]) pour correspondre a la taille necessaire pour un debit maximal sur le chemin. tcp_mem (depuis Linux 2.4) Il s'agit d'un vecteur de trois entiers : [low, pressure, high]. Ces limites, mesurees dans une unite qui correspond a la taille des pages systeme, sont utilisees par TCP pour surveiller sa consommation memoire. Les valeurs par defaut sont calculees au moment du demarrage a partir de la memoire disponible (TCP ne peut utiliser pour cela que la memoire basse qui est limitee a environ 900 Mo sur les systemes 32 bits. Les systemes 64 bits ne souffrent pas de cette limitation). low TCP ne cherche pas a reguler ses allocations memoire quand le nombre de pages qu'il a allouees est en dessous de ce nombre pressure Lorsque la taille memoire allouee par TCP depasse ce nombre de pages, TCP modere sa consommation memoire. L'etat de memoire chargee (pressure) se termine lorsque le nombre de pages allouees descend en dessous de la marque low. high Le nombre global maximal de pages que TCP allouera. Cette valeur surcharge tout autre limite imposee par le noyau. tcp_mtu_probing (entier ; 0 par defaut ; Linux 2.6.17) Ce parametre controle la decouverte du MTU du chemin de la couche transport (<< TCP Packetization-Layer Path MTU Discovery >>). Le fichier peut prendre les valeurs suivantes : 0 Desactive 1 Desactive par defaut, active quand un trou noir ICMP est detecte 2 Toujours active, utilise le MSS de depart de tcp_base_mss. tcp_no_metrics_save (booleen ; desactive par defaut ; depuis Linux 2.6.6) Par defaut, TCP sauvegarde differentes metriques 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 definir les conditions initiales. En general, cela augmente globalement les performances, mais peut aussi parfois les degrader. Si tcp_no_metrics_save est active, TCP ne sauvera pas de metriques dans le cache lors de la fermeture des connexions. tcp_orphan_retries (entier ; 8 par defaut ; depuis Linux 2.4) Le nombre maximal de tentatives pour sonder l'autre extremite d'une connexion qui a ete fermee par notre cote. tcp_reordering (entier ; 3 par defaut ; depuis Linux 2.4) Le nombre maximal de rearrangements d'un paquet dans un flux de paquets TCP sans que TCP assume la perte du paquet et passe dans un demarrage lent. Il n'est pas conseille de modifier cette valeur. C'est une metrique sur la detection de rearrangement de paquet concue pour minimiser la diminution de debit et les retransmissions inutiles provoquees par le rearrangement de paquet dans une connexion. tcp_retrans_collapse (booleen ; active par defaut ; depuis Linux 2.2) Essayer d'envoyer des paquets de taille standard durant la retransmission. tcp_retries1 (entier ; 3 par defaut ; depuis Linux 2.2) Le nombre de fois que TCP essayera de retransmettre un paquet sur une connexion etablie normalement, sans demander de contribution supplementaire de la couche reseau concernee. Une fois ce nombre atteint, la couche reseau doit remettre a jour son routage, si possible avant chaque nouvelle transmission. La valeur par defaut, 3, est le minimum indique dans la RFC. tcp_retries2 (entier ; 15 par defaut ; depuis Linux 2.2) Le nombre maximal de fois qu'un paquet TCP est retransmis sur une connexion etablie avant d'abandonner. La valeur par defaut est 15, ce qui correspond a une duree entre 13 et 30 minutes suivant le delai maximal de retransmission. La limite minimale de 100 secondes specifiee par la RFC 1122 est en general consideree comme trop courte. tcp_rfc1337 (booleen ; desactive par defaut ; depuis Linux 2.2) Activer le comportement TCP conformement a la RFC 1337. Si desactive, et si un RST est recu en etat TIME_WAIT, le socket est immediatement ferme sans attendre la fin de la periode TIME_WAIT. tcp_rmem (depuis Linux 2.4) Il s'agit d'un vecteur de trois entiers : [min, default, max]. Ces parametres sont utilises par TCP pour reguler les tailles du tampon de reception. TCP ajuste dynamiquement la taille a partir de la valeur par defaut, dans l'intervalle de ces valeurs, en fonction de la memoire disponible sur le systeme. min taille minimale du tampon de reception utilisee par chaque socket TCP. La valeur par defaut est la taille des pages du systeme (sous Linux 2.4, la valeur par defaut est de 4 Ko et descend a PAGE_SIZE octets sur les systemes avec peu de memoire). Cette valeur assure qu'en mode de memoire pressure, les allocations en dessous de cette taille reussiront. Elle n'est pas utilisee pour limiter la taille du tampon de reception declaree en utilisant l'option SO_RCVBUF sur le socket. default la taille par defaut du tampon de reception pour un socket TCP. Cette valeur ecrase la taille par defaut initiale de la valeur globale net.core.rmem_default definie pour tous les protocoles. La valeur par defaut est 87 380 octets (sous Linux 2.4, elle descend a 43 689 sur les systemes avec peu de memoire). Si une taille plus grande est souhaitee, il faut augmenter cette valeur (pour affecter tous les sockets). Pour utiliser une grande fenetre TCP, l'option net.ipv4.tcp_window_scaling doit etre activee (elle l'est par defaut). max la taille maximale du tampon de reception utilise 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 reception declaree avec l'option SO_RCVBUF sur le socket. La valeur par defaut est calculee par la formule : max(87380, min(4 MB, tcp_mem[1]*PAGE_SIZE/128)) Sous Linux 2.4, la valeur par defaut est de 87380*2 octets et reduite a 87 380 sur les systemes avec peu de memoire. tcp_sack (booleen ; active par defaut ; depuis Linux 2.2) Activer l'acquittement TCP selectif (RFC 2018). tcp_slow_start_after_idle (booleen ; active par defaut ; depuis Linux 2.6.18) Si active, adopte le comportement de la RFC 2861 et l'expiration de la fenetre de congestion apres une periode d'inactivite. Une periode d'inactivite est definie comme le RTO (<< retransmission timeout >> : delai de retransmission). Si desactive, la fenetre de congestion n'expirera pas apres une periode d'inactivite. tcp_stdurg (booleen ; desactive par defaut ; depuis Linux 2.2) Si cette option est activee, alors utilisation de l'interpretation RFC 1122 du champ TCP de pointeur de donnees urgentes. Selon cette interpretation, le pointeur d'urgence pointe vers le dernier octet des donnees urgentes. Si cette option est desactivee, alors utilisation de l'interpretation compatible avec BSD de ce pointeur : pointage vers le premier octet apres les donnees urgentes. Activer cette option peut poser des problemes d'interoperabilite. tcp_syn_retries (entier ; 6 par defaut ; depuis Linux 2.2) Le nombre maximal de fois ou une demande SYN initiale sera retransmise pour une tentative de connexion TCP active. Cette valeur ne doit pas depasser 255. La valeur par defaut est 6, ce qui correspond approximativement a des essais pendant 127 secondes. Avant Linux 3.7, la valeur par defaut etait 5, ce qui (en conjonction avec des calculs bases sur d'autres parametres du noyau) correspondait approximativement a 180 secondes. tcp_synack_retries (entier ; 5 par defaut ; depuis Linux 2.2) Le nombre maximal de retransmissions d'un segment SYN/ACK pour une connexion TCP passive. Ce nombre ne doit pas depasser 255. tcp_syncookies (entier ; 1 par defaut ; depuis Linux 2.2) Activer les syncookies TCP (SYN cookies). Le noyau doit etre compile avec l'option CONFIG_SYN_COOKIES. La fonctionnalite des syncookies essaie de proteger un socket d'une attaque par inondation de SYN. Elle n'est a 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 problemes aux clients ou aux relais. Ce mecanisme n'est pas recommande comme moyen de reglage sur un serveur tres charge pour faire face a des conditions de surcharge ou de mauvaise configuration. Pour des alternatives recommandees, consultez tcp_max_syn_backlog, tcp_synack_retries, tcp_abort_on_overflow. A regler a une des valeurs suivantes : 0 Desactivation des syncookies TCP. 1 Envoi de syncookies quand la file d'accumulation de SYN d'un socket deborde. 2 (depuis Linux 3.12) Envoi de syncookies sans conditions. Cela peut etre utile pour tester un reseau. tcp_timestamps (entier ; par defaut 1 ; depuis Linux 2.2) A regler a une des valeurs suivantes pour activer ou desactiver les horodatages TCP de la RFC 1323 : 0 Desactiver les horodatages. 1 Activer les horodatages comme definis dans la RFC 1323 et utiliser une heure de debut aleatoire pour chaque connexion plutot que d'utiliser l'heure actuelle. 2 Comme pour la valeur 1, mais sans decalages aleatoires. Regler tcp_timestamps a cette valeur est significatif depuis Linux 4.10. tcp_tso_win_divisor (entier ; 3 par defaut ; depuis Linux 2.6.9) Ce parametre controle le pourcentage de la fenetre de congestion qui peut etre utilise par une unique trame TSO (TCP Segmentation Offload). La valeur de ce parametre est un compromis entre une transmission par rafales et construire des trames avec un TSO plus importantes. tcp_tw_recycle (booleen ; desactive par defaut ; de Linux 2.4 a Linux 4.11) Activer le recyclage rapide des sockets TIME_WAIT. Activer cette option n'est pas recommande car l'IP distante peut ne pas incrementer de maniere monotone les horodatages (peripheriques derriere un NAT, peripheriques avec decalages d'horodatage par connexion). Consulter les RFC 1323 (PAWS) et RFC 6191. tcp_tw_reuse (booleen ; desactive par defaut ; depuis Linux 2.4.19/2.6) Permettre de reutiliser les sockets TIME_WAIT pour les nouvelles connexions quand c'est sur du point de vue du protocole. Cela ne devrait pas etre modifie sans l'avis ou la demande d'experts techniques. tcp_vegas_cong_avoid (booleen ; desactive par defaut ; Linux 2.2 a Linux 2.6.13) Activer l'algorithme TCP Vegas d'evitement de congestion. TCP Vegas est une modification cote emetteur de TCP qui anticipe la survenue de congestion en estimant la bande passante. TCP Vegas ajuste la vitesse d'emission en modifiant la fenetre de congestion. TCP Vegas devrait diminuer la perte de paquets, mais n'est pas aussi agressif que TCP Reno. tcp_westwood (booleen ; desactive par defaut ; Linux 2.4.26/2.6.3 a Linux 2.6.13) Activer l'algorithme TCP Westwood+ de controle de congestion. TCP Westwood+ est une modification cote emetteur de la pile de protocole TCP Reno qui optimise la performance du controle de congestion TCP. Il est base sur une estimation de bande passante de bout en bout pour definir la fenetre de congestion et le seuil de redemarrage lent apres un episode de congestion. Grace a cette estimation, TCP Westwood+ definit de facon adaptative un seuil de demarrage lent et une fenetre de congestion qui prennent en compte la bande passante utilisee au moment ou la congestion se produit. TCP Westwood+ augmente de facon significative l'equite par rapport a TCP Reno dans les reseaux filaires, et le debit sur des liens sans fil. tcp_window_scaling (booleen ; active par defaut ; depuis Linux 2.2) Activer le dimensionnement de la fenetre TCP (RFC 1323). Cette fonctionnalite permet d'utiliser une grande fenetre (> 64 Ko) sur une connexion TCP si le correspondant la prend en charge. Normalement, les 16 bits du champ de largeur de fenetre dans l'en-tete TCP limitent la taille a moins de 64 Ko. Si des fenetres plus grandes sont souhaitees, l'application peut augmenter la taille de leurs tampons de socket et l'option tcp_window_scaling sera utilisee. Si tcp_window_scaling est desactivee, TCP ne negociera pas l'utilisation du dimensionnement des fenetres 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 parametres servent a TCP pour reguler la taille du tampon d'emission. La taille est ajustee dynamiquement a partir de la valeur par defaut, dans l'intervalle de ces valeurs, en fonction de la memoire disponible. min La taille minimale du tampon d'emission utilise par chaque socket TCP. La valeur par defaut est la taille des pages du systeme (sous Linux 2.4, la valeur par defaut est de 4 Ko). Cette valeur assure qu'en mode de memoire << pressure >>, les allocations en dessous de cette taille reussiront. Elle n'est pas utilisee pour limiter la taille du tampon d'emission declaree en utilisant l'option SO_SNDBUF sur un socket. default La taille par defaut du tampon d'emission pour un socket TCP. Cette valeur surcharge la taille par defaut de valeur globale /proc/sys/net/core/wmem_default definie pour tous les protocoles. La valeur par defaut est 16 Ko. Si une taille plus grande est desiree, il faut augmenter cette valeur (pour affecter tous les sockets). Pour utiliser une grande fenetre TCP, /proc/sys/net/ipv4/tcp_window_scaling doit etre positionne a une valeur non nulle (par defaut). max La taille maximale du tampon d'emission utilisee 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'emission declaree avec l'option SO_SNDBUF sur un socket. La valeur par defaut est calculee avec la formule : max(65536, min(4 MB, tcp_mem[1]*PAGE_SIZE/128)) Sous Linux 2.4, la valeur par defaut est de 128 Ko, reduite a 64 Ko sur les systemes avec peu de memoire. tcp_workaround_signed_windows (booleen ; desactive par defaut ; depuis Linux 2.6.26) S'il est active, supposer que l'absence de reception d'une option de dimensionnement de la fenetre signifie que la pile TCP distante n'est pas correcte et traite la fenetre comme une quantite signee. S'il est desactive, supposer que les piles TCP distantes ne sont jamais dysfonctionnelles meme si aucune option de dimensionnement de la fenetre n'est recue de leur part. Options de socket Pour lire ou ecrire une option de socket TCP, appeler getsockopt(2) pour la lecture ou setsockopt(2) pour l'ecriture, 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 details, voir ip(7). Voici une liste d'options de socket specifiques a TCP. Pour des details 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 chaine. Cette option permet a l'appelant de definir l'algorithme de controle de congestion TCP a utiliser pour chaque socket. Les processus non privilegies sont contraints d'utiliser un des algorithmes de tcp_allowed_congestion_control (decrit ci-dessus). Les processus privilegies (CAP_NET_ADMIN) peuvent choisir n'importe quel algorithme de controle 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 envoyees lorsque cette option est effacee a nouveau. Cela permet de preparer les en-tetes avant d'appeler sendfile(2), ou pour optimiser le debit. Avec l'implementation actuelle, il y a une limite de 200 millisecondes au temps pendant lequel des donnees sont agregees avec TCP_CORK. Si cette limite est atteinte, les donnees mises en attente sont automatiquement transmises. Cette option ne peut etre combinee avec TCP_NODELAY que depuis Linux 2.5.71. Cette option ne doit pas etre utilisee dans du code concu pour etre portable. TCP_DEFER_ACCEPT (depuis Linux 2.4) Permettre a un processus en ecoute de n'etre reveille que si des donnees arrivent sur le socket. Cette option prend une valeur entiere (en secondes), correspondant au nombre maximal de tentatives que TCP fera pour terminer la connexion. Cette option ne doit pas etre utilisee dans du code concu pour etre portable. TCP_INFO (depuis Linux 2.4) Cette option est utilisee pour collecter des informations sur un socket. Le noyau renvoie une structure struct tcp_info comme definie dans le fichier /usr/include/linux/tcp.h. Cette option ne doit pas etre utilisee dans du code concu pour etre portable. TCP_KEEPCNT (depuis Linux 2.4) Le nombre maximal de messages keepalive envoyes par TCP avant d'abandonner une connexion. Cette option ne doit pas etre utilisee dans du code concu pour etre portable. TCP_KEEPIDLE (depuis Linux 2.4) La duree (en secondes) d'inactivite sur une connexion avant que TCP commence a envoyer les messages keepalive, si l'option SO_KEEPALIVE a ete activee sur le socket. Cette option ne doit pas etre employee dans du code concu pour etre portable. TCP_KEEPINTVL (depuis Linux 2.4) Delai (en seconde) entre deux messages keepalive. Cette option ne doit pas etre utilisee dans du code concu pour etre portable. TCP_LINGER2 (depuis Linux 2.4) La duree des sockets orphelins dans l'etat FIN_WAIT2. Cette option peut servir a surcharger la valeur du parametre systeme du fichier /proc/sys/net/ipv4/tcp_fin_timeout specialement pour le socket. A ne pas confondre avec l'option SO_LINGER du niveau socket(7). Cette option ne doit pas etre utilisee dans du code concu pour etre portable. TCP_MAXSEG La taille maximale de segment pour les paquets TCP sortants. Dans Linux 2.2 et les versions precedentes, ainsi que dans Linux 2.6.28 et les versions suivantes, si cette option est definie avant d'etablir la connexion, elle modifie egalement la valeur MSS annoncee a l'autre extremite, dans le paquet initial. Les valeurs superieures au MTU de l'interface sont ignorees et n'ont pas d'effet. TCP imposera ses limites minimales et maximales plutot que les valeurs fournies. TCP_NODELAY Desactiver l'algorithme Nagle. Cela signifie que les segments seront envoyes des que possible, meme s'il n'y a que tres peu de donnees. Sinon, les donnees sont conservees jusqu'a ce qu'il y en ait un nombre suffisant, pour eviter d'envoyer de frequents petits paquets, au detriment du reseau. Cette option est moins prioritaire que TCP_CORK. Cependant, activer cette option force un vidage des donnees actuellement en attente, meme si TCP_CORK est actif. TCP_QUICKACK (depuis Linux 2.4.4) Valider le mode quickack, ou l'inhiber si l'option est retiree. En mode quickack, les acquittements sont envoyes immediatement plutot que retardes 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 operations ulterieures du protocole TCP feront a nouveau entrer/quitter le mode quickack en fonction des traitements internes du protocole et de facteurs tels que les delais d'acquittements retardes, ou les transferts de donnees. Cette option ne doit pas etre utilisee dans du code concu pour etre 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 depasser 255. Cette option ne doit pas etre utilisee dans du code concu pour etre 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 duree maximale en milliseconde pendant laquelle les donnees transmises peuvent rester sans acquittement ou que les donnees en tampon demeurent non transmises (a cause d'une taille de fenetre egale a zero) avant que TCP ne force la fermeture de connexion correspondante et renvoie ETIMEDOUT a l'application. Si la valeur d'option indiquee est 0, TCP utilisera la valeur par defaut du systeme. Augmenter les delais par utilisateur permet a une connexion TCP de survivre pendant une periode plus importante sans connectivite directe. Diminuer les delais par utilisateur permet aux applications d'<< echouer rapidement >> si necessaire. Sinon, les echecs peuvent prendre jusqu'a 20 minutes avec les valeurs par defaut actuelles du systeme dans un environnement WAN normal. Cette option peut etre definie pendant n'importe quel etat d'une connexion TCP, mais n'est effective que pendant les etats synchronises d'une connexion (ESTABLISHED, FIN-WAIT-1, FIN-WAIT-2, CLOSE-WAIT, CLOSING et LAST-ACK). De plus, lorsqu'elle est utilisee avec l'option TCP keepalive (SO_KEEPALIVE), TCP_USER_TIMEOUT ecrasera keepalive pour determiner quand fermer une connexion a cause d'une erreur keepalive. L'option est sans effet lorsque TCP retransmet un paquet ou quand un message keepalive est envoye. Cette option, comme bien d'autres, sera heritee par le socket renvoye par accept(2) s'il etait defini sur le socket d'ecoute. De plus amples precisions sur la fonctionnalite de delai 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 fenetre annoncee a cette valeur. Le noyau impose une taille minimale de SOCK_MIN_RCVBUF/2. Cette option ne doit pas etre employee dans du code concu pour etre portable. TCP_FASTOPEN (depuis Linux 3.6) Cette option active Fast Open (RFC 7413) sur le socket d'ecoute. La valeur specifie la taille maximale des SYN en attente (similaire a l'argument de file d'accumulation dans listen(2)). Une fois activee, le socket d'ecoute avertit le cookie TCP Fast Open des SYN entrants ayant l'option TCP Fast Open. Plus important, il accepte les donnees dans SYN avec un cookie Fast Open valable et repond par un acquittement SYN-ACK pour les donnees et la sequence SYN. accept(2) renvoie un socket pouvant etre lu et ecrit quand l'etablissement de la connexion (handshake) n'est pas encore termine. L'echange de donnees peut ainsi debuter avant la fin de cet etablissement. Cette option requiert l'activation de la prise en charge cote serveur de sysctl net.ip4.tcp_fastopen (voir au-dessus). Pour la prise en charge de Fast Open cote 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 cote actif (client). Quand cette option est activee, connect(2) se comportera differemment selon qu'un cookie Fast Open est disponible ou non pour la destination. Si un cookie n'est pas disponible (c'est-a-dire pour le premier contact avec la destination), connect(2) se comporte comme d'habitude en envoyant un SYN immediatement, sauf que le SYN inclura un cookie Fast Open vide pour solliciter un cookie. Si un cookie est disponible, connect(2) renvoie 0 immediatement, mais la transmission du SYN est reportee. Un write(2) ou sendmsg(2) subsequent declenchera un SYN avec donnees et cookie dans l'option Fast Open. En d'autres mots, la connexion reelle est reportee jusqu'a ce que des donnees soient fournies. Remarque : bien que cette option soit concue pour plus de commodite, son activation ne changera pas les comportements et certains appels systeme peuvent definir des valeurs errno differentes. Si le cookie est present, write(2) ou sendmsg(2) doivent etre appelees juste apres connect(2) dans le but d'envoyer SYN + donnees pour achever les trois etapes de connexion (three-way-handshake - 3WHS) et etablir la connexion. Si on appelle read(2) juste apres connect(2) sans write(2), le socket bloquant sera bloque a jamais. L'application devrait soit definir 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 meme 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 declencher l'emission de SYN */ read(s)/write(s); /* ... */ close(s); API des sockets TCP fourni une prise en charge limitee des donnees hors-bande, sous la forme de donnees urgentes (un seul octet). Sous Linux cela signifie que si l'autre cote envoie de nouvelles donnees hors-bande, les donnees urgentes plus anciennes sont inserees comme des donnees normales dans le flux (meme quand SO_OOBINLINE n'est pas actif). Cela differe des piles basees sur BSD. Linux utilise par defaut l'interpretation compatible BSD du champ de pointeur de donnees urgentes, ce qui viole la RFC 1122, mais est indispensable pour l'interoperabilite avec les autres piles. On peut modifier ce comportement avec /proc/sys/net/ipv4/tcp_stdurg. Il est possible de jeter un coup d'oeil aux donnees 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 parametre flags de recv(2) (et recvmsg(2)). Cet attribut a pour effet que les octets de donnees recus sont ignores, plutot que transmis au tampon fourni par l'appelant. Depuis Linux 2.4.4, MSG_TRUNC a egalement cet effet lorsqu'il est combine a MSG_OOB pour recevoir les donnees 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 quantite de donnees non lues en attente dans le tampon de reception. Le socket ne doit pas etre dans l'etat LISTEN, sinon l'erreur EINVAL est renvoyee. SIOCINQ est defini dans . Une alternative est d'utiliser le synonyme FIONREAD, defini dans . SIOCATMARK Renvoi de vrai (c'est-a-dire une valeur non nulle) si le flux de donnees entrantes est a la marque de donnees urgentes. Si l'option de socket SO_OOBINLINE est activee et SIOCATMARK renvoie vrai, la prochaine lecture sur le socket renverra les donnees urgentes. Si l'option SO_OOBINLINE n'est pas activee et SIOCATMARK renvoie vrai, la prochaine lecture sur le socket renverra les octets suivant les donnees urgentes (pour reellement lire les donnees 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 donnees urgentes. Si une application est informee de la presence de donnees urgentes avec select(2) (en utilisant l'argument exceptfds) ou par la reception du signal SIGURG, elle peut avancer jusqu'a la marque avec une boucle qui teste de facon repetee SIOCATMARK et fait une lecture (demandant un nombre quelconque d'octets) tant que SIOCATMARK renvoie faux. SIOCOUTQ Renvoi de la quantite de donnees non envoyees en attente dans la file d'attente d'emission de socket. Le socket ne doit pas etre dans l'etat LISTEN, sinon l'erreur EINVAL est renvoyee. SIOCOUTQ est defini dans . Alternativement, on peut utiliser le synonyme TIOCOUTQ, defini dans . Traitement des erreurs Quand une erreur reseau se produit, TCP tente de renvoyer le paquet. S'il ne reussit pas apres un certain temps, soit ETIMEDOUT soit la derniere erreur recue sur la connexion est renvoyee. Certaines applications demandent une notification d'erreur plus rapide. Cela peut etre active avec l'option de socket IP_RECVERR de niveau IPPROTO_IP. Quand cette option est active, toutes les erreurs arrivant sont immediatement passees au programme utilisateur. Employez cette option avec precaution, elle rend TCP moins tolerant aux modifications de routage et autres conditions reseau normales. ERREURS EAFNOTSUPPORT Le type d'adresse du socket passe dans sin_family n'etait pas AF_INET. EPIPE L'autre extremite a ferme inopinement le socket ou une lecture est tentee sur un socket ferme. ETIMEDOUT L'autre cote n'a pas acquitte les donnees retransmises apres un certain delai. Toutes les erreurs definies dans ip(7) ou au niveau generique des sockets peuvent aussi etre renvoyees pour TCP. VERSIONS Les prises en charge de notification explicite de congestion, de sendfile(2) sans copie, du reordonnancement et de certaines extensions SACK (DSACK) ont ete 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 ete introduits dans Linux 2.3. BOGUES Toutes les erreurs ne sont pas documentees. IPv6 n'est pas decrit. 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 specifications TCP. RFC 1122 pour les necessites TCP et une description de l'algorithme Nagle. RFC 1323 pour les options d'horodatage et de dimensionnement de fenetre TCP. RFC 1337 pour une description des risques surnommes << TIME_WAIT assassination hazards >>. RFC 3168 pour une description de la notification explicite de congestion. RFC 2581 pour des algorithmes de controle de congestion TCP. RFC 2018 et RFC 2883 pour SACK et ses extensions. TRADUCTION La traduction francaise de cette page de manuel a ete creee par Christophe Blaess , Stephan Rafin , Thierry Vignaud , Francois Micaux, Alain Portal , Jean-Philippe Guerard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas Francois , Florentin Duneau , Simon Paillard , Denis Barbier , David Prevot et Jean-Paul Guillonneau Cette traduction est une documentation libre ; veuillez vous reporter a la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITE LEGALE. Si vous decouvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message a . Pages du manuel de Linux 6.06 31 octobre 2023 tcp(7)