#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/tcp.h>
tcp_socket = socket(AF_INET, SOCK_STREAM, 0);
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)
.
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.
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/2^tcp_adv_win_scale, si
tcp_adv_win_scale est supérieur à 0 ;
ou bytes-bytes/2^(-tcp_adv_win_scale), si tcp_adv_win_scale
est inférieur ou égal à zéro.
- L'espace du tampon de réception 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/2^tcp_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.
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);
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.
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>.
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.
- 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.
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.
Toutes les erreurs ne sont pas documentées.
IPv6 n'est pas décrit.
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.
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 à
debian-l10n-french@lists.debian.org.