TCP
Section : Manuel de l'administrateur Linux (
7)
Mise à jour de la version anglaise : 25 novembre 2007
Index
Menu principal
NOM
tcp - Protocole TCP
SYNOPSIS
#include <sys/socket.h>
#include <netinet/in.h>
tcp_socket = socket(PF_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).
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 nouvellement créée 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 on a appelé
accept(2)
ou
connect(2)
avec succès est complètement définie et peut transmettre des données.
Les données ne peuvent pas circuler sur les sockets
en attente ou non connectées.
Linux 2.2 supporte les extensions TCP à hautes performances RFC 1323.
Cela inclut les fenêtres TCP larges pour supporter 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.
On peut les fixer globalement avec les sysctls
net.ipv4.tcp_wmem
et
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 via
SO_SNDBUF
et
SO_RCVBUF
sont limitées par les sysctls généraux
net.core.rmem_max
et
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 utilise l'esapce supplémentaire à des fins administratives et pour des
structures internes du noyau, et les variables sysctls renvoient
des tailles supérieures à celle des véritables fenêtres TCP.
Pour les connexions individuelles, la taille du tampon doit être
fixée avant les appels
listen(2)
ou
connect(2)
pour qu'elle soit prise en compte.
Voir
socket(7)
pour plus de détails.
TCP supporte les 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é
pour la socket « propriétaire » avec les ioctls
SIOCSPGRP
ou
FIOCSETOWN
(ou l'opération, spécifiée par POSIX.1-2001,
F_SETOWN
de la fonction
fcntl(2).
Quand l'option de socket
SO_OOBINLINE
est validée, les données urgentes sont mises dans le flux de données normal
(un programme peut tester sa localisation avec l'ioctl
SIOCATMARK
décrit plus loin), sinon, on ne peut les recevoir que lorsque l'attribut
MSG_OOB
et positionné pour
recv(2)
et
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 le support
pour l'émission sans copie avec
sendfil(2),
la notification de congestion explicite, la nouvelle gestion des sockets
TIME_WAIT, les options "keep-alive" et le support
des extensions SACK dupliqués.
Formats d'adressee
TCP est construit au-dessus de IP (voir
ip(7)).
Les formats d'adresse définis pour
ip(7)
s'appliquent pour TCP.
TCP ne supporte que les communications point-à-point.
Le broadcast et le multicast ne sont pas supportés.
Sysctls
Ces variables sont accessibles avec les fichiers
/proc/sys/net/ipv4/*
ou avec l'interface
sysctl(2).
De plus, la plupart des sysctls d'IP s'appliquent à TCP. Voir
ip(7).
Les variables indiquées
booléen
prennent une valeur entière, avec une valeur non nulle (vrai) signifiant
que l'option correspondante est activée et une valeur nulle (faux)
signifiant que l'option est déactivée.
- tcp_abort_on_overflow (booléen ; valeur par défaut : désactivé)
-
Valide la réinitialisation des connexions si le service en écoute est trop
lent et incapable de les traiter et les accepter.
Ce qui signifie que si un déborderment 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 ; valeur par défaut : 2)
-
Calculer le surplus du tampon comme 1/2^tcp_adv_win_scale
(si tcp_adv_win_scale > 0) ou 1 - 1/2^(-tcp_adv_win_scale)
(si tcp_adv_win_scal <= 0).
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 de
tcp_adv_win_scale
indique que l'espace utilisé pour le tampon d'application est un quart
de l'espace total.
- tcp_app_win (entier ; valeur par défaut : 31)
-
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_bic (booléen ; valeur par défaut : désactivé)
-
Active l'algorithme BIC de contrôle de la congestion TCP.
BIC-TCP introduit une modification du côté de l'émetteur uniquement,
qui garantit un comportement linéaire du RTT pourvu qu'on utilise
de grandes fenêtres de congestion, tout en offrant à la fois une capacité
de passage à l'échelle et d'adaptation aisée au cas du TCP borné.
Le protocole associe deux techniques, l'accroissement cumulatif
et l'accroissement dichotomique.
Lorsque la fenêtre de congestion est grande,
l'accroissement cumulatif avec un incrément important garantit
un comportement linéaire du RTT ainsi qu'une bonne flexibilité.
Si l'on utilise de petites fenêtres de congestion, l'accroissement
à recherche dichotomique apporte une compatibilité totale avec TCP.
- tcp_bic_low_window (entier ; valeur par défaut : 14)
-
Configure la fenêtre seuil (en paquets) où l'algorithme BIC TCP commence
à ajuster la fenêtre de congestion.
En dessous ce seuil, BIC TCP se comporte de la même manière que TCP Reno.
tcp_bic_fast_convergence (booléen ; valeur par défaut : activé)
Forcer BIC TCP à répondre plus rapidement aux modifications
dans la fenêtre de congestion.
Permet aux deux flots de partager la même connexion
pour converger plus rapidement.
- tcp_dsack (booléen ; valeur par défaut : activé)
-
Valide le support TCP SACK dupliqué, de la RFC 2883.
- tcp_ecn (booléen ; valeur par défaut : désactivé)
-
Valide 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 ; valeur par défaut : activé)
-
Valide le support TCP Forward Acknoledgement.
- tcp_fin_timeout (entier ; valeur par défaut : 60)
-
Nombre de secondes à attendre un paquet final FIN avant que la socket
soit fermée de force.
Strictement parlant, ceci 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 était 180.
tcp_frto (booléen ; valeur par défaut : désactivé)
Active F-RTO, un algorithme de reprise renforcé pour les dépassements
de temps dans les retransmissions TCP.
Il est particulièrement bénéfique dans les environnements sans fil
où les pertes de paquets sont typiquement dues aux interférences radio
aléatoires plutôt qu'à la congestion d'un routeur intermédiaire.
- tcp_keepalive_intvl (entier ; valeur par défaut : 75)
-
L'intervalle en secondes entre deux messages TCP keep-alive.
- tcp_keepalive_probes (entier ; valeur par défaut : 9)
-
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 ; valeur par défaut : 7200)
-
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.
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 ; valeur par défaut : activé)
Si elle est active, la pile TCP prendra des décisions afin de préférer une
faible latence à un débit élevé.
Si elle est désactivée, le débit élevé sera préféré.
L'exemple d'une application ou la valeur par défaut devrait être modifiée
est le cluster Beowulf.
- tcp_max_orphans (entier ; valeur par défaut : voir plus loin)
-
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 non swappable.
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 plus loin)
-
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 plus loin)
-
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_mem
-
Il s'agit d'un vecteur de trois entiers : [bas, charge, haut].
Ces limites sont utilisées par TCP pour surveiller
sa consommation mémoire.
Les valeurs par défaut sont calculées au moment du boot
à partir de la mémoire disponible.
(TCP peut seulement utiliser
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.)
bas
- 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
charge
- 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.
haut
- le nombre global maximal de pages que TCP allouera.
Cette valeur surcharge tout autre limite imposée par le noyau.
- tcp_orphan_retries (entier ; valeur par défaut : 8)
-
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 ; valeur par défaut : 3)
-
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 ; valeur par défaut : activé)
-
Essayer d'envoyer des paquets de tailles complètes durant les réémissions.
C'est validé par défaut.
- tcp_retries1 (entier ; valeur par défaut : 3)
-
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, on demande au niveau réseau de 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 ; valeur par défaut : 15)
-
Le nombre de fois qu'un paquet TCP est restransmis sur une connexion
établie avant d'abandonner.
La valeur par défaut est 15, ce qui correspond à une durée entre
13 et 3 minutes suivant le délai maximal de retransmission.
La limite minimal de 100 secondes spécifiée par la RFC 1122
est typiquement considérée comme trop courte.
tcp_rfc1337 (booléen ; valeur par défaut : désactivé)
Activer le comportement TCP conformément à la RFC 1337.
Ceci n'est pas actif par défaut.
Lorsqu'il n'est pas activé, si un RST est reçu en état TIME_WAIT,
on ferme la socket immédiatement sans attendre la fin de la
période TIME_WAIT.
- tcp_rmem
-
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 variables sysctls, 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 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.
défaut
- la taille par défaut du tampon de réceptiion pour une socket TCP.
Cette valeur écrase la taille par défaut dans
la valeur globale
net.core.rmem_defautl
définie pour tous les protocoles.
La valeur par défaut est 87380 octets,
et 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é (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 87380*2 octets et peut descendre à 87380
sur les systèmes avec peu de mémoire.
- tcp_sack (booléen ; valeur par défaut : activé)
-
Activer l'acquittement TCP sélectif (RFC 2018).
- tcp_stdurg (booléen ; valeur par défaut : désactivé)
-
Si cette option est activée, utiliser l'interprétation RFC 793 stricte
du champ TCP Urgent-Pointer.
Conformément à cette interprétation, le pointeur d'urgence pointe vers
le dernier octet des données urgentes.
Si cette option est désactivée,
on utilise l'interprétation compatible BSD de ce champ :
le pointeur d'urgence pointe vers le premier octet des données urgentes.
Valider cette option peut poser des problèmes d'interactions
entre systèmes.
- tcp_synack_retries (entier ; valeur par défaut : 5)
-
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)
-
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.
Ceci est utilisé pour se protéger 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 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, voyez
tcp_max_syn_backlog,
tcp_synack_retries,
tcp_abort_on_overflow.
- tcp_syn_retries (entier ; valeur par défaut : 5)
-
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_timestamps (booléen ; valeur par défaut : activé)
-
Activer les horodatages TCP (RFC 1323).
- tcp_tw_recycle (booléen ; valeur par défaut : désactivé)
-
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 (booéen ; valeur par défaut : déactivé)
Permettre la réutilisation des sockets TIME_WAIT pour de nouvelles
connexions lorsque c'est sûr du point de vue protocole.
Cela ne devrait pas être modifier sans l'avis d'un expert.
- tcp_window_scaling (booléen ; valeur par défaut : activé)
-
Activer le dimensionnement de la fenêtre TCP (RFC 1323).
Ceci est actif par défaut.
Cette fonctionnalité permet d'utiliser une grande fenêtre
(> 64 Ko) sur une connexion TCP si le correspondant le supporte.
Normalement, les 16 bits du champ de longueur de fenêtre
dans l'entête TCP limitent la taille à 64 Ko.
Si on désire une fenêtre 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 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_vegas_cong_avoid (booléen ; valeur par défaut : désactivé)
Activer l'algorithme TCP Vegas d'évitement de congestion.
L'algorithme TCP Vegas introduit une modification du coté de l'émetteur
qui anticipe le début de la congestion en estimant la bande passante.
TCP Vegas ajuste le taux d'envoi en modifiant la fenêtre de congestion.
TCP Vegas doit fournir moins de packets perdus
mais n'est pas aussi agressif que TCP Reno.
- tcp_westwood (booléen ; valeur par défaut : désactivé)
-
Activer l'algorithme TCP Westwood+ de contrôle de congestion.
L'algorithme TCP Westwood+ introduit une modification du coté
de l'émetteur de la pile du protocole TCP Reno qui optimise
la performance du contrôle de congestion.
Il est basé sur l'estimation de bande passante bout à bout pour
configurer la fenêtre de congestion et un seuil de démarrage faible
après un épisode de congestion.
En utilisant cette estimation, TCP Westwood+ configure de manière
adaptative un seuil de démarrage faible et une fenêtre de congestion
qui prend en compte la bande passante utilisée au moment de la congestion.
TCP Westwood+ augmente de manière significative la compatibilité avec
TCP Reno dans les réseaux cablés et le débit sur des réseaux sans fil.
- tcp_wmem
-
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 des variables sysctl, en fonction
de la mémoire disponible.
min
- taille minimale du tampon d'émission utilisé par chaque socket TCP.
La valeur par défaut est 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.
défaut
- la taille par défaut du tampon d'émission pour une socket TCP.
Cette valeur écrase la taille par défaut dans
la valeur globale
net.core.wmem_defautl
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, la variable
net.ipv4.tcp_window_scaling
doit être activé (par défaut).
max
- la taille maximale du tampon d'émission 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_SNDBUF
sur la socket.
La valeur par défaut est 128 Ko et peut descendre à 64 Ko
sur les systèmes avec peu de mémoire.
Options des 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 famille de socket valant
IPPROTO_TCP.
De plus, la plupart des
options de socket
IPPROTO_IP
sont valides sur les sockets TCP.
Pour plus de détails, voir
ip(7).
- TCP_CORK
-
Ne pas envoyer de trames partielles.
Toutes les trames partielles en attente sont envoyées
lorsque cette option est effacée à nouveau.
Ceci permet de préparer les entêtes avant d'appeler
sendfile(2),
ou pour optimiser le débit.
Dans l'implémentation actuelle, il y a un plafond de 200 millisecondes
pour le temps pour lequel la sortie est bouchée par
TCP_CORK.
Si ce plafond est atteint,
les données en file d'attente sont automatiquement transmises.
TCP_NODELAY,
seulement depuis Linux 2.5.71.
Cette option ne doit pas être utilisée
dans du code conçu pour être portable.
- TCP_DEFER_ACCEPT
-
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
-
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
-
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
-
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
-
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
-
La durée des sockets orphelines dans l'état FIN_WAIT2.
Cette option peut servir à surcharger la valeur de la variable sysctl
(globale pour le système)
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.
Si cette option est fixée avant d'établir la connexion, elle
change é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.
$Ceci 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 surchargée par
TCP_CORK ;
toutefois, positionner cette option force une purge explicite
de la sortie en cours, même si
TCP_CORK
est actuellement positionnée.
- TCP_QUICKACK
-
Valider le mode quickack, ou l'inhiber si l'option est nulle.
En mode quickack, les acquitements 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 tranferts de données.
Cette option ne doit pas être utilisée dans du code conçu
pour être portable.
- TCP_SYNCNT
-
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_WINDOW_CLAMP
-
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.
Ioctls
Ces ioctls sont accessibles à travers l'appel système
ioctl(2)
qui renvoie l'information dans
value.
La syntaxe correcte est :
-
int value;
error = ioctl(tcp_socket, ioctl_type, &value);
- 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.
- SIOCATMARK
-
Renvoie vrai (c'est-à-dire que
value
est non nul) si le flux des données d'entrée est à la marque urgente.
Si l'option socket
SO_OOBINLINE
est positionnée et si
SIOCATMARK
renvoie vrai, la prochaine lecture sur la socket
renverra les données urgentes.
Si l'option socket
SO_OOBINLINE
n'est pas positionnée et si
SIOCATMARK
renvoie vrai, la prochaine lecture sur la socket renverra les octets
suivant les données urgentes
(la lecture des données urgentes nécessite l'attribut
recv(MSG_OOB)).
Notez qu'une lecture ne va jamais à travers une marque urgente.
Si une application est informée de la présence de données urgentes via
select(2)
(en utilisant l'attribut
exceptfds)
ou à travers la délivrance d'un signal
SIGURG,
elle peut avancer jusqu'à la marque en utilisant une boucle
qui teste de manière répétitive
SIOCATMARK
et effectue une lecture (demandant tous les octets) aussi longtemps que
SIOCATMARK
renvoie faux.
- SIOCOUTQ
-
Renvoie la quantité de données non lues en attente
dans le tampon d'émission.
La socket ne doit pas être dans l'état LISTEN, sinon l'erreur
EINVAL
est renvoyée.
Gestion d'erreur
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 application demande une notification d'erreur plus rapide.
Ceci 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 envers
les 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 coté 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
Le support pour la notification explicite de congestion,
l'émission de fichiers sans copie,
le réordonnancement et certaines extensions SACK (DSACK)
ont été introduits dans Linux 2.4.
Le support du Forward Acknowledgement (FACK), le recyclage de TIME_WAIT
les options des messages keepalive et les variables sysctls
ont été introduits dans Linux 2.3.
Les valeurs par défaut et les descriptions des variables sysctls
décrites ci-dessus sont applicables pour les noyaux 2.4.
NOTES
TCP n'a pas de véritables données hors-bande ; il a des données urgentes.
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.
Ceci viole la RFC 1122, mais est indispensable pour
l'interopérabilité avec les autres piles.
On peut modifier ce comportement avec le
sysctl
tcp_stdurg.
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),
sysctl(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 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 contrôle de congestion TCP.
RFC 2018 et RFC 2883 pour SACK et ses extensions.
TRADUCTION
Ce document est une traduction réalisée par Christophe Blaess
<http://www.blaess.fr/christophe/> le 11 juin 2001
et révisée le 17 juillet 2008.
L'équipe de traduction a fait le maximum pour réaliser une adaptation
française de qualité. La version anglaise la plus à jour de ce document est
toujours consultable via la commande : « LANG=C man 7 tcp ».
N'hésitez pas à signaler à l'auteur ou au traducteur, selon le cas, toute
erreur dans cette page de manuel.
Index
- NOM
-
- SYNOPSIS
-
- DESCRIPTION
-
- Formats d'adressee
-
- Sysctls
-
- Options des sockets
-
- Ioctls
-
- Gestion d'erreur
-
- ERREURS
-
- VERSIONS
-
- NOTES
-
- BOGUES
-
- VOIR AUSSI
-
- TRADUCTION
-
Dernière mise à jour : 17 juillet 2008