tcp
Table des matières
Retour à l'index
NOM
tcp – Protocole TCP
SYNOPSIS
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/tcp.h>
tcp_socket = socket(AF_INET, SOCK_STREAM, 0);
DESCRIPTION
Il s'agit d'une implémentation du protocole TCP défini dans les RFC 793,
1122 et 2001 avec les extensions SACK (Selective acknowledgment) et
NewReno. Ce protocole fournit une connexion bidirectionnelle fiable,
orientée flux, entre deux sockets au-dessus de ip(7), pour les versions 4
et 6. TCP garantit que les données arrivent dans l'ordre et assure la
retransmission des paquets perdus. Il calcule et vérifie une somme de
contrôle par paquet pour détecter les erreurs de transmission. TCP ne
préserve pas les limites des enregistrements.
Un socket TCP nouvellement créé n'a pas d'adresse locale ou distante et
n'est pas complètement défini. Pour créer une connexion TCP sortante,
utilisez connect(2) pour établir la connexion vers un autre socket
TCP. Pour recevoir les connexions entrantes, attachez d'abord le socket avec
bind(2) à une adresse locale et un port, puis appelez listen(2) pour
mettre le socket dans un état d'attente. Après cela, un nouveau socket peut
être accepté pour chaque connexion entrante en utilisant accept(2). Un
socket sur lequel accept(2) ou connect(2) ont été appelés correctement
est complètement défini et peut transmettre des données. Les données ne
peuvent pas circuler sur les sockets en attente ou non connectés.
Linux prend en charge les extensions TCP à hautes performances RFC 1323. Ces extensions incluent la protection contre les numéros de séquence
bouclant (PAWS – Protection Against Wrapped Sequence), l’augmentation de
fenêtre (« Window Scaling ») et les horodatages (« timestamps »). Le
Window Scaling permet d'utiliser des fenêtres TCP larges (> 64 ko)
pour gérer les liaisons avec une latence ou une bande passante élevées. Pour
les utiliser, les tailles des tampons d'émission et de réception doivent
être augmentées. Elles peuvent être définies globalement avec les fichiers
/proc/sys/net/ipv4/tcp_wmem et /proc/sys/net/ipv4/tcp_rmem ou
individuellement pour chaque socket avec les options SO_SNDBUF et
SO_RCVBUF de l'appel système setsockopt(2).
Les tailles maximales pour les tampons de socket déclarés à l’aide de
SO_SNDBUF et SO_RCVBUF sont limitées par les valeurs des fichiers
/proc/sys/net/core/rmem_max et /proc/sys/net/core/wmem_max. Notez que
TCP alloue en fait deux fois plus de place que la taille demandée avec
l'appel setsockopt(2), et qu'un appel getsockopt(2) réussi ne renverra
pas la même taille de tampon que celle réclamée dans l’appel
setsockopt(2). TCP utilise l’espace supplémentaire à des fins
administratives et pour des structures internes du noyau, et les valeurs des
fichiers de /proc renvoient des tailles supérieures à celles des
véritables fenêtres TCP. Pour les connexions individuelles, la taille du
tampon de socket doit être définie avant les appels listen(2) ou
connect(2) pour qu'elle soit prise en compte. Consultez socket(7) pour
plus de détails.
TCP permet d'indiquer des données urgentes. Elles signalent au récepteur
qu'un message important est dans le flux de données et qu'il doit être
traité le plus tôt possible. Pour envoyer des données urgentes, indiquez
l'option MSG_OOB à send(2). Quand des données urgentes sont reçues, le
noyau envoie un signal SIGURG au processus ou au groupe de processus qui
a été indiqué comme propriétaire du socket avec les ioctls SIOCSPGRP ou
FIOSETOWN (ou l'opération F_SETOWN de fcntl(2), spécifiée par
POSIX.1-2001). Quand l'option de socket SO_OOBINLINE est activée, les
données urgentes sont mises dans le flux de données normal (et un programme
peut détecter leur emplacement avec l'ioctl SIOCATMARK décrit
ci-dessous), sinon, elles ne peuvent être reçues que lorsque l'attribut
MSG_OOB est positionné pour recv(2) ou recvmsg(2).
Quand des données hors bande sont présentes, select(2) indique le
descripteur de fichier comme ayant une condition exceptionnelle et
poll(2) indique un événement POLLPRI.
Linux 2.4 a introduit un certain nombre de changements pour améliorer le
débit et l'extensibilité, ainsi que des fonctionnalités
améliorées. Certaines de ces fonctions incluent la prise en charge de
sendfile(2) sans copie, la notification de congestion explicite (ECN), la
nouvelle gestion des sockets TIME_WAIT, les options de socket « keep-alive »
et la prise en charge des extensions Duplicate SACK (acquittement en double)
.
Formats d'adresse
TCP est construit au-dessus de IP (consultez ip(7)). Les formats
d'adresse définis par ip(7) s'appliquent pour TCP. TCP ne gère que les
communications point-à-point. Les diffusion et multidiffusion (broadcast et
multicast) ne sont pas gérées.
/proc interfaces
Les paramètres TCP du système sont accessibles dans les fichiers du
répertoire /proc/sys/net/ipv4/. De plus, la plupart des interfaces
/proc d'IP s'appliquent à TCP. Consultez ip(7). Les variables
indiquées comme booléennes prennent une valeur entière, une valeur non
nulle indiquant que l'option est active, une valeur nulle indiquant que
l'option est inactive.
- tcp_abc (entier ; 0 par défaut ; Linux 2.6.15 à 3.8)
-
Contrôler l'ABC (« Appropriate Byte Count » : décompte d'octets approprié),
défini dans la RFC 3465. ABC est une façon d'augmenter la fenêtre de
congestion (cwnd : congestion window) plus lentement en réponse à des
acquittements partiels. Les valeurs possibles sont :
-
- 0
-
augmenter cwnd une fois par acquittement (pas d'ABC)
- 1
-
augmenter cwnd une fois par acquittement d'un segment complet
- 2
-
permettre l'augmentation de cwnd par deux si l'acquittement correspond à
deux segments, pour compenser les acquittements retardés.
- tcp_abort_on_overflow (booléen ; désactivé par défaut ; depuis Linux 2.4)
-
Valider la réinitialisation des connexions si le service en écoute est trop
lent et incapable de les traiter et de les accepter. Cela signifie que si un
débordement se produit à cause d'une surcharge temporaire, la connexion sera
rétablie. N'activez cette option que si vous êtes sûr que le démon en
écoute ne peut pas être configuré pour accepter les connexions plus
vite. Cette option peut désorienter les clients de votre serveur.
- tcp_adv_win_scale (entier ; 2 par défaut ; depuis Linux 2.4)
-
Calculer le surplus du tampon comme bytes/2hatcp_adv_win_scale, si
tcp_adv_win_scale est supérieur à 0 ; ou
bytes-bytes/2ha(-tcp_adv_win_scale), si tcp_adv_win_scale est
inférieur ou égal à zéro.
-
L'espace du tampon de réception du socket est partagé entre l'application et
le noyau. TCP conserve une portion du tampon en tant que fenêtre TCP, c'est
la taille de la fenêtre de réception indiquée au correspondant. Le reste de
cet espace est utilisé comme tampon « d’application », pour isoler le
réseau des latences de l'ordonnanceur et de l'application. La valeur par
défaut (2) de tcp_adv_win_scale indique que l'espace utilisé pour le
tampon d'application est un quart de l'espace total.
- tcp_allowed_congestion_control (chaîne ; voir le texte pour la valeur par défaut ; depuis Linux 2.4.20)
-
Afficher ou définir les choix d'algorithmes de contrôle de congestion
disponibles pour les processus non privilégiés (consultez la description de
l'option TCP_CONGESTION pour les sockets). Les éléments de la liste sont
séparés par des espaces et terminés par un caractère de changement de
ligne. La liste est un sous-ensemble des algorithmes de la liste
tcp_available_congestion_control. La valeur par défaut est « reno » plus
la définition par défaut de tcp_congestion_control.
- tcp_autocorking (booléen ; activé par défaut ; depuis Linux 3.14)
-
Si cette option est active, le noyau essaie de fusionner les petites
écritures (issues d'appels consécutifs à write(2) et sendmsg(2))
autant que possible, afin de diminuer le nombre total de paquets envoyés. La
fusion est effectuée si au moins un paquet avant le flux est en attente dans
les files d’attente Qdisc ou d'émission du périphérique. Les applications
peuvent utiliser l'option de socket TCP_CORK afin de contrôler comment et
quand libérer leurs sockets.
- tcp_available_congestion_control (chaîne ; lecture seule ; depuis Linux 2.4.20)
-
Afficher une liste des algorithmes de contrôle de congestion qui sont
enregistrés. Les éléments de la liste sont séparés par des espaces et
terminés par un caractère de changement de ligne. Cette liste limite
l'ensemble des algorithmes permis pour la liste dans
tcp_allowed_congestion_control. Plus d'algorithmes de contrôle de
congestion peuvent être disponibles sous forme de modules, mais non chargés.
- tcp_app_win (entier ; 31 par défaut ; depuis Linux 2.4)
-
Cette variable définit combien d'octets de la fenêtre TCP sont réservés pour
le surplus de tampon.
-
Un maximum de (window/2hatcp_app_win, mss – maximum segment size)
octets de la fenêtre sont réservés pour le tampon d'application. Une valeur
nulle indique qu'aucune portion n'est réservée.
- tcp_base_mss (entier ; 512 par défaut ; depuis Linux 2.6.17)
-
La valeur initiale de search_low à utiliser pour la découverte du MTU
(maximum transmission unit) du chemin dans la couche de transport
(interrogation du MTU). Si la découverte du MTU est activée, il s'agit du
MSS (maximum segment size) de départ utilisé par la connexion.
- tcp_bic (booléen ; désactivé par défaut ; Linux 2.4.27/2.6.6 à Linux 2.6.13)
-
Activer l'algorithme de contrôle de congestion TCP BIC (Binary Increase
Congestion control). BIC TCP est une modification uniquement côté émetteur
qui assure une linéarité du RTT (Délai d'aller-retour, « Round-Trip Time ») avec de grandes fenêtres, tout en permettant un passage à l'échelle et en
se bornant à la compatibilité TCP. Le protocole combine deux schémas appelés
augmentation additive et augmentation de recherche dichotomique. Lorsque la
fenêtre de congestion est grande, l'augmentation additive avec un grand
incrément assure une bonne linéarité du RTT et un bon passage à
l'échelle. Avec des petites fenêtres de congestion, l’augmentation de
recherche dichotomique augmente la compatibilité TCP.
- tcp_bic_low_window (entier ; 14 par défaut ; Linux 2.4.27/2.6.6 à Linux 2.6.13)
-
Corriger la fenêtre limite (en paquets) pour laquelle BIC TCP commence à
ajuster la fenêtre de congestion. Sous cette limite, BIC TCP se comporte
comme l'algorithme TCP Reno par défaut.
- tcp_bic_fast_convergence (booléen ; activé par défaut ; Linux 2.4.27/2.6.6 à Linux 2.6.13)
-
Forcer BIC TCP à répondre plus vite aux changements de fenêtre de
congestion. Permet à deux flux partageant la même connexion de converger
plus vite.
- tcp_congestion_control (chaîne ; voir le texte pour la valeur par défaut ; depuis Linux 2.4.13)
-
Définir l'algorithme de contrôle de congestion à utiliser par défaut pour
les nouvelles connexions. L'algorithme « reno » est toujours disponible,
mais des choix supplémentaires sont disponibles en fonction de la
configuration du noyau. La valeur par défaut pour ce fichier est définie
dans la configuration du noyau.
- tcp_dma_copybreak (entier ; 4096 par défaut ; depuis Linux 2.6.24)
-
La limite inférieure, en octets, de la taille des lectures de socket qui
seront transférées sur le moteur de copie DMA (accès direct à la mémoire),
s'il y en a un sur le système et si le noyau a été configuré avec l'option
CONFIG_NET_DMA.
- tcp_dsack (booléen ; activé par défaut ; depuis Linux 2.4)
-
Activer la prise en charge de TCP Duplicate SACK de la RFC 2883.
- tcp_fastopen (masque de bits ; défaut : 0x1 ; depuis Linux 3.7)
-
Activer la prise en charge de l’accélération de connexion (Fast Open) de la
RFC 7413. Ce drapeau est utilisé comme un tableau de bits avec les valeurs
suivantes :
-
- 0x1
-
Activer Fast Open du côté client
- 0x2
-
Activer Fast Open du côté serveur
- 0x4
-
Autoriser le côté client à transmettre des données dans SYN sans option Fast
Open
- 0x200
-
Autoriser le côté serveur à accepter des données de SYN sans option Fast
Open
- 0x400
-
Autoriser Fast Open pour tous les écouteurs sans option de socket
TCP_FASTOPEN
- tcp_fastopen_key (depuis Linux 3.7)
-
Définir la clé Fast Open RFC 7413 côté serveur pour générer le cookie de
Fast Open quand la prise en charge de Fast Open côté serveur est activée.
- tcp_ecn (entier ; valeur par défaut : voir ci-dessous ; depuis Linux 2.4)
-
Activer la notification explicite de congestion (ECN) de la RFC 3168.
-
Ce fichier peut prendre une des valeurs suivantes :
-
- 0
-
Désactiver l’ECN. Ne jamais initier ni accepter l’ECN. Valeur par défaut
jusqu’à Linux 2.6.30 inclus.
- 1
-
Activer l’ECN si demandée par les connexions entrantes et aussi requérir
l’ECN sur les essais de connexion sortante.
- 2
-
Activer l’ECN si demandée par les connexions entrantes, mais ne pas requérir
l’ECN sur les connexions sortantes. Cette valeur est prise en charge et est
la valeur par défaut depuis Linux 2.6.31.
-
Lorsqu’activé, la connectivité vers certaines destinations peut être
affectée à cause d'équipements intermédiaires anciens au comportement
défectueux le long du chemin, faisant que des connexions sont
rejetées. Cependant, pour faciliter et encourager le déploiement de
l’option 1 et contourner de tels équipements bogués, l’option
tcp_ecn_fallback a été introduite.
- tcp_ecn_fallfack (booléen ; activé par défaut ; depuis Linux 4.1)
-
Activer la solution de secours de la RFC 3168, Section
6.1.1.1. Lorsqu’activée, les SYN de la configuration ECN arrivant à échéance
dans le délai normal de retransmission de SYN seront renvoyés avec CWR
(Congestion Window Reduced) et ECE (ECN-Echo) effacés.
- tcp_fack (booléen ; activé par défaut ; depuis Linux 2.4)
-
Activer la prise en charge de TCP Forward Acknowledgement.
- tcp_fin_timeout (entier ; 60 par défaut ; depuis Linux 2.2)
-
Nombre de secondes à attendre un paquet final FIN avant que le socket soit
fermé de force. Strictement parlant, c’est une violation des spécifications
TCP, mais nécessaire pour empêcher les attaques par déni de service. La
valeur par défaut dans les noyaux 2.2 était 180.
- tcp_frto (entier ; 0 par défaut ; depuis Linux 2.4.21/2.6)
-
Activer F-RTO (forward RTO-recovery), un algorithme amélioré de récupération
pour les temporisations de retransmission TCP (RTO : « retransmission
timeouts »). Cette option est particulièrement intéressante dans les
environnements sans fil, où la perte des paquets est en général due à des
interférences radio aléatoires plutôt qu'à la congestion des routeurs
intermédiaires. Consultez la RFC 4138 pour plus de détails.
-
Ce fichier peut prendre une des valeurs suivantes :
-
- 0
-
Désactivé. C’était la valeur par défaut jusqu’à Linux 2.6.23 inclus.
- 1
-
La version de base de l'algorithme F-RTO est activée.
- 2
-
Activer la version F-RTO améliorée de SACK si le flux utilise des SACK. La
version de base peut aussi être utilisée quand des SACK sont utilisés, même
si dans ce cas des scénarios existent dans lesquels F-RTO interagit mal avec
le comptage de paquets du flux TCP utilisant des SACK. C’est la valeur par
défaut depuis Linux 2.6.24.
-
Avant Linux 2.6.22, ce paramètre était une valeur booléenne, qui ne prenait
en charge que les valeurs 0 et 1 ci-dessus.
- tcp_frto_response (entier ; 0 par défaut ; depuis Linux 2.6.22)
-
Quand F-RTO a détecté une fausse expiration d'une temporisation TCP
(c'est-à-dire qu'elle aurait pu être évitée si TCP avait eu un délai de
retransmission plus long), TCP a plusieurs options sur ce qu'il faut faire
par la suite. Les valeurs possibles sont :
-
- 0
-
Diminution de moitié du débit ; une réponse prudente et sans problèmes qui
résulte en une diminution de moitié de la fenêtre de congestion (cwnd) et
du seuil de démarrage lent (ssthresh, « slow-start threshold ») après un
seul RTT (Round-trip time – temps d’aller-retour).
- 1
-
Réponse très prudente ; déconseillée parce que bien que correcte, elle
interagit mal avec le reste de TCP sous Linux ; elle réduit immédiatement de
moitié de cwnd et de ssthresh.
- 2
-
Réponse risquée ; supprime les mesures de contrôle de congestion qui ne sont
pas jugées nécessaires (en ignorant la possibilité d'une perte de
retransmission qui devrait inciter TCP à être plus prudent) ; cwnd et
ssthresh sont redéfinis aux valeurs antérieures à l'expiration du délai.
- tcp_keepalive_intvl (entier ; 75 par défaut ; depuis Linux 2.4)
-
L'intervalle en secondes entre deux messages TCP keep-alive.
- tcp_keepalive_probes (entier ; 9 par défaut ; depuis Linux 2.2)
-
Nombre maximal de sondages KA (keep-alive) de TCP à envoyer avant
d'abandonner et de tuer la connexion si aucune réponse n'est obtenue de
l'autre partie.
- tcp_keepalive_time (entier ; 7200 par défaut ; depuis Linux 2.2)
-
Nombre de secondes durant lesquelles une connexion est sans activité avant
que TCP envoie des sondages keep-alive. Ceux-ci ne sont envoyés que si
l'option SO_KEEPALIVE de socket est activée. La valeur par défaut est
7200 secondes (2 heures). Une connexion inactive est coupée environ
11 minutes plus tard (9 sondages avec 75 secondes d'écart).
-
Notez que les délais des mécanismes de connexion sous-jacents ou de
l'application peuvent être bien plus courts.
- tcp_low_latency (booléen ; désactivé par défaut ; depuis Linux 2.4.21/2.6 ; obsolète depuis Linux 4.14)
-
S'il est activé, la pile TCP prend des décisions qui favorisent une latence
plus faible par opposition à un débit plus grand. Si cette option est
désactivée, un débit plus grand est préféré. Un cas où cette valeur par
défaut devrait être changée est par exemple une grille de calcul
Beowulf. Depuis Linux 4.14, la valeur de ce fichier est ignorée, même s'il
existe toujours.
- tcp_max_orphans (entier ; valeur par défaut : voir ci-dessous ; depuis Linux 2.4)
-
Le nombre maximal de sockets TCP orphelins (attachés à aucun gestionnaire de
fichier utilisateur) sur le système. Quand ce nombre est dépassé, la
connexion orpheline est réinitialisée et un message d'avertissement est
affiché. Cette limite n'existe que pour éviter les attaques simples par déni
de service. Sa diminution n'est pas recommandée. Certaines conditions de
réseau peuvent nécessiter l'augmentation de cette limite, mais notez que
chaque socket orphelin peut consommer jusqu'à ~64 ko de mémoire ne
pouvant pas être placés en espace d’échange. La valeur par défaut est égale
au paramètre NR_FILE du noyau. Elle est ajustée en fonction de la mémoire
disponible sur le système.
- tcp_max_syn_backlog (entier ; valeur par défaut : voir ci-dessous ; depuis Linux 2.2)
-
Le nombre maximal de requêtes de connexions en attente qui n'ont pas encore
reçu d'acquittement de la part du client se connectant. Si ce nombre est
dépassé, le noyau commencera à rejeter des requêtes. La valeur par défaut,
256, est augmentée jusqu'à 1024 si la mémoire présente est suffisante
(>= 128 Mo) et peut être diminuée à 128 sur les systèmes avec très peu
de mémoire (<= 32 Mo).
-
Avant Linux 2.6.20, et s'il fallait augmenter cette valeur au dessus de
1024, il était recommandé de modifier la taille de la table de hachage
SYNACK (TCP_SYNQ_HSIZE) dans include/net/tcp.h pour conserver
-
TCP_SYNQ_HSIZE * 16 <= tcp_max_syn_backlog
-
et le noyau devait être recompilé. Dans Linux 2.6.20, la taille fixe
TCP_SYNQ_HSIZE a été supprimée en faveur d'une taille dynamique.
- tcp_max_tw_buckets (entier ; valeur par défaut : voir ci-dessous ; depuis Linux 2.4)
-
Le nombre maximal de sockets dans l'état TIME_WAIT autorisés sur le
système. Cette limite n'existe que pour éviter les attaques simples par déni
de service. La valeur par défaut de NR_FILE*2 est ajustée en fonction de la
mémoire disponible. Si ce nombre est atteint, le socket est fermé et un
avertissement est affiché.
- tcp_moderate_rcvbuf (booléen ; activé par défaut ; Linux 2.4.17/2.6.7)
-
Si activé, TCP effectue un ajustage automatique du tampon de réception, en
essayant de trouver la bonne taille automatiquement (pas plus grand que
tcp_rmem[2]) pour correspondre à la taille nécessaire pour un débit
maximal sur le chemin.
- tcp_mem (depuis Linux 2.4)
-
Il s'agit d'un vecteur de trois entiers : [low, pressure, high]. Ces
limites, mesurées dans une unité qui correspond à la taille des pages
système, sont utilisées par TCP pour surveiller sa consommation mémoire. Les
valeurs par défaut sont calculées au moment du démarrage à partir de la
mémoire disponible (TCP ne peut utiliser pour cela que la mémoire basse
qui est limitée à environ 900 Mo sur les systèmes 32 bits. Les systèmes
64 bits ne souffrent pas de cette limitation).
-
- low
-
TCP ne cherche pas à réguler ses allocations mémoire quand le nombre de
pages qu'il a allouées est en dessous de ce nombre
- pressure
-
Lorsque la taille mémoire allouée par TCP dépasse ce nombre de pages, TCP
modère sa consommation mémoire. L'état de mémoire chargée (pressure) se
termine lorsque le nombre de pages allouées descend en dessous de la marque
low.
- high
-
Le nombre global maximal de pages que TCP allouera. Cette valeur surcharge
tout autre limite imposée par le noyau.
- tcp_mtu_probing (entier ; 0 par défaut ; Linux 2.6.17)
-
Ce paramètre contrôle la découverte du MTU du chemin de la couche transport
(« TCP Packetization-Layer Path MTU Discovery »). Le fichier peut prendre
les valeurs suivantes :
-
- 0
-
Désactivé
- 1
-
Désactivé par défaut, activé quand un trou noir ICMP est détecté
- 2
-
Toujours activé, utilise le MSS de départ de tcp_base_mss.
- tcp_no_metrics_save (booléen ; désactivé par défaut ; depuis Linux 2.6.6)
-
Par défaut, TCP sauvegarde différentes métriques de connexion dans le cache
des routes quand la connexion ferme, de telle sorte que les connexions
ouvertes dans un futur proche puissent les utiliser pour définir les
conditions initiales. En général, cela augmente globalement les
performances, mais peut aussi parfois les dégrader. Si
tcp_no_metrics_save est activé, TCP ne sauvera pas de métriques dans le
cache lors de la fermeture des connexions.
- tcp_orphan_retries (entier ; 8 par défaut ; depuis Linux 2.4)
-
Le nombre maximal de tentatives pour sonder l'autre extrémité d'une
connexion qui a été fermée par notre côté.
- tcp_reordering (entier ; 3 par défaut ; depuis Linux 2.4)
-
Le nombre maximal de réarrangements d’un paquet dans un flux de paquets TCP
sans que TCP assume la perte du paquet et passe dans un démarrage lent. Il
n'est pas conseillé de modifier cette valeur. C'est une métrique sur la
détection de réarrangement de paquet conçue pour minimiser la diminution de
débit et les retransmissions inutiles provoquées par le réarrangement de
paquet dans une connexion.
- tcp_retrans_collapse (booléen ; activé par défaut ; depuis Linux 2.2)
-
Essayer d'envoyer des paquets de taille standard durant la retransmission.
- tcp_retries1 (entier ; 3 par défaut ; depuis Linux 2.2)
-
Le nombre de fois que TCP essayera de retransmettre un paquet sur une
connexion établie normalement, sans demander de contribution supplémentaire
de la couche réseau concernée. Une fois ce nombre atteint, la couche réseau
doit remettre à jour son routage, si possible avant chaque nouvelle
transmission. La valeur par défaut, 3, est le minimum indiqué dans la RFC.
- tcp_retries2 (entier ; 15 par défaut ; depuis Linux 2.2)
-
Le nombre maximal de fois qu'un paquet TCP est retransmis sur une connexion
établie avant d'abandonner. La valeur par défaut est 15, ce qui correspond à
une durée entre 13 et 30 minutes suivant le délai maximal de
retransmission. La limite minimale de 100 secondes spécifiée par la RFC 1122 est en général considérée comme trop courte.
- tcp_rfc1337 (booléen ; désactivé par défaut ; depuis Linux 2.2)
-
Activer le comportement TCP conformément à la RFC 1337. Si désactivé, et si
un RST est reçu en état TIME_WAIT, le socket est immédiatement fermé sans
attendre la fin de la période TIME_WAIT.
- tcp_rmem (depuis Linux 2.4)
-
Il s'agit d'un vecteur de trois entiers : [min, default, max]. Ces
paramètres sont utilisés par TCP pour réguler les tailles du tampon de
réception. TCP ajuste dynamiquement la taille à partir de la valeur par
défaut, dans l'intervalle de ces valeurs, en fonction de la mémoire
disponible sur le système.
-
- min
-
taille minimale du tampon de réception utilisée par chaque socket TCP. La
valeur par défaut est la taille des pages du système (sous Linux 2.4, la
valeur par défaut est de 4 Ko et descend à PAGE_SIZE octets sur les
systèmes avec peu de mémoire). Cette valeur assure qu'en mode de mémoire
pressure, les allocations en dessous de cette taille réussiront. Elle
n'est pas utilisée pour limiter la taille du tampon de réception déclarée en
utilisant l'option SO_RCVBUF sur le socket.
- default
-
la taille par défaut du tampon de réception pour un socket TCP. Cette valeur
écrase la taille par défaut initiale de la valeur globale
net.core.rmem_default définie pour tous les protocoles. La valeur par
défaut est 87 380 octets (sous Linux 2.4, elle descend à 43 689 sur les
systèmes avec peu de mémoire). Si une taille plus grande est souhaitée, il
faut augmenter cette valeur (pour affecter tous les sockets). Pour utiliser
une grande fenêtre TCP, l'option net.ipv4.tcp_window_scaling doit être
activée (elle l'est par défaut).
- max
-
la taille maximale du tampon de réception utilisé par chaque socket
TCP. Cette valeur ne surcharge pas la valeur globale
net.core.rmem_max. Elle ne permet pas de limiter la taille du tampon de
réception déclarée avec l'option SO_RCVBUF sur le socket. La valeur par
défaut est calculée par la formule :
-
max(87380, min(4 MB, tcp_mem[1]*PAGE_SIZE/128))
-
Sous Linux 2.4, la valeur par défaut est de 87380*2 octets et réduite à
87 380 sur les systèmes avec peu de mémoire.
- tcp_sack (booléen ; activé par défaut ; depuis Linux 2.2)
-
Activer l'acquittement TCP sélectif (RFC 2018).
- tcp_slow_start_after_idle (booléen ; activé par défaut ; depuis Linux 2.6.18)
-
Si activé, adopte le comportement de la RFC 2861 et l’expiration de la
fenêtre de congestion après une période d'inactivité. Une période
d'inactivité est définie comme le RTO (« retransmission timeout » : délai de
retransmission). Si désactivé, la fenêtre de congestion n'expirera pas après
une période d'inactivité.
- tcp_stdurg (booléen ; désactivé par défaut ; depuis Linux 2.2)
-
Si cette option est activée, alors utilisation de l’interprétation RFC 1122
du champ TCP de pointeur de données urgentes. Selon cette interprétation, le
pointeur d’urgence pointe vers le dernier octet des données urgentes. Si
cette option est désactivée, alors utilisation de l’interprétation
compatible avec BSD de ce pointeur : pointage vers le premier octet après
les données urgentes. Activer cette option peut poser des problèmes
d'interopérabilité.
- tcp_syn_retries (entier ; 6 par défaut ; depuis Linux 2.2)
-
Le nombre maximal de fois où une demande SYN initiale sera retransmise pour
une tentative de connexion TCP active. Cette valeur ne doit pas dépasser
255. La valeur par défaut est 6, ce qui correspond approximativement à des
essais pendant 127 secondes. Avant Linux 3.7, la valeur par défaut était 5,
ce qui (en conjonction avec des calculs basés sur d’autres paramètres du
noyau) correspondait approximativement à 180 secondes.
- tcp_synack_retries (entier ; 5 par défaut ; depuis Linux 2.2)
-
Le nombre maximal de retransmissions d'un segment SYN/ACK pour une connexion
TCP passive. Ce nombre ne doit pas dépasser 255.
- tcp_syncookies (entier ; 1 par défaut ; depuis Linux 2.2)
-
Activer les syncookies TCP (SYN cookies). Le noyau doit être compilé avec
l'option CONFIG_SYN_COOKIES. La fonctionnalité des syncookies essaie de
protéger un socket d’une attaque par inondation de SYN. Elle n’est à
utiliser qu'en dernier ressort. Elle constitue une violation du protocole
TCP et entre en conflit avec d'autres zones de TCP comme les extensions TCP,
ce qui peut poser des problèmes aux clients ou aux relais. Ce mécanisme
n'est pas recommandé comme moyen de réglage sur un serveur très chargé pour
faire face à des conditions de surcharge ou de mauvaise configuration. Pour
des alternatives recommandées, consultez tcp_max_syn_backlog,
tcp_synack_retries, tcp_abort_on_overflow. À régler à une des valeurs
suivantes :
-
- 0
-
Désactivation des syncookies TCP.
- 1
-
Envoi de syncookies quand la file d’accumulation de SYN d’un socket déborde.
- 2
-
(depuis Linux 3.12) Envoi de syncookies sans conditions. Cela peut être
utile pour tester un réseau.
- tcp_timestamps (entier ; par défaut 1 ; depuis Linux 2.2)
-
À régler à une des valeurs suivantes pour activer ou désactiver les
horodatages TCP de la RFC 1323 :
-
- 0
-
Désactiver les horodatages.
- 1
-
Activer les horodatages comme définis dans la RFC 1323 et utiliser une
heure de début aléatoire pour chaque connexion plutôt que d’utiliser l’heure
actuelle.
- 2
-
Comme pour la valeur 1, mais sans décalages aléatoires. Régler
tcp_timestamps à cette valeur est significatif depuis Linux 4.10.
- tcp_tso_win_divisor (entier ; 3 par défaut ; depuis Linux 2.6.9)
-
Ce paramètre contrôle le pourcentage de la fenêtre de congestion qui peut
être utilisé par une unique trame TSO (TCP Segmentation Offload). La valeur
de ce paramètre est un compromis entre une transmission par rafales et
construire des trames avec un TSO plus importantes.
- tcp_tw_recycle (booléen ; désactivé par défaut ; de Linux 2.4 à Linux 4.11)
-
Activer le recyclage rapide des sockets TIME_WAIT. Activer cette option
n’est pas recommandé car l’IP distante peut ne pas incrémenter de manière
monotone les horodatages (périphériques derrière un NAT, périphériques avec
décalages d’horodatage par connexion). Consulter les RFC 1323 (PAWS) et
RFC 6191.
- tcp_tw_reuse (booléen ; désactivé par défaut ; depuis Linux 2.4.19/2.6)
-
Permettre de réutiliser les sockets TIME_WAIT pour les nouvelles connexions
quand c'est sûr du point de vue du protocole. Cela ne devrait pas être
modifié sans l'avis ou la demande d'experts techniques.
- tcp_vegas_cong_avoid (booléen ; désactivé par défaut ; Linux 2.2 à Linux 2.6.13)
-
Activer l'algorithme TCP Vegas d'évitement de congestion. TCP Vegas est une
modification côté émetteur de TCP qui anticipe la survenue de congestion en
estimant la bande passante. TCP Vegas ajuste la vitesse d'émission en
modifiant la fenêtre de congestion. TCP Vegas devrait diminuer la perte de
paquets, mais n'est pas aussi agressif que TCP Reno.
- tcp_westwood (booléen ; désactivé par défaut ; Linux 2.4.26/2.6.3 à Linux 2.6.13)
-
Activer l'algorithme TCP Westwood+ de contrôle de congestion. TCP Westwood+
est une modification côté émetteur de la pile de protocole TCP Reno qui
optimise la performance du contrôle de congestion TCP. Il est basé sur une
estimation de bande passante de bout en bout pour définir la fenêtre de
congestion et le seuil de redémarrage lent après un épisode de
congestion. Grâce à cette estimation, TCP Westwood+ définit de façon
adaptative un seuil de démarrage lent et une fenêtre de congestion qui
prennent en compte la bande passante utilisée au moment où la congestion se
produit. TCP Westwood+ augmente de façon significative l'équité par rapport
à TCP Reno dans les réseaux filaires, et le débit sur des liens sans fil.
- tcp_window_scaling (booléen ; activé par défaut ; depuis Linux 2.2)
-
Activer le dimensionnement de la fenêtre TCP (RFC 1323). Cette
fonctionnalité permet d'utiliser une grande fenêtre (> 64 Ko) sur une
connexion TCP si le correspondant la prend en charge. Normalement, les
16 bits du champ de largeur de fenêtre dans l'en-tête TCP limitent la taille
à moins de 64 Ko. Si des fenêtres plus grandes sont souhaitées,
l'application peut augmenter la taille de leurs tampons de socket et
l'option tcp_window_scaling sera utilisée. Si tcp_window_scaling est
désactivée, TCP ne négociera pas l'utilisation du dimensionnement des
fenêtres avec le correspondant lors de l'initialisation de la connexion.
- tcp_wmem (depuis Linux 2.4)
-
Il s'agit d'un vecteur de trois entiers : [min, default, max]. Ces
paramètres servent à TCP pour réguler la taille du tampon d'émission. La
taille est ajustée dynamiquement à partir de la valeur par défaut, dans
l'intervalle de ces valeurs, en fonction de la mémoire disponible.
-
- min
-
La taille minimale du tampon d'émission utilisé par chaque socket TCP. La
valeur par défaut est la taille des pages du système (sous Linux 2.4, la
valeur par défaut est de 4 Ko). Cette valeur assure qu'en mode de mémoire
« pressure », les allocations en dessous de cette taille réussiront. Elle
n'est pas utilisée pour limiter la taille du tampon d’émission déclarée en
utilisant l'option SO_SNDBUF sur un socket.
- default
-
La taille par défaut du tampon d'émission pour un socket TCP. Cette valeur
surcharge la taille par défaut de valeur globale
/proc/sys/net/core/wmem_default définie pour tous les protocoles. La
valeur par défaut est 16 Ko. Si une taille plus grande est désirée, il faut
augmenter cette valeur (pour affecter tous les sockets). Pour utiliser une
grande fenêtre TCP, /proc/sys/net/ipv4/tcp_window_scaling doit être
positionné à une valeur non nulle (par défaut).
- max
-
La taille maximale du tampon d'émission utilisée par chaque socket
TCP. Cette valeur ne surcharge pas la valeur globale qui se trouve dans
/proc/sys/net/core/wmem_max. Elle ne permet pas de limiter la taille du
tampon d’émission déclarée avec l'option SO_SNDBUF sur un socket. La
valeur par défaut est calculée avec la formule :
-
max(65536, min(4 MB, tcp_mem[1]*PAGE_SIZE/128))
-
Sous Linux 2.4, la valeur par défaut est de 128 Ko, réduite à 64 Ko sur
les systèmes avec peu de mémoire.
- tcp_workaround_signed_windows (booléen ; désactivé par défaut ; depuis Linux 2.6.26)
-
S'il est activé, supposer que l'absence de réception d'une option de
dimensionnement de la fenêtre signifie que la pile TCP distante n'est pas
correcte et traite la fenêtre comme une quantité signée. S'il est désactivé,
supposer que les piles TCP distantes ne sont jamais dysfonctionnelles même
si aucune option de dimensionnement de la fenêtre n'est reçue de leur part.
Options de socket
Pour lire ou écrire une option de socket TCP, appeler getsockopt(2) pour
la lecture ou setsockopt(2) pour l'écriture, avec l'argument niveau de
socket valant IPPROTO_TCP. Sauf mention contraire, optval est un
pointeur vers un int. De plus, la plupart des options de socket
IPPROTO_IP sont valables sur les sockets TCP. Pour plus de détails, voir
ip(7).
Voici une liste d’options de socket spécifiques à TCP. Pour des détails sur
les autres options applicables aux sockets TCP, consulter socket(7).
- TCP_CONGESTION (depuis Linux 2.6.13)
-
L’argument pour cette option est une chaîne. Cette option permet à
l’appelant de définir l’algorithme de contrôle de congestion TCP à utiliser
pour chaque socket. Les processus non privilégiés sont contraints d'utiliser
un des algorithmes de tcp_allowed_congestion_control (décrit
ci-dessus). Les processus privilégiés (CAP_NET_ADMIN) peuvent choisir
n’importe quel algorithme de contrôle de congestion disponible (consulter la
description de tcp_available_congestion_control ci-dessus).
- TCP_CORK (depuis Linux 2.2)
-
Ne pas envoyer de trames partielles. Toutes les trames partielles en attente
sont envoyées lorsque cette option est effacée à nouveau. Cela permet de
préparer les en-têtes avant d'appeler sendfile(2), ou pour optimiser le
débit. Avec l'implémentation actuelle, il y a une limite de
200 millisecondes au temps pendant lequel des données sont agrégées avec
TCP_CORK. Si cette limite est atteinte, les données mises en attente sont
automatiquement transmises. Cette option ne peut être combinée avec
TCP_NODELAY que depuis Linux 2.5.71. Cette option ne doit pas être
utilisée dans du code conçu pour être portable.
- TCP_DEFER_ACCEPT (depuis Linux 2.4)
-
Permettre à un processus en écoute de n'être réveillé que si des données
arrivent sur le socket. Cette option prend une valeur entière (en secondes),
correspondant au nombre maximal de tentatives que TCP fera pour terminer la
connexion. Cette option ne doit pas être utilisée dans du code conçu pour
être portable.
- TCP_INFO (depuis Linux 2.4)
-
Cette option est utilisée pour collecter des informations sur un socket. Le
noyau renvoie une structure struct tcp_info comme définie dans le fichier
/usr/include/linux/tcp.h. Cette option ne doit pas être utilisée dans du
code conçu pour être portable.
- TCP_KEEPCNT (depuis Linux 2.4)
-
Le nombre maximal de messages keepalive envoyés par TCP avant d'abandonner
une connexion. Cette option ne doit pas être utilisée dans du code conçu
pour être portable.
- TCP_KEEPIDLE (depuis Linux 2.4)
-
La durée (en secondes) d'inactivité sur une connexion avant que TCP commence
à envoyer les messages keepalive, si l'option SO_KEEPALIVE a été activée
sur le socket. Cette option ne doit pas être employée dans du code conçu
pour être portable.
- TCP_KEEPINTVL (depuis Linux 2.4)
-
Délai (en seconde) entre deux messages keepalive. Cette option ne doit pas
être utilisée dans du code conçu pour être portable.
- TCP_LINGER2 (depuis Linux 2.4)
-
La durée des sockets orphelins dans l'état FIN_WAIT2. Cette option peut
servir à surcharger la valeur du paramètre système du fichier
/proc/sys/net/ipv4/tcp_fin_timeout spécialement pour le socket. À ne pas
confondre avec l'option SO_LINGER du niveau socket(7). Cette option ne
doit pas être utilisée dans du code conçu pour être portable.
- TCP_MAXSEG
-
La taille maximale de segment pour les paquets TCP sortants. Dans Linux 2.2
et les versions précédentes, ainsi que dans Linux 2.6.28 et les versions
suivantes, si cette option est définie avant d'établir la connexion, elle
modifie également la valeur MSS annoncée à l'autre extrémité, dans le paquet
initial. Les valeurs supérieures au MTU de l'interface sont ignorées et
n'ont pas d'effet. TCP imposera ses limites minimales et maximales plutôt
que les valeurs fournies.
- TCP_NODELAY
-
Désactiver l'algorithme Nagle. Cela signifie que les segments seront envoyés
dès que possible, même s'il n'y a que très peu de données. Sinon, les
données sont conservées jusqu'à ce qu'il y en ait un nombre suffisant, pour
éviter d'envoyer de fréquents petits paquets, au détriment du réseau. Cette
option est moins prioritaire que TCP_CORK. Cependant, activer cette
option force un vidage des données actuellement en attente, même si
TCP_CORK est actif.
- TCP_QUICKACK (depuis Linux 2.4.4)
-
Valider le mode quickack, ou l'inhiber si l'option est retirée. En mode
quickack, les acquittements sont envoyés immédiatement plutôt que retardés
si besoin par rapport au fonctionnement normal de TCP. Cet attribut n'est
pas permanent, il s'agit seulement d'un basculement vers ou depuis le mode
quickack. Les opérations ultérieures du protocole TCP feront à nouveau
entrer/quitter le mode quickack en fonction des traitements internes du
protocole et de facteurs tels que les délais d'acquittements retardés, ou
les transferts de données. Cette option ne doit pas être utilisée dans du
code conçu pour être portable.
- TCP_SYNCNT (depuis Linux 2.4)
-
Indiquer le nombre de retransmissions de SYN que TCP doit envoyer avant
d'annuler la tentative de connexion. Ne doit pas dépasser 255. Cette option
ne doit pas être utilisée dans du code conçu pour être portable.
- TCP_USER_TIMEOUT (depuis Linux 2.6.37)
-
Cette option prend un unsigned int en argument. Quand la valeur est
strictement positive, elle indique la durée maximale en milliseconde pendant
laquelle les données transmises peuvent rester sans acquittement ou que les
données en tampon demeurent non transmises (à cause d’une taille de fenêtre
égale à zéro) avant que TCP ne force la fermeture de connexion
correspondante et renvoie ETIMEDOUT à l’application. Si la valeur
d’option indiquée est 0, TCP utilisera la valeur par défaut du système.
-
Augmenter les délais par utilisateur permet à une connexion TCP de survivre
pendant une période plus importante sans connectivité directe. Diminuer les
délais par utilisateur permet aux applications d’« échouer rapidement » si
nécessaire. Sinon, les échecs peuvent prendre jusqu’à 20 minutes avec les
valeurs par défaut actuelles du système dans un environnement WAN normal.
-
Cette option peut être définie pendant n’importe quel état d’une connexion
TCP, mais n’est effective que pendant les états synchronisés d’une connexion
(ESTABLISHED, FIN-WAIT-1, FIN-WAIT-2, CLOSE-WAIT, CLOSING et LAST-ACK). De
plus, lorsqu’elle est utilisée avec l’option TCP keepalive
(SO_KEEPALIVE), TCP_USER_TIMEOUT écrasera keepalive pour déterminer
quand fermer une connexion à cause d’une erreur keepalive.
-
L’option est sans effet lorsque TCP retransmet un paquet ou quand un message
keepalive est envoyé.
-
Cette option, comme bien d’autres, sera héritée par le socket renvoyé par
accept(2) s'il était défini sur le socket d’écoute.
-
De plus amples précisions sur la fonctionnalité de délai par utilisateur
sont disponibles dans les RFC 793 et RFC 5482 (« TCP User Timeout Option »).
- TCP_WINDOW_CLAMP (depuis Linux 2.4)
-
Limiter la taille de la fenêtre annoncée à cette valeur. Le noyau impose une
taille minimale de SOCK_MIN_RCVBUF/2. Cette option ne doit pas être employée
dans du code conçu pour être portable.
- TCP_FASTOPEN (depuis Linux 3.6)
-
Cette option active Fast Open (RFC 7413) sur le socket d’écoute. La valeur
spécifie la taille maximale des SYN en attente (similaire à l’argument de
file d’accumulation dans listen(2)). Une fois activée, le socket d’écoute
avertit le cookie TCP Fast Open des SYN entrants ayant l’option TCP Fast
Open.
-
Plus important, il accepte les données dans SYN avec un cookie Fast Open
valable et répond par un acquittement SYN-ACK pour les données et la
séquence SYN. accept(2) renvoie un socket pouvant être lu et écrit quand
l’établissement de la connexion (handshake) n’est pas encore
terminé. L’échange de données peut ainsi débuter avant la fin de cet
établissement. Cette option requiert l’activation de la prise en charge côté
serveur de sysctl net.ip4.tcp_fastopen (voir au-dessus). Pour la prise en
charge de Fast Open côté client, consulter MSG_FASTOPEN ou
TCP_FASTOPEN_CONNECT de send(2) ci-dessous.
- TCP_FASTOPEN_CONNECT (depuis Linux 4.11)
-
Cette option active un moyen de remplacement pour utiliser Fast Open sur le
coté actif (client). Quand cette option est activée, connect(2) se
comportera différemment selon qu’un cookie Fast Open est disponible ou non
pour la destination.
-
Si un cookie n’est pas disponible (c’est-à-dire pour le premier contact avec
la destination), connect(2) se comporte comme d’habitude en envoyant un
SYN immédiatement, sauf que le SYN inclura un cookie Fast Open vide pour
solliciter un cookie.
-
Si un cookie est disponible, connect(2) renvoie 0 immédiatement, mais
la transmission du SYN est reportée. Un write(2) ou sendmsg(2)
subséquent déclenchera un SYN avec données et cookie dans l’option Fast
Open. En d’autres mots, la connexion réelle est reportée jusqu’à ce que des
données soient fournies.
-
Remarque : bien que cette option soit conçue pour plus de commodité, son
activation ne changera pas les comportements et certains appels système
peuvent définir des valeurs errno différentes. Si le cookie est présent,
write(2) ou sendmsg(2) doivent être appelées juste après connect(2)
dans le but d’envoyer SYN + données pour achever les trois étapes de
connexion (three-way-handshake – 3WHS) et établir la connexion. Si on
appelle read(2) juste après connect(2) sans write(2), le socket
bloquant sera bloqué à jamais.
-
L’application devrait soit définir l’option de socket
TCP_FASTOPEN_CONNECT avant write(2) ou sendmsg(2), ou appeler
write(2) ou sendmsg(2) avec l’attribut MSG_FASTOPEN directement, au
lieu des deux sur la même connexion.
-
Voici le flux typique d’appel avec cette nouvelle option.
-
s = socket();
setsockopt(s, IPPROTO_TCP, TCP_FASTOPEN_CONNECT, 1, ...);
connect(s);
write(s); /* write() doit toujours suivre connect()
* dans le but de déclencher l’émission de SYN */
read(s)/write(s);
/* ... */
close(s);
API des sockets
TCP fourni une prise en charge limitée des données hors-bande, sous la forme
de données urgentes (un seul octet). Sous Linux cela signifie que si l'autre
côté envoie de nouvelles données hors-bande, les données urgentes plus
anciennes sont insérées comme des données normales dans le flux (même quand
SO_OOBINLINE n'est pas actif). Cela diffère des piles basées sur BSD.
Linux utilise par défaut l’interprétation compatible BSD du champ de
pointeur de données urgentes, ce qui viole la RFC 1122, mais est
indispensable pour l'interopérabilité avec les autres piles. On peut
modifier ce comportement avec /proc/sys/net/ipv4/tcp_stdurg.
Il est possible de jeter un coup d'œil aux données hors-bande en utilisant
l'attribut MSG_PEEK de recv(2).
Depuis Linux 2.4, Linux prend en charge l'utilisation de MSG_TRUNC dans
le paramètre flags de recv(2) (et recvmsg(2)). Cet attribut a pour
effet que les octets de données reçus sont ignorés, plutôt que transmis au
tampon fourni par l'appelant. Depuis Linux 2.4.4, MSG_TRUNC a également
cet effet lorsqu'il est combiné à MSG_OOB pour recevoir les données
hors-bande.
Ioctls
Les appels ioctl(2) suivants renvoient des informations dans value. La
syntaxe correcte est :
-
int valeur;
erreur = ioctl(tcp_socket, ioctl_type, &valeur);
ioctl_type est l'une des valeurs suivantes :
- SIOCINQ
-
Renvoi de la quantité de données non lues en attente dans le tampon de
réception. Le socket ne doit pas être dans l'état LISTEN, sinon l'erreur
EINVAL est renvoyée. SIOCINQ est défini dans
<linux/sockios.h>. Une alternative est d'utiliser le synonyme
FIONREAD, défini dans <sys/ioctl.h>.
- SIOCATMARK
-
Renvoi de vrai (c'est-à-dire une valeur non nulle) si le flux de données
entrantes est à la marque de données urgentes.
-
Si l'option de socket SO_OOBINLINE est activée et SIOCATMARK renvoie
vrai, la prochaine lecture sur le socket renverra les données urgentes. Si
l'option SO_OOBINLINE n'est pas activée et SIOCATMARK renvoie vrai, la
prochaine lecture sur le socket renverra les octets suivant les données
urgentes (pour réellement lire les données urgentes, il faut utiliser
l'option l’attribut recv(MSG_OOB)).
-
Notez qu'une lecture ne lit jamais de part et d'autre de la marque de
données urgentes. Si une application est informée de la présence de données
urgentes avec select(2) (en utilisant l'argument exceptfds) ou par la
réception du signal SIGURG, elle peut avancer jusqu'à la marque avec une
boucle qui teste de façon répétée SIOCATMARK et fait une lecture
(demandant un nombre quelconque d'octets) tant que SIOCATMARK renvoie
faux.
- SIOCOUTQ
-
Renvoi de la quantité de données non envoyées en attente dans la file
d’attente d'émission de socket. Le socket ne doit pas être dans l'état
LISTEN, sinon l'erreur EINVAL est renvoyée. SIOCOUTQ est défini dans
<linux/sockios.h>. Alternativement, on peut utiliser le synonyme
TIOCOUTQ, défini dans <sys/ioctl.h>.
Traitement des erreurs
Quand une erreur réseau se produit, TCP tente de renvoyer le paquet. S'il ne
réussit pas après un certain temps, soit ETIMEDOUT soit la dernière
erreur reçue sur la connexion est renvoyée.
Certaines applications demandent une notification d'erreur plus rapide. Cela
peut être activé avec l'option de socket IP_RECVERR de niveau
IPPROTO_IP. Quand cette option est active, toutes les erreurs arrivant
sont immédiatement passées au programme utilisateur. Employez cette option
avec précaution, elle rend TCP moins tolérant aux modifications de routage
et autres conditions réseau normales.
ERREURS
- EAFNOTSUPPORT
-
Le type d'adresse du socket passé dans sin_family n'était pas AF_INET.
- EPIPE
-
L'autre extrémité a fermé inopinément le socket ou une lecture est tentée
sur un socket fermé.
- ETIMEDOUT
-
L'autre côté n'a pas acquitté les données retransmises après un certain
délai.
Toutes les erreurs définies dans ip(7) ou au niveau générique des sockets
peuvent aussi être renvoyées pour TCP.
VERSIONS
Les prises en charge de notification explicite de congestion, de
sendfile(2) sans copie, du réordonnancement et de certaines extensions
SACK (DSACK) ont été introduites dans Linux 2.4. La prise en charge du
Forward Acknowledgement (FACK), le recyclage de TIME_WAIT et les options
keepalive des sockets par connexion ont été introduits dans Linux 2.3.
BOGUES
Toutes les erreurs ne sont pas documentées.
IPv6 n'est pas décrit.
VOIR AUSSI
accept(2), bind(2), connect(2), getsockopt(2), listen(2),
recvmsg(2), sendfile(2), sendmsg(2), socket(2), ip(7),
socket(7)
Le fichier source du noyau Documentation/networking/ip-sysctl.txt.
RFC 793 pour les spécifications TCP.
RFC 1122 pour les nécessités TCP et une description de l'algorithme Nagle.
RFC 1323 pour les options d'horodatage et de dimensionnement de fenêtre
TCP.
RFC 1337 pour une description des risques surnommés « TIME_WAIT
assassination hazards ».
RFC 3168 pour une description de la notification explicite de congestion.
RFC 2581 pour des algorithmes de contrôle de congestion TCP.
RFC 2018 et RFC 2883 pour SACK et ses extensions.
TRADUCTION
La traduction française de cette page de manuel a été créée par
Christophe Blaess <https://www.blaess.fr/christophe/>,
Stéphan Rafin <stephan.rafin@laposte.net>,
Thierry Vignaud <tvignaud@mandriva.com>,
François Micaux,
Alain Portal <aportal@univ-montp2.fr>,
Jean-Philippe Guérard <fevrier@tigreraye.org>,
Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>,
Julien Cristau <jcristau@debian.org>,
Thomas Huriaux <thomas.huriaux@gmail.com>,
Nicolas François <nicolas.francois@centraliens.net>,
Florentin Duneau <fduneau@gmail.com>,
Simon Paillard <simon.paillard@resel.enst-bretagne.fr>,
Denis Barbier <barbier@debian.org>,
David Prévot <david@tilapin.org>
et
Jean-Paul Guillonneau <guillonneau.jeanpaul@free.fr>
Cette traduction est une documentation libre ; veuillez vous reporter à la
GNU General Public License version 3
concernant les conditions de copie et
de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.
Si vous découvrez un bogue dans la traduction de cette page de manuel,
veuillez envoyer un message à
Index
- NOM
-
- SYNOPSIS
-
- DESCRIPTION
-
- Formats d'adresse
-
- /proc interfaces
-
- Options de socket
-
- API des sockets
-
- Ioctls
-
- Traitement des erreurs
-
- ERREURS
-
- VERSIONS
-
- BOGUES
-
- VOIR AUSSI
-
- TRADUCTION
-
This document was created by
man2html,
using the manual pages.
Time: 05:06:38 GMT, September 19, 2025