Provided by:
manpages-fr_3.27fr1.4-1_all 
NOM
tcp - Protocole TCP
SYNOPSIS
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/tcp.h>
tcp_socket = socket(AF_INET, SOCK_STREAM, 0);
DESCRIPTION
Il s'agit d'une implementation du protocole TCP defini dans les
RFC 793, RFC 1122 et RFC 2001 avec les extensions SACK et NewReno. Cela
fournit une connexion full-duplex fiable orientee flux entre deux
sockets au-dessus de ip(7), version 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.
Une socket TCP neuve n'a pas d'adresse locale ou distante et n'est pas
completement definie. Pour creer une connexion TCP sortante, utilisez
connect(2) pour etablir la connexion sur une autre socket TCP. Pour
recevoir les connexions entrantes, attachez d'abord la socket avec
bind(2) a une adresse locale et un port, puis appelez listen(2) pour
mettre la socket dans un etat d'attente. Apres cela, une nouvelle
socket peut etre obtenue pour chaque connexion entrante en utilisant
accept(2). Une socket sur laquelle on a appele accept(2) ou connect(2)
avec succes est completement definie et peut transmettre des donnees.
Les donnees ne peuvent pas circuler sur les socket en attente ou non
connectees.
Linux prend en charge les extensions TCP a hautes performances
RFC 1323. Cela inclut la protection contre les numeros de sequence
bouclant (PAWS), la modification de fenetre (<< Window Scaling >>) et
les horodatages (<< timestamps >>). Le Window Scaling permet d'utiliser
des fenetres TCP larges (> 64K) 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. On peut
les fixer 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 systeme setsockopt(2).
Les tailles maximales pour les tampons declares via 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 le setsockopt(2).
TCP les utilise a des fins administratives et pour des structures
internes du noyau, et les valeurs des fichiers de /proc renvoient des
tailles superieures a celle des veritables fenetres TCP. Pour les
connexions individuelles, la taille du tampon doit etre fixee avant les
appels listen(2) ou connect(2) pour qu'elle soit prise en compte.
Consultez socket(7) pour plus de details.
TCP permet de 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 de 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 de la
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 validee, les donnees urgentes sont mises dans le flux
de donnees normal (et peuvent etre detectees avec l'ioctl SIOCATMARK),
sinon, on ne peut les recevoir que lorsque l'attribut MSG_OOB es
positionne pour recv(2) ou recvmsg(2).
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 d'emission 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 dupliques.
Formats d'adresse
TCP est construit au-dessus de IP (consultez ip(7)). Les formats
d'adresse definis pour ip(7) s'appliquent pour TCP. TCP ne gere que les
communications point-a-point. Le broadcast et le multicast ne sont pas
geres.
Interfaces /proc
Les parametres TCP du systeme sont accessibles avec 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 bool'eennes 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 ; depuis Linux 2.6.15)
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 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 a deux segments, pour compenser les acquittements
avec delais.
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 les
accepter. Cela signifie que si un debordement se produit a cause
d'une surcharge temporaire, la connexion va se rattraper.
N'activez cette option que si vous etes SURS 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 de la 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 (voir
la description de l'option TCP_CONGESTION pour les sockets). La
liste est un sous-ensemble des algorithmes de la liste
tcp_available_congestion_control. La valeur par defaut est
<< reno >> plus le parametre par defaut de
tcp_congestion_control.
tcp_available_congestion_control (chaine ; lecture seule ; depuis
Linux 2.4.20)
Afficher une liste des algorithmes de controle de congestion qui
sont enregistres. Cette liste limite l'ensemble des algorithmes
permis pour la liste tcp_allowed_congestion_control. Plus
d'algorithmes de controle de congestion peuvent etre disponible
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 (fenetre/2^tcp_app_win, mss) octets de la fenetre
est reserve 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 du chemin dans la couche de transport (mise en paquets).
SI la decouverte du MTU est activee, il s'agit du MSS de depart
utilise par la connexion.
tcp_bic (booleen ; desactive par defaut ; Linux 2.4.27/2.6.6 a 2.6.13)
Activer l'algorithme de controle de congestion TCP BIC. BIC-TCP
est une modification 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
effets appeles augmentation additive et recherche binaire.
Lorsque la fenetre de congestion est grande, l'augmentation
additive avec un increment grand assure une linearite du RTT et
un bon passage a l'echelle. Avec des petites fenetres de
congestion, la recherche binaire fournit une compatibilite TCP.
tcp_bic_low_window (entier ; 14 par defaut ; Linux 2.4.27/2.6.6 a
2.6.13)
Fixer 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 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 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 sur
une socket qui seront delestees sur le moteur de copie DMA, 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)
Valide la prise en charge TCP SACK duplique de la RFC 2883.
tcp_ecn (booleen ; desactive par defaut ; depuis Linux 2.4)
Valide la notification explicite de congestion de la RFC 2884.
Lorsqu'elle est en service, la connectivite avec certaines
destinations peut etre affectee a cause de vieux routeurs mal
configures le long du trajet, et les connexions peuvent etre
rompues.
tcp_fack (booleen ; active par defaut ; depuis Linux 2.4)
Valide la prise en charge 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 la
socket soit fermee de force. Strictement parlant, ceci est une
violation des specifications TCP, mais est necessaire pour
empecher les attaques par deni de service. La valeur par defaut
dans les noyaux 2.2 est 180.
tcp_frto (entier ; 0 par defaut ; depuis Linux 2.4.21/2.6)
Activer F-RTO, un algorithme ameliore de recuperation pour les
temporisations de retransmission TCP (RTO : << retransmission
timeouts >>). Il est particulierement interessant dans des
environnements sans fil, ou la perte des paquets est typiquement
due a des interferences radio aleatoire 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.
1 La version de base de l'algorithme F-RTO est activee.
2 Active la version amelioree de F-RTO avec des 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.
Avant Linux 2.6.22, ce parametre etait une valeur booleenne, qui
ne prenait en charge que les valeurs 0 et 1 ci-dessous.
tcp_frto_response (entier ; 0 par defaut ; depuis Linux 2.6.22)
Quand F-RTO a detecte une fausse expiration d'une temporisation
(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 douce et
conservatrice 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 delai
d'aller-retour (RTT).
1 Reponse tres conservatrice ; pas recommandee parce que bien
que correcte, elle interagit mal avec le reste de TCP sous
Linux ; reduction de moitie de cwnd et de ssthresh
immediatement.
2 Reponse agressive ; supprime les mesures de controle de
congestion qui sont connues pour ne pas etre necessaire (en
ignorant la possibilite d'une perte de retransmission qui
forcerait TCP a etre plus prudent) ; cwnd et ssthresh sont
remis 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 tentatives TCP keep-alive 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 aucune donnee n'est
transmise sur la connexion avant d'envoyer un message
keep-alive. Ces messages ne sont envoyes que si l'option
SO_KEEPALIVE de la socket est validee. La valeur par defaut est
7200 secondes (2 heures). Une connexion inactive est coupee
environ 11 minutes plus tard (9 tentatives a 75 secondes
d'ecart).
Notez que les delais de la couche de transport sous-jacente, ou
de l'application peuvent etre bien plus courts.
tcp_low_latency (booleen ; desactive par defaut ; depuis
Linux 2.4.21/2.6)
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 un cluster de calcul Beowulf.
tcp_max_orphans (entier ; valeur par defaut : voir ci-dessous ; depuis
Linux 2.4)
Le nombre maximal de sockets TCP orphelines (attachees a aucun
descripteur 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 par deni de service ; la diminuer n'est pas
recommande. Certaines situations peuvent reclamer d'augmenter
cette limite, mais notez que chaque connexion orpheline peut
consommer jusqu'a 64 ko de memoire non-swappable. 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 atteint, le noyau commencera a
abandonner 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). Il est recommande, 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 defaut : voir ci-dessous ;
depuis Linux 2.4)
Le nombre maximal de sockets dans l'etat TIME_WAIT autorisees
sur le systeme. Cette limite n'existe que pour eviter les
attaques par deni de service. La valeur par defaut est
NR_FILE*2, ajustee en fonction de la memoire disponible. Si ce
nombre est atteint, la socket est fermee et un avertissement est
affiche.
tcp_moderate_rcvbuf (booleen ; active par defaut ; Linux 2.4.17/2.6.7)
S'il est active, TCP effectue un reglage 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 : [bas, charge, haut].
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 que la m'emoire basse pour cela, qui est limitee
aux environs de 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 alloue 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 se termine lorsque le nombre
de pages allouees descend en dessous de la marque bas.
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 sauve differentes metriques sur la connexion
dans la cache des routes quand la connexion est fermee, de telle
sorte que les connexions ouvertes rapidement apres puissent les
utiliser comme conditions initiales. D'habitude, ceci augmente
globalement les performances, mais peut parfois degrader les
performances. Si tcp_no_metrics_save est active, TCP ne sauvera
pas de metrique dans la cache lors de la fermeture des
connexions.
tcp_orphan_retries (entier ; 8 par defaut ; depuis Linux 2.4)
Le nombre maximal de tentatives pour acceder a l'autre extremite
d'une connexion dont notre cote a ete ferme.
tcp_reordering (entier ; 3 par defaut ; depuis Linux 2.4)
Le nombre de reorganisations dans un flux TCP avant de supposer
qu'un paquet est perdu et reprendre au debut. Il n'est pas
conseille de modifier cette valeur. C'est une metrique sur la
detection des reordonnancements de paquets concue pour minimiser
les retransmissions inutiles provoquees par la reorganisation
des paquets dans une connexion.
tcp_retrans_collapse (booleen ; active par defaut ; depuis Linux 2.2)
Essayer d'envoyer des paquets de tailles completes durant les
reemissions.
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, on demande au niveau reseau de 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 de fois qu'un paquet TCP est restransmis 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 typiquement
consideree comme trop courte.
tcp_rfc1337 (booleen ; desactive par defaut ; depuis Linux 2.2)
Activer le comportement TCP conformement a la RFC 1337.
Lorsqu'il n'est pas active, si un RST est recu en etat
TIME_WAIT, on ferme la socket immediatement 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, defaut, max].
Ces parametres sont utilises par TCP pour regler la taille 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 chargee, 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 la socket.
default la taille par defaut du tampon de reception pour une
socket TCP. Cette valeur ecrase la taille par defaut
dans la valeur globale net.core.rmem_default definie
pour tous les protocoles. La valeur par defaut est
87380 octets (sous Linux 2.4, elle descend a 43689 sur
les systemes avec peu de memoire). Si une taille plus
grande est desiree, il faut augmenter cette valeur
(pour affecter toutes les sockets). Pour utiliser une
grande fenetre TCP, l'option
net.ipv4.tcp_window_scaling doit etre activee (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 la socket. La valeur par
defaut est calcule par la formule :
max(87380, min(4MB, tcp_mem[1]*PAGE_SIZE/128))
(Sous Linux 2.4, la valeur par defaut est de
87380*2 octets, et descendre a 87380 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)
S'il est active, le comportement de la RFC 2861 est fournit et
la fenetre de congestion expire apres une periode d'inactivite.
Une periode d'inactivite est definie comme le RTO
(<< retransmission timeout >> : le delai de retransmission).
S'il est desactive, la fenetre de congestion n'expirera pas
apres une periode d'inactivite.
tcp_stdurg (booleen ; desactive par defaut ; depuis Linux 2.2)
Activation de l'interpretation RFC 1122 du champ TCP
Urgent-Pointer. Selon cette interpretation, le pointeur urgent
pointe vers le dernier octet de donnees urgentes. Par defaut on
utilise une interpretation compatible BSD de ce champ, qui
pointe vers le premier octet apres les donnees urgentes. Valider
cette option peut poser des problemes d'interaction entre
systemes.
tcp_syn_retries (entier ; 5 par defaut ; depuis Linux 2.2)
Le nombre maximal de fois ou un paquet SYN initial sera
retransmis pour une tentative de connexion TCP active. Cette
valeur ne doit pas depasser 255. La valeur par defaut est 5, ce
qui correspond approximativement a 180 secondes.
tcp_synack_retries (entier ; 5 par defaut ; depuis Linux 2.2)
Le nombre maximal de fois ou un segment SYN/ACK sera retransmis
sur une connexion TCP passive. Ce nombre ne doit pas depasser
255.
tcp_syncookies (booleen ; depuis Linux 2.2)
Valider les syncookies TCP. Le noyau doit etre compile avec
l'option CONFIG_SYN_COOKIES. Envoie des syncookies lorsque la
file d'attente des connexions sur une socket deborde. Ceci est
utilise pour se proteger d'une attaque de type << SYN flood >>.
On ne doit l'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 problemes avec les
clients ou les relais. Ce mecanisme n'est pas considere comme un
moyen de reglage sur un serveur tres charge ou mal configure.
Pour des alternatives acceptables, consultez
tcp_max_syn_backlog, tcp_synack_retries, tcp_abort_on_overflow.
tcp_timestamps (booleen ; active par defaut ; depuis Linux 2.2)
Activer les horodatages TCP (RFC 1323).
tcp_tso_win_divisor (entier ; 3 par defaut ; depuis Linux 2.6.9)
Ce parametre controle quel pourcentage de la fenetre de
congestion peut etre utilise par une unique trame de
segmentation (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 importants.
tcp_tw_recycle (booleen ; desactive par defaut ; depuis Linux 2.4)
Activer le recyclage rapide des sockets TIME_WAIT. Cette option
n'est pas recommandee car elle peut poser des problemes avec les
redirections NAT (Network Address Translation).
tcp_tw_reuse (booleen ; desactive par defaut ; depuis Linux 2.4.19/2.6)
Permet 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
2.6.13)
Active l'algorithme TCP Vegas d'evitement de congestion. TCP
Vegas est une modification cote emetteur de TCP qui anticipe la
congestion en estimant la bande passante. TCP Vegas ajuste la
vitesse d'emission en modifiant la fenetre de congestion. TCP
Vegas devrait fournir moins de 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
2.6.13)
Active 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 fixer la fenetre de congestion et un
redemarrage lent apres un episode de congestion. Grace a cette
estimation, TCP Westwood+ fixe de facon adaptative une limite 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 le prend en charge.
Normalement, les 16 bits du champ de longueur de fenetre dans
l'en-tete TCP limitent la taille a 64 Ko. Si on desire une
fenetre plus grande, l'application peut augmenter la taille du
tampon de la socket et activer l'option tcp_window_scaling. Si
tcp_window_scaling est inhibee, 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, defaut, 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 systeeme (sous Linux 2.4, la valeur par
defaut est de 4 Ko). Cette valeur assure qu'en mode de
memoire chargee, 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_SNDBUF sur la socket.
default La taille par defaut du tampon d'emission pour une
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 toutes 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 max - la taille maximale du tampon d'emission utilise
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 reception declaree avec
l'option SO_SNDBUF sur la socket. La valeur par defaut
est calculee avec la formule :
max(65536, min(4MB, tcp_mem[1]*PAGE_SIZE/128))
Sous Linux 2.4, la valeur par defaut est de 128 Ko et
descendre 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 disfonctionnelles meme si aucune option
de dimensionnement de la fenetre n'est recue de leur part.
Options de sockets
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. De plus, la plupart des options de
socket IPPROTO_IP sont valides sur les sockets TCP. Pour plus de
details, voir ip(7).
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. Ceci 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 la socket. 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)
Fournit des informations sur la 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 la 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 orphelines 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
la 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. Si
cette options est fixee avant d'etablir la connexion, elle
change 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. Ceci signifie que les paquets
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 nulle. 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 tranferts de donnees. Cette
option ne doit pas etre utilisee dans du code concu pour etre
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 depasser
255. Cette option ne doit pas etre utilisee dans du code concu
pour etre portable.
TCP_WINDOW_CLAMP (depuis Linux 2.4)
Limite la taille de la fenetre. 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.
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 une interpretation compatible BSD du champ
Urgent-Pointer. Ceci 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 la version 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 fournit
au tampon fournit par l'appelant. Depuis Linux 2.4.4, MSG_PEEK a
egalement un effet lorsqu'il est combine a MSG_OOB pour recevoir les
donnees 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 quantite de donnees non lues en attente dans le
tampon de reception. La socket ne doit pas etre dans l'etat
LISTEN, sinon l'erreur EINVAL est renvoyee. SIOCINQ est defini
dans <linux/sockios.h>. Une alternative est d'utiliser le
synonyme FIONREAD, defini dans <sys/ioctl.h>.
SIOCATMARK
Renvoie 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 SO_OOBINLINE est activee, et SIOCATMARK renvoie
vrai, la prochaine lecture sur la socket renverra les donnees
urgentes. Si l'option SO_OOBINLINE n'est pas activee, et
SIOCATMARK renvoie vrai, la prochaine lecture sur la socket
renverra les octets suivant les donnees urgentes (pour lire les
donnees 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 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, il
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
Renvoie la quantite de donnees non envoyees en attente dans le
tampon d'emission. La socket ne doit pas etre dans l'etat
LISTEN, sinon l'erreur EINVAL est renvoyee. SIOCOUTQ est defini
dans <linux/sockios.h>. Une alternative est d'utiliser le
synonyme TIOCOUTQ, defini dans <sys/ioctl.h>.
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.
Ceci peut etre valide 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 de la socket passee dans sin_family n'etait
pas AF_INET.
EPIPE L'autre extremite a ferme inopinement la socket, ou une lecture
est tentee sur une socket terminee.
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 se produire avec TCP.
VERSIONS
La prise en charge de notification explicite de congestion, l'emission
de fichiers sans copie avec sendfile(2), le reordonnancement et
certaines extensions SACK (DSACK) ont ete 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 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)
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 la fenetre TCP.
RFC 1644 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 controle de congestion TCP.
RFC 2018 et RFC 2883 pour SACK et ses extensions.
COLOPHON
Cette page fait partie de la publication 3.27 du projet man-pages
Linux. Une description du projet et des instructions pour signaler des
anomalies peuvent etre trouvees a l'adresse
<URL:http://www.kernel.org/doc/man-pages/>.
TRADUCTION
Depuis 2010, cette traduction est maintenue a l'aide de l'outil po4a
<URL:http://po4a.alioth.debian.org/> par l'equipe de traduction
francophone au sein du projet perkamon
<URL:http://perkamon.alioth.debian.org/>.
Christophe Blaess <URL:http://www.blaess.fr/christophe/> (1996-2003),
Alain Portal <URL:http://manpagesfr.free.fr/> (2003-2006). Julien
Cristau et l'equipe francophone de traduction de Debian (2006-2009).
Veuillez signaler toute erreur de traduction en ecrivant a
<debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
paquet manpages-fr.
Vous pouvez toujours avoir acces a la version anglaise de ce document
en utilisant la commande << man -L C <section> <page_de_man> >>.