Section: Manual del Programador de Linux (7)
Updated: 25 abril 1999
Index Return to Main
Contents
Ésta es una implementación del protocolo TCP definido en RFC793, RFC1122 y RFC2001 con las extensiones NewReno y SACK. Proporciona una conexión bidireccional, fiable y orientada a conexión entre dos conectores encima de ip(7). TCP garantiza que los datos llegan en orden y retransmite los paquetes perdidos. Genera y comprueba una suma de verificación por paquete para detectar errores de transmisión. TCP no conserva los límites entre registros.
Un conector TCP recién creado no tiene ni dirección remota ni local y no está totalmente especificado. Para crear una conexión TCP de salida use connect(2) para establecer una conexión con otro conector TCP. Para recibir nuevas conexiones de entrada, primero enlace el conector a una dirección local y puerto mediante bind(2) y a continuación llame a listen(2) para colocar el conector en estado de escucha. Después de esto, se puede aceptar un nuevo conector para cada conexión de entrada usando accept(2). Un conector sobre el que se han ejecutado con éxito accept o connect está totalmente especificado y puede transmitir datos. No se pueden transmitir datos a través de conectores en estado de escucha o no conectados todavía.
La versión 2.2 de Linux soporta las extensiones RFC1323 para TCP de alto rendimiento. Éstas incluyen grandes ventanas TCP para soportar enlaces con una alta latencia o gran ancho de banda. Para usarlas, se deben incrementar los tamaños de los buffers de envío y recepción. Se pueden configurar globalmente con las sysctls net.core.wmem_default y net.core.rmem_default, o para cada conector individual mediante las opciones de conector SO_SNDBUF y SO_RCVBUF. Los tamaños máximos de los buffers de los conectores están limitados por las sysctls globales net.core.rmem_max y net.core.wmem_max. Vea socket(7) para más información.
TCP soporta datos urgentes. Los datos urgentes se usan para indicar al receptor que algún mensaje importante es parte del flujo de datos y que debe ser procesado tan pronto como sea posible. Para enviar datos urgentes, especifique la opción MSG_OOB en send(2). Cuando se reciben datos urgentes, el núcleo envía una señal SIGURG al proceso lector o al proceso o grupo de procesos que han sido configurados para el conector usando la ioctl FIOCSPGRP o FIOCSETOWN. Cuando la opción de conector SO_OOBINLINE está activa, los datos urgentes se colocan en el flujo normal de datos (y se pueden examinar mediante la ioctl SIOCATMARK). En otro caso, sólo se pueden recibir cuando se ha configurado la opción MSG_OOB en sendmsg(2).
TCP está construido encima de IP (vea ip(7)). Los formatos de dirección definidos por ip(7) se aplican a TCP. TCP sólo soporta comunicaciones punto a punto. La difusión y el envío multidestino no están soportados.
Estas sysctls pueden ser accededida mediante los ficheros /proc/sys/net/ipv4/* o con la interfaz sysctl(2). Además, las mayoría de las sysctls de IP también se aplican a TCP. Vea ip(7).
Para establecer u obtener la opción de un conector TCP, llame a getsockopt(2) para leerla o a setsockopt(2) para escribirla, asignando SOL_TCP. al argumento de la familia del conector. Además, la mayoría de las opciones de conector SOL_IP son válidas para conectores TCP. Para más información vea ip(7).
Estas ioctls pueden ser accedidas usando ioctl(2). La sintaxis correcta es:
int value; error = ioctl(tcp_socket, ioctl_type, &value);
Cuando se produce un error de red, TCP intenta reenviar el paquete. Si no tiene éxito después de un cierto tiempo, informa o bien de un error ETIMEDOUT o bien del último error recibido sobre esta conexión.
Algunas aplicaciones necesitan una notificación más rápida del error. Esto se puede hacer con la opción de conector IP_RECVERR del nivel SOL_IP. Cuando se activa esta opción, todos los errores de entrada son pasado inmediatamente al programa de usuario. Use esta opción con cuidado (hace que TCP sea menos tolerante a cambios de enrutamiento y a otras condiciones de red normales).
Cuando se produce un error, al configurar una conexión, durante la escritura en un conector, sólo se produce una señal SIGPIPE cuando está activa la opción de conector SO_KEEPOPEN.
TCP no posee verdaderos datos fuera de orden, posee datos urgentes. En Linux esto significa que si el otro extremo envía datos fuera de orden recientes, los anteriores datos urgentes se insertarán como datos normales en el flujo (incluso cuando SO_OOBINLINE no está activa). Esto difiere de las pilas de protocolo basadas en BSD.
Linux usa por defecto una interpretación del campo puntero urgente compatible con BSD. Esto viola el RFC1122 pero se necesita por interoperatividad con otras pilas. Se puede cambiar con la sysctl tcp_stdurg.
TCP también puede devolver cualquier error definido por ip(7) o la capa de conectores genéricos.
No se han documentado todos los errores.
No se ha descrito IPv6.
No se han descrito las opciones de proxy transparente.
Las sysctls son nuevas en la versión 2.2 de Linux. IP_RECVERR es una característica nueva de la versión 2.2 de Linux. TCP_CORK es nueva en la versión 2.2.
(7),
socket(2),
ip(7),
sendmsg(2),
recvmsg(2).
RFC793 para la especificación de TCP.
RFC1122 para los requisitos de TCP y una descripción del algoritmo
Nagle.
RFC2001 para algunos algoritmos de TCP.
This document was created by man2html, using
the manual pages.
Time: 06:16:29 GMT, January 22, 2005