tcp | Début | Suivant | Sommaire | Préc.page.lue | Accueil |
NOM | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
SYNOPSIS | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
DESCRIPTION | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
Une socket TCP nouvellement créée n'a pas d'adresse locale ou distante et n'est pas complètement définie. Pour créer une connexion TCP sortante, utilisez connect(2) pour établir la connexion sur une autre socket TCP. Pour recevoir les connexions entrantes, attachez d'abord la socket avec bind(2) à une adresse locale et un port, puis appelez listen(2) pour mettre la socket dans un état d'attente. Après cela, une nouvelle socket peut être obtenue pour chaque connexion entrante en utilisant accept(2). Une socket sur laquelle on a appelé accept(2) ou connect(2) avec succès est complètement définie et peut transmettre des données. Les données ne peuvent pas circuler sur les sockets en attente ou non connectées.
Linux 2.2 supporte les extensions TCP à hautes performances RFC 1323. Cela inclut les fenêtres TCP larges pour supporter les liaisons avec une latence ou une bande passante élevées. Pour les utiliser, les tailles des tampons d'émission et de réception doivent être augmentées. On peut les fixer globalement avec les sysctls net.ipv4.tcp_wmem et net.ipv4.tcp_rmem ou individuellement sur les sockets avec les options SO_SNDBUF et SO_RCVBUF de l'appel système setsockopt(2).
Les tailles maximales pour les tampons déclarés via SO_SNDBUF et SO_RCVBUF sont limitées par les sysctls généraux net.core.rmem_max et net.core.wmem_max Notez que TCP alloue en fait deux fois plus de place que la taille demandée avec l'appel setsockopt(2), et qu'un appel getsockopt(2) réussi ne renverra pas la même taille de tampon que celle réclamée dans le setsockopt(2). TCP utilise l'esapce supplémentaire à des fins administratives et pour des structures internes du noyau, et les variables sysctls renvoient des tailles supérieures à celle des véritables fenêtres TCP. Pour les connexions individuelles, la taille du tampon doit être fixée avant les appels listen(2) ou connect(2) pour qu'elle soit prise en compte. Voir socket(7) pour plus de détails.
TCP supporte les données urgentes. Elles signalent au récepteur qu'un message important est dans le flux de données et qu'il doit être traité le plus tôt possible. Pour envoyer des données urgentes, indiquez l'option MSG_OOB de send(2). Quand des données urgentes sont reçues, le noyau envoie un signal SIGURG au processus ou au groupe de processus qui a été indiqué pour la socket « propriétaire » avec les ioctls SIOCSPGRP ou FIOCSETOWN (ou l'opération, spécifiée par POSIX.1-2001, F_SETOWN de la fonction fcntl(2).
Quand l'option de socket SO_OOBINLINE est validée, les données urgentes sont mises dans le flux de données normal (un programme peut tester sa localisation avec l'ioctl SIOCATMARK décrit plus loin), sinon, on ne peut les recevoir que lorsque l'attribut MSG_OOB et positionné pour recv(2) et recvmsg(2).
Linux 2.4 a introduit un certain nombre de changements pour améliorer le débit et l'extensibilité, ainsi que des fonctionnalités améliorées. Certaines de ces fonctions incluent le support pour l'émission sans copie avec sendfil(2), la notification de congestion explicite, la nouvelle gestion des sockets TIME_WAIT, les options "keep-alive" et le support des extensions SACK dupliqués.
Formats d'adressee | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
Sysctls | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
L'espace du tampon de réception de la socket est partagé entre l'application et le noyau. TCP conserve une portion du tampon en tant que fenêtre TCP, c'est la taille de la fenêtre de réception indiquée au correspondant. Le reste de cet espace est utilisé comme tampon d'"application", pour isoler le réseau des latences de l'ordonnanceur et de l'application. La valeur par défaut de tcp_adv_win_scale indique que l'espace utilisé pour le tampon d'application est un quart de l'espace total.
Un maximum de (fenetre/2^tcp_app_win, mss) octets de la fenêtre est réservé pour le tampon d'application. Une valeur nulle indique qu'aucune portion n'est réservée.
Notez que les délais de la couche de transport sous-jacente, ou de l'application peuvent être bien plus courts. tcp_low_latency (booléen ; valeur par défaut : activé) Si elle est active, la pile TCP prendra des décisions afin de préférer une faible latence à un débit élevé. Si elle est désactivée, le débit élevé sera préféré. L'exemple d'une application ou la valeur par défaut devrait être modifiée est le cluster Beowulf.
bas - TCP ne cherche pas à réguler ses allocations mémoire quand le nombre de pages qu'il a alloué est en-dessous de ce nombre
charge - lorsque la taille mémoire allouée par TCP dépasse ce nombre de pages, TCP modère sa consommation mémoire. L'état de mémoire chargée se termine lorsque le nombre de pages allouées descend en dessous de la marque bas.
haut - le nombre global maximal de pages que TCP allouera. Cette valeur surcharge tout autre limite imposée par le noyau.
min - taille minimale du tampon de réception utilisée par chaque socket TCP. La valeur par défaut 4 Ko et descend à PAGE_SIZE octets sur les systèmes avec peu de mémoire. Cette valeur assure qu'en mode de mémoire chargée, les allocations en-dessous de cette taille réussiront. Elle n'est pas utilisée pour limiter la taille du tampon de réception, déclarée en utilisant l'option SO_RCVBUF sur la socket.
défaut - la taille par défaut du tampon de réceptiion pour une socket TCP. Cette valeur écrase la taille par défaut dans la valeur globale net.core.rmem_defautl définie pour tous les protocoles. La valeur par défaut est 87380 octets, et descend à 43689 sur les systèmes avec peu de mémoire. Si une taille plus grande est désirée, il faut augmenter cette valeur (pour affecter toutes les sockets). Pour utiliser une grande fenêtre TCP, l'option net.ipv4.tcp_window_scaling doit être activé (par défaut).
max - la taille maximale du tampon de réception utilisé par chaque socket TCP. Cette valeur ne surcharge pas la valeur globale net.core.rmem_max. Elle ne permet pas de limiter la taille du tampon de réception déclarée avec l'option SO_RCVBUF sur la socket. La valeur par défaut est 87380*2 octets et peut descendre à 87380 sur les systèmes avec peu de mémoire.
min - taille minimale du tampon d'émission utilisé par chaque socket TCP. La valeur par défaut est 4 Ko. Cette valeur assure qu'en mode de mémoire chargée, les allocations en-dessous de cette taille réussiront. Elle n'est pas utilisée pour limiter la taille du tampon de réception, déclarée en utilisant l'option SO_SNDBUF sur la socket.
défaut - la taille par défaut du tampon d'émission pour une socket TCP. Cette valeur écrase la taille par défaut dans la valeur globale net.core.wmem_defautl définie pour tous les protocoles. La valeur par défaut est 16 Ko. Si une taille plus grande est désirée, il faut augmenter cette valeur (pour affecter toutes les sockets). Pour utiliser une grande fenêtre TCP, la variable net.ipv4.tcp_window_scaling doit être activé (par défaut).
max - la taille maximale du tampon d'émission utilisé par chaque socket TCP. Cette valeur ne surcharge pas la valeur globale net.core.rmem_max. Elle ne permet pas de limiter la taille du tampon de réception déclarée avec l'option SO_SNDBUF sur la socket. La valeur par défaut est 128 Ko et peut descendre à 64 Ko sur les systèmes avec peu de mémoire.
Options des sockets | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
Ioctls | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
int value; error = ioctl(tcp_socket, ioctl_type, &value);
Notez qu'une lecture ne va jamais à travers une marque urgente. Si une application est informée de la présence de données urgentes via select(2) (en utilisant l'attribut exceptfds) ou à travers la délivrance d'un signal SIGURG, elle peut avancer jusqu'à la marque en utilisant une boucle qui teste de manière répétitive SIOCATMARK et effectue une lecture (demandant tous les octets) aussi longtemps que SIOCATMARK renvoie faux.
Gestion d'erreur | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
Certaines application demande une notification d'erreur plus rapide. Ceci peut être validé avec l'option de socket IP_RECVERR de niveau IPPROTO_IP. Quand cette option est active, toutes les erreurs arrivant sont immédiatement passées au programme utilisateur. Employez cette option avec précaution, elle rend TCP moins tolérant envers les modifications de routage et autres conditions réseau normales.
ERREURS | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
Toutes les erreurs définies dans ip(7) ou au niveau générique des sockets peuvent aussi se produire avec TCP.
VERSIONS | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
Les valeurs par défaut et les descriptions des variables sysctls décrites ci-dessus sont applicables pour les noyaux 2.4.
NOTES | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
Linux utilise par défaut une interprétation compatible BSD du champ Urgent-Pointer. Ceci viole la RFC 1122, mais est indispensable pour l'interopérabilité avec les autres piles. On peut modifier ce comportement avec le sysctl tcp_stdurg.
BOGUES | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
VOIR AUSSI | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
RFC 793 pour les spécifications TCP.
RFC 1122 pour les nécessités TCP et une description
de l'algorithme Nagle.
RFC 1323 pour les options d'horodatage et la fenêtre TCP.
RFC 1644 pour une description des dangers
de TIME_WAIT.
RFC 3168 pour une description de la notification explicite
de congestion.
RFC 2581 pour des algorithmes de contrôle de congestion TCP.
RFC 2018 et RFC 2883 pour SACK et ses extensions.
TRADUCTION | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
Ce document est une traduction réalisée par Christophe Blaess <http://www.blaess.fr/christophe/> le 11 juin 2001 et révisée le 8 janvier 2008.
L'équipe de traduction a fait le maximum pour réaliser une adaptation française de qualité. La version anglaise la plus à jour de ce document est toujours consultable via la commande : « LANG=C man 7 tcp ». N'hésitez pas à signaler à l'auteur ou au traducteur, selon le cas, toute erreur dans cette page de manuel.
Sommaire | Début | Suivant | Sommaire | Préc.page.lue | Accueil |
Table des mots clés | Début | Suivant | Sommaire | Préc.page.lue | Accueil |