tcp(7)

NOMBRE
tcp - Protocolo TCP

SINOPSIS
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/tcp.h>

tcp_socket = socket(AF_INET, SOCK_STREAM, 0);

DESCRIPCIÓN
Ésta es una implementación del protocolo TCP definido en RFC 793, RFC 1122 y RFC 2001 con las extensiones NewReno y SACK. Proporciona una conexión bidireccional, fiable y orientada a conexión entre dos conectores (“sockets”) encima de ip(7), tanto para la versión 4 como para la versión 6. 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 socket TCP recién creado no tiene dirección remota ni local ni está completamente definido. Para crear una conexión TCP saliente con otro socket TCP, se utiliza connect(2). Para recibir nuevas conexiones entrantes, primero conecte el socket con bind(2) a una dirección y puerto locales y luego invoque a listen(2) para que esté a la escucha. Posteriormente, se puede aceptar un nuevo socket para cada conexión entrante mediante accept(2). Un socket al que se le ha llamado correctamente accept(2) o connect(2) está completamente definido y ya puede transmitir datos. No se podrán transmitir datos en sockets que estén a la escucha o que aún no están conectados.

Linux admite extensiones TCP de alto rendimiento RFC 1323. Estas incluyen la Protección contra Números de Secuencia Encapsulados (PAWS), el Escalado de Ventanas y las Marcas de Tiempo. El escalado de ventanas permite el uso de ventanas TCP grandes (por ejemplo, 64 kB) para admitir enlaces con alta latencia o gran ancho de banda. Para aprovecharlas, será necesario aumentar el tamaño del búfer de envío y recepción. Estos se pueden configurar globalmente con los archivos /proc/sys/net/ipv4/tcp_wmem e /proc/sys/net/ipv4/tcp_rmem, o en sockets individuales mediante las opciones de socket SO_SNDBUF y SO_RCVBUF con la llamada setsockopt(2).

Los tamaños máximos de los búferes de socket declarados mediante los mecanismos SO_SNDBUF y SO_RCVBUF están limitados por los valores de los archivos /proc/sys/net/core/rmem_max e /proc/sys/net/core/wmem_max. Tenga en cuenta que TCP asigna el doble del tamaño del búfer solicitado en la llamada setsockopt(2), por lo que una llamada getsockopt(2) posterior no devolverá el mismo tamaño de búfer solicitado en la llamada setsockopt(2). TCP utiliza el espacio adicional para fines administrativos y para las estructuras internas del núcleo. Los valores del archivo /proc reflejan los tamaños mayores en comparación con las ventanas TCP reales. En conexiones individuales, el tamaño del búfer del socket debe configurarse antes de las llamadas listen(2) o connect(2) para que surta efecto. Consulte socket(7) para obtener más información.

TCP admite datos urgentes. Los datos urgentes se utilizan para indicar al receptor que algún mensaje importante forma parte del flujo de datos y que debe procesarse lo antes posible. Para enviar datos urgentes, debe indicarse la opción MSG_OOB en send(2). Cuando se reciben datos urgentes, el núcleo envía una señal SIGURG al proceso o grupo de procesos configurado como «propietario» del socket mediante las ioctls SIOCSPGRP o FIOSETOWN (o la operación fcntl(2) F_SETOWN definida en POSIX.1). Cuando la opción de socket SO_OOBINLINE está habilitada, los datos urgentes se introducen en el flujo de datos normal (un programa podrá comprobar su ubicación mediante la ioctl SIOCATMARK que se describe más adelante); de lo contrario, solo se pueden recibir cuando el indicador MSG_OOB está configurado para recv(2) o recvmsg(2).

Cuando existan datos obsoletos, select(2) señala el descriptor de archivo como en condiciones ecepcionales y poll (2) indica un evento POLLPRI.

La versión 2.4 de Linux introdujo varios cambios para mejorar el rendimiento y la escalabilidad, además de una funcionalidad mejorada. Algunas de estas características incluyen soporte para llamadas sendfile(2) sin copias internas de datos, Notificación Explícita de Congestión, nueva gestión de conectores TIME_WAIT, opciones “keep-alive” y soporte para extensiones de SACK Duplicados.

  Formato de las direcciones
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.

  Interfaces /proc
Es posible acceder a los parámetros TCP aplicables a todo el sistema a través del archivo /proc/sys/net/ipv4/. También muchas interfaces IP en /proc son aplicables también a TCP, consulte ip(7). Las variables de tipo Booleano pueden tomar un valor entero distinto de cero ("verdadero") para indicar que la opción correspondiente está activada o un valor cero ("falso") para indicar que está inactiva.

tcp_abc (Enterio; por defecto:0; Linux 2.6.15 hasta Linux 3.8)
    Controla el recuento de bytes apropiado (ABC), definido en el RFC 3465. ABC es una forma de aumentar la ventana de congestión (cwnd) más lentamente en respuesta a acuses de recibo parciales. Los valores posibles son:

    0   Incrementa cwnd una vez por cada confirmación (sin ABC)

    1   Incrementa cwnd una vez por cada confirmación de segmento completo

    2   Permite incrementar cwnd en dos si la confirmación es de dos segmentos para compensar las confirmaciones con retraso.

tcp_abort_on_overflow (Booleano; predeterminado: deshabilitado; a partir de Linux 2.4)
    Activa el reinicio de conexiones si el servicio que escucha es demasiado lento y es incapaz de continuar y aceptarlas. Significa que si se produjera un desbordamiento debido a una ráfaga de datos, la conexión se recuperará. Active esta opción sólo si verdaderamente está seguro de que el demonio que escucha no puede ser ajustado para aceptar conexiones más rápidamente. Activar esta opción puede perjudicar a los clientes de su servidor.

tcp_adv_win_scale (Entero; predeterminado: 2; a partir de Linux 2.4)
    Contabiliza la sibrecarga del buffer como bytes/2^tcp_adv_win_scale, si tcp_adv_win_scale es mayor que cero o bien bytes-bytes/2^(-tcp_adv_win_scale), si tcp_adv_win_scale es menor o igual a cero.

    El espacio del buffer de recepción del conector se comparte entre la aplicación y el núcleo. TCP mantiene parte del buffer como ventana TCP; éste es el tamaño de la ventana de recepción que se comunica al otro extremo. El resto del espacio se usa como “buffer de aplicación”, usado para aislar a la red de latencias de planificación y de la aplicación. El valor 2 por omisión de tcp_adv_win_scale implica que el espacio usado para el buffer de aplicación es un cuarto del total.

tcp_allowed_congestion_control (Cadena; predeterminado: ver texto; a partir de Linux 2.4.20)
    Muestra/configura las opciones del algoritmo de control de congestión disponibles para procesos sin privilegios (consulte la descripción de la opción de socket TCP_CONGESTION). Los elementos de la lista se separan por espacios en blanco y terminan con un carácter de nueva línea. La lista es un subconjunto de las que se listan en tcp_available_congestion_control. El valor predeterminado de esta lista es «reno» más la configuración predeterminada de tcp_congestion_control.

tcp_autocorking (Booleano; por defecto: activado; desde Linux 3.14)
    Si esta opción está habilitada, el núcleo intenta fusionar mensajes pequeños (de llamadas consecutivas a write(2) y sendmsg(2)) tanto como sea posible para reducir el número total de paquetes enviados. La fusión se realiza si al menos un paquete previo del flujo está esperando en las colas de Qdisc o en la cola de transmisión del dispositivo. Las aplicaciones aún pueden usar la opción de socket TCP_CORK para obtener un comportamiento óptimo cuando saben cómo/cuándo desconectan sus sockets.

tcp_available_congestion_control (Cadena; solo lectura; a partir de Linux 2.4.20)
    Muestra una lista de los algoritmos de control de congestión registrados. Los elementos de la lista están separados por espacios en blanco y terminan con un carácter de nueva línea. Esta lista limita la lista en tcp_allowed_congestion_control. Es posible que haya más algoritmos de control de congestión disponibles como módulos, pero no cargados.

tcp_app_win (entero; valor predeterminado: 31; a partir de Linux 2.4)
    Esta variable define cuántos bytes de la ventana TCP se reservan para el gasto del almacenamiento temporal.

    Un máximo de (window/2^tcp_app_win, mss) bytes en la ventana están reservados para el búfer de la aplicación. Un valor de 0 implica que no se reserva ninguna cantidad.

tcp_base_mss (Entero; por defecto: 512; a partir de Linux 2.6.17)
    El valor inicial de search_low que utilizará la capa de paquetización para el descubrimiento de la MTU de ruta (sondeo de MTU). Si el sondeo de MTU está habilitado, éste será el MSS inicial utilizado por la conexión.

tcp_bic (Booleano; predeterminado: deshabilitado; Linux 2.4.27/2.6.6 a Linux 2.6.13)
    Habilita el algoritmo de control de congestión BIC-TCP. BIC-TCP es un cambio exclusivo del lado del emisor que garantiza una equidad lineal de RTT en ventanas grandes, a la vez que ofrece escalabilidad y compatibilidad con TCP. El protocolo combina dos esquemas: aumento incremental y aumento de búsqueda binaria. Cuando la ventana de congestión es grande, el aumento incremental con un incremento grande garantiza una equidad lineal de RTT, así como una buena escalabilidad. En ventanas de congestión pequeñas, el aumento de búsqueda binaria proporciona compatibilidad con TCP.

tcp_bic_low_window (entero; valor predeterminado: 14; Linux 2.4.27/2.6.6 a Linux 2.6.13)
    Establece el umbral de ventana (en paquetes) donde BIC TCP comienza a ajustar la ventana de congestión. Por debajo de este umbral, BIC TCP se comporta igual que el TCP Reno predeterminado.

tcp_bic_fast_convergence (booleano; valor predeterminado: habilitado; Linux 2.4.27/2.6.6 a Linux 2.6.13)
    Fuerza a BIC TCP a responder más rápidamente a los cambios en la ventana de congestión. Permite que dos flujos que comparten la misma conexión converjan más rápidamente.

tcp_congestion_control (Cadena;por defecto: ver texto; a partir de Linux 2.4.13)
    Establece el algoritmo de control de congestión predeterminado que se utilizará en las nuevas conexiones. El algoritmo «reno» siempre está disponible, pero pueden darse opciones adicionales según la configuración del núcleo. El valor predeterminado de este archivo se establece como parte de la configuración del núcleo.

tcp_dma_copybreak (número entero; predeterminado:4096; a partir de Linux 2.6.24).
    Límite inferior, en bytes, del tamaño de las lecturas de socket que se transferirán a un motor de copia DMA, si existe uno en el sistema y se configuró el núcleo con la opción CONFIG_NET_DMA.

tcp_dsack (booleano; por defecto:activado; a partir de Linux 2.4).
    Activa el soporte para SACK Duplicados TCP según se describen en RFC 2883.

tcp_fastopen (máscar a de bits; por defecto: 0x1; a partir de Linux 3.7)
    Habilita la compatibilidad con la Apertura Rápida RFC 7413. El indicador se utiliza como un mapa de bits con los siguientes valores:

    0x1 Activa el soporte Fast Open en la parte del cliente

    0x2 Activa el soporte de Fast Open en la parte del servidor

    0x4 Permite al cliente transmitir datos en SYN sin la opción Fast Open

    0x200
        Permite al servidor aceptar datos SYN sin la opción Fast Open

    0x400
        Activa Fast Open en todos los que están a la escucha sin la opción TCP_FASTOPEN

tcp_fastopen_key (desde Linux 3.7)
    Establece la clave de Apertura Rápida RFC 7413 del servidor para generar una cookie cuando la compatibilidad con Apertura Rápida del servidor esté habilitada.

tcp_ecn (número entero; por defecto:consulte más abajo; a partir de Linux 2.4)
    Activa la Notificación Explícita de la Congestión (RFC 3168).

    Este archivo puede tener uno de los siguientes valores:

    0   Desactiva ECN. Ni se inicia, ni se acepta ECN. Predeterminado a partir de Linux 2.6.30.

    1   Habilita ECN cuando lo soliciten las conexiones entrantes y también lo solicita en los intentos de conexión salientes.

    2   Habilita ECN cuando lo soliciten las conexiones entrantes, pero no lo solicita en las conexiones salientes. Este valor es compatible y predeterminado desde Linux 2.6.31.

    Al habilitarse, la conectividad a algunos destinos podría verse afectada debido a la presencia de módulos intermedios antiguos y con un deficiente funcionamiento a lo largo de la ruta, lo que provoca la pérdida de conexiones. Sin embargo, para facilitar y fomentar la implementación con la opción 1 y solucionar este tipo de equipos con errores, se ha introducido la opción tcp_ecn_fallback.

tcp_ecn_fallback (Booleano; por defecto: activado; a partir de Linux 4.1)
    Enable RFC 3168, Section 6.1.1.1 fallback. When enabled, outgoing ECN-setup SYNs that time out within the normal SYN retransmission timeout will be resent with CWR and ECE cleared.

tcp_fack (booleano; predeterminado: habilitado; desde Linux 2.2)
    Activa el soporte para el Reconocimiento Adelantado (“Forward Acknowledgement”) TCP.

tcp_fin_timeout (entero; predeterminado: 60; desde Linux 2.2)
    Esto especifica cuántos segundos se debe esperar para un paquete FIN final antes de que el socket se cierre forzosamente. Esto constituye una violación estricta de la especificación TCP, pero es necesario para evitar ataques de denegación de servicio. En Linux 2.2, el valor predeterminado era 180.

tcp_frto (entero; valor predeterminado: consulte más adelante; desde Linux 2.4.21/2.6)
    Habilita F-RTO, un algoritmo de recuperación mejorado para agotamientos de tiempos de espera de retransmisión TCP (RTO). Resulta especialmente beneficioso en entornos inalámbricos donde la pérdida de paquetes suele deberse a interferencias de radio aleatorias, en lugar de a la congestión del enrutador intermedio. Consulte RFC 4138 para obtener más información.

    Este archivo puede tener uno de los siguientes valores:

    0   Deshabilitado. Este era el valor predeterminado hasta Linux 2.6.23 inclusive.

    1   La versión básica del algoritmo F-RTO está habilitada.

    2   Habilita F-RTO mejorado con SACK si el flujo utiliza SACK. La versión básica también se puede usar cuando se utiliza SACK, aunque en ese caso existen escenarios en los que F-RTO interactúa de forma deficiente con el conteo de paquetes del flujo TCP con SACK habilitado. Este valor es el predeterminado desde Linux 2.6.24.

    Antes de Linux 2.6.22, este parámetro era un valor booleano, compatible únicamente con los valores 0 y 1 superiores.

tcp_frto_response (entero; valor predeterminado: 0; desde Linux 2.6.22)
    Cuando F-RTO detecta que un agotamiento de tiempo de espera de retransmisión de TCP es falso (es decir, el agotamiento se habría evitado si TCP hubiera establecido un tiempo de espera de retransmisión mayor), TCP tiene varias opciones para proceder. Los valores posibles son:

    0   Basada en la reducción a la mitad de la tasa; una respuesta suave y conservadora resulta en la reducción a la mitad de la ventana de congestión (cwnd) y del umbral de inicio lento (ssthresh) después de un RTT.

    1   Respuesta muy conservadora. No se recomienda porque -aunque es válida- interactúa mal con el resto de TCP de Linux; reduce inmediatamente a la mitad cwnd e ssthresh.

    2   Respuesta agresiva. Deshace las medidas de control de congestión que ahora se consideran innecesarias (ignorando la posibilidad de una retransmisión perdida que requeriría mayor precaución por parte de TCP); cwnd e ssthresh se restauran a los valores previos al agotamiento del tiempo de espera.

tcp_keepalive_intvl (entero; valor predeterminado: 75; desde Linux 2.4)
    Número de segundos entre dos sondas “keep-alive” TCP.

tcp_keepalive_probes (entero; valor predeterminado: 9; desde Linux 2.2)
    Número máximo de sondas “keep-alive” TCP a enviar antes de abandonar y acabar con la conexión si no se obtiene respuesta desde el otro extremo.

tcp_keepalive_time (entero; valor predeterminado: 7200; desde Linux 2.2)
    Número de segundos que una conexión necesita estar inactiva antes de que TCP comience a enviar sondas “keep-alive”. Estas sondas sólo se envían cuando la opción de conector SO_KEEPALIVE está activa. El valor por omisión es 7200 segundos (2 horas). Una conexión inactiva se termina después de aproximadamente otros 11 minutos (9 sondas a intervalos de 75 segundos) cuando está activo el envío de sondas “keep-alive”.

    Dese cuenta que los mecanismos subyacentes de seguimiento de conexiones y los plazos de tiempo de las aplicaciones pueden ser mucho más pequeños.

tcp_low_latency (Booleano; valor predeterminado: deshabilitado; desde Linux 2.4.21/2.6; obsoleto desde Linux 4.14)
    Si está habilitada, la pila TCP toma decisiones que priorizan una latencia menor en lugar de un mayor rendimiento. Si esta opción está deshabilitada, se prioriza un mayor rendimiento. Un ejemplo de una aplicación donde se debería cambiar este valor predeterminado sería un clúster de cómputo Beowulf. A partir de Linux 4.14, este archivo aún existe, pero su valor se ignora.

tcp_max_orphans (entero; valor predeterminado: ver más abajo; desde Linux 2.4)
    Número máximo de sockets TCP huérfanos (no asociados a ningún identificador de archivo de usuario) permitidos en el sistema. Cuando se supera este número, la conexión huérfana se restablece y se muestra una advertencia. Este límite existe únicamente para evitar ataques de denegación de servicio simples. No se recomienda reducirlo. Las condiciones de red podrían requerir un incremento en el número de huérfanos permitidos, pero tenga en cuenta que cada uno puede ocupar hasta ~64 kB de memoria no intercambiable. El valor inicial predeterminado es igual al parámetro del kernel NR_FILE. Este valor inicial predeterminado se ajusta según la memoria del sistema.

tcp_max_syn_backlog (entero; valor predeterminado: ver más abajo; desde Linux 2.2)
    Número máximo de peticiones de conexión encoladas que todavía no han recibido un reconocimiento desde el cliente que se está conectando. Si este número se supera, el núcleo comenzará a eliminar peticiones. El valor por omisión de 256 se incrementa a 1024 cuando la memoría que hay en el sistema es adecuada o grande (>= 128 MB) y se reduce a 128 en aquellos sistemas con muy poca memoria (<= 32 MB).

    Antes de Linux 2.6.20, se recomendaba que, si era necesario aumentar este valor por encima de 1024, se modificara el tamaño de la tabla hash SYNACK (TCP_SYNQ_HSIZE) en include/net/tcp.h para mantenerlo y se recompilara el núcleo. En Linux 2.6.20, se eliminó el tamaño fijo de TCP_SYNQ_HSIZE en favor de un tamaño dinámico.

        TCP_SYNQ_HSIZE * 16 <= tcp_max_syn_backlog

    Y el núcleo debe recompilarse. En Linux 2.6.20, se eliminó el tamaño fijo TCP_SYNQ_HSIZE en favor de un tamaño dinámico.

tcp_max_tw_buckets (entero; predeterminado: ver más abajo; desde Linux 2.4)
    Número máximo de conectores en el estado TIME_WAIT admitidos por el sistema. Este límite existe sólo para evitar ataques denial-of-service sencillos. El valor por omisión de NR_FILE*2 se ajusta dependiendo de la memoria que haya en el sistema. Si este número se supera, se cierra el conector y se muestra una aviso.

tcp_moderate_rcvbuf (booleano; predeterminado: habilitado; desde Linux 2.4.17/2.6.7)
    Si está habilitado, TCP realiza el ajuste del búfer de recepción, intentando cuadrar automáticamente su tamaño (no mayor que tcp_rmem[2]) para que coincida con el tamaño requerido por la ruta para un rendimiento completo.

tcp_mem (desde Linux 2.4)
    Es un vector de 3 enteros: [bajo, presión, alto]. Estos límites, medidos en unidades del tamaño de página del sistema, son utilizados por TCP para rastrear el uso de memoria. Los valores predeterminados se calculan al arrancar a partir de la cantidad de memoria disponible. TCP solo puede usar poca memoria para esto, limitada a unos 900 megabytes en sistemas de 32 bits. Los sistemas de 64 bits no tienen esta limitación.

    low TCP no regula su asignación de memoria cuando el número de páginas que ha asignado globalmente está por debajo de este número.

    pressure
        Cuando la cantidad de memoria asignada por TCP supera este número de páginas, TCP modera su consumo de memoria. Este estado de presión de memoria se termina una vez que el número de páginas asignadas cae por debajo de la marca low.

    high
        Número máximo de páginas que TCP asignará de forma global. Este valor invalida cualquier otro límite impuesto por el núcleo.

tcp_mtu_probing (entero; valor predeterminado: 0; desde Linux 2.6.17)
    Este parámetro controla el descubrimiento de la MTU de la ruta de la capa de empaquetamiento de TCP. Se pueden asignar los siguientes valores al archivo:

    0   Desactivado

    1   Deshabilitado por defecto, habilitado al detectar un agujero negro ICMP.

    2   Siempre habilitado, usa el MSS inicial de tcp_base_mss.

tcp_no_metrics_save (booleano; valor predeterminado: deshabilitado; desde Linux 2.6.6)
    Por defecto, TCP guarda varias métricas de conexión en la caché de ruta cuando se cierra la conexión, de modo que las conexiones que se establezcan próximamente puedan emplearlas para establecer las condiciones iniciales. Esto suele mejorar el rendimiento general, pero en ocasiones puede reducirlo. Si tcp_no_metrics_save está habilitado, TCP no almacenará en caché las métricas al cerrar las conexiones.

tcp_orphan_retries (número entero; por defecto: 8; a partir de Linux 2.4)
    Número máximo de intentos realizados para sondear el otro extremo de una conexión que ha sido cerrada por nuestro extremo.

tcp_reordering (número entero; por defecto:3; a partir de Linux 2.4)
    El máximo que un paquete puede ser reorganizado en un flujo de paquetes TCP sin que TCP asuma pérdida de paquetes y sin que se ponga a hacer un lento inicio. No es aconsejable cambiar este número. Ésta es una métrica de detección de reorganización de paquetes diseñada para minimizar retrocesos y retransmisiones innecesarios provocados por la reorganización de paquetes en una conexión.

tcp_retrans_collapse (Booleano; por defecto: activado; a partir de Linux 2.2)
    Intentar enviar paquetes de tamaño máximo durante las retransmisiones.

tcp_retries1 (número entero; por defecto:3; a partir de Linux 2.2)
    Número de veces que TCP intentará retransmitir un paquete en una conexión establecida normalmente, sin el esfuerzo extra de que se involucren las capas de red. Una vez se supera este número de retransmisiones, primero hacemos que la capa de red actualice la ruta si es posible antes de cada nueva retransmisión. El valor por omisión es 3, el mínimo especificado en el RFC.

tcp_retries2 (número entero; por defecto:15; a partir de Linux 2.2)
    Número máximo de veces que un paquete TCP se retransmite con estado “establecido” antes de abandonarlo. El valor por omisión es 15, que corresponde a una duracción de, aproximadamente, entre 13 y 30 minutos, dependiendo del plazo de retransmisión. El límite mínimo de 100 segundos especificado por RFC 1122 normalmente se considera demasiado pequeño.

tcp_rfc1337 (Booleano; por defecto:desactivado; a partir de Linux 2.2)
    Activa el comportamiento TCP que se ajusta al RFC 1337. Cuando no está activo, si se recibe un RST en un estado TIME_WAIT, cerramos el conector inmediatamente sin esperar el fin del periodo TIME_WAIT.

tcp_rmem (desde Linux 2.4)
    Éste es un vector de 3 enteros: [min, default, max]. Estos parámetros los usa TCP para regular los tamaños de los buffers de recepción. TCP ajusta dinámicamente el tamaño del buffer de recepción a partir de los valores por omisión listados más abajo, en el rango de estas valores, dependiendo de la memoria disponible en el sistema.

    min Tamaño mínimo del búfer de recepción utilizado por cada socket TCP. El valor predeterminado es el tamaño de página del sistema. (En Linux 2.4, el valor predeterminado es 4 kB, reducido a PAGE_SIZE bytes en sistemas con poca memoria). Este valor se utiliza para garantizar que, si se dispone de poca memoria, las asignaciones por debajo de este tamaño se realicen correctamente. No se utiliza para limitar el tamaño del búfer de recepción declarado mediante SO_RCVBUF en un socket.

    default
        Tamaño predeterminado del búfer de recepción para un socket TCP. Este valor sobrescribe el tamaño predeterminado inicial del búfer del net.core.rmem_default global genérico definido para todos los protocolos. El valor predeterminado es 87380 bytes. (En Linux 2.4, este valor se reducirá a 43689 en sistemas con poca memoria). Si se desean tamaños de búfer de recepción mayores, se deberá aumentar este valor (para que afecte a todos los sockets). Para emplear ventanas TCP grandes, se debe habilitar net.ipv4.tcp_window_scaling (valor predeterminado).

    max Tamaño máximo del búfer de recepción utilizado por cada socket TCP. Este valor no anula el valor global net.core.rmem_max. No se utiliza para limitar el tamaño del búfer de recepción declarado mediante SO_RCVBUF en un socket. El valor predeterminado se calcula mediante la fórmula:

            max(87380, min(4 MB, tcp_mem[1]*PAGE_SIZE/128))

        (En Linux 2.4, el valor predeterminado es 87380*2 bytes, reducido a 87380 en sistemas con poca memoria).

tcp_sack (Booleano; valor predeterminado: habilitado; desde Linux 2.2)
    Activa los Reconocimientos Selectivos TCP descritos por el RFC 2018.

tcp_slow_start_after_idle (Booleano; valor predeterminado: habilitado; desde Linux 2.6.18)
    Si está habilitado, se ciñe a lo indicado en el RFC 2861 y agota el tiempo de espera de la ventana de congestión tras un período de inactividad. Un período de inactividad se define como el RTO (tiempo de espera de retransmisión) actual. Si está deshabilitado, no se agota el tiempo de espera de la ventana de congestión tras un período de inactividad.

tcp_stdurg (Booleano; valor predeterminado: deshabilitado; desde Linux 2.2)
    Si esta opción está habilitada, se utiliza la interpretación RFC 1122 del campo de puntero urgente de TCP. Según esta interpretación, el puntero urgente apunta al último byte de los datos urgentes. Si está deshabilitada, se utiliza la interpretación compatible con BSD del puntero urgente: el puntero urgente apunta al primer byte después de los datos urgentes. Habilitar esta opción puede causar problemas de interoperabilidad.

tcp_syn_retries (entero; predeterminado: 6; desde Linux 2.2)
    El número máximo de veces que se retransmitirán los SYN iniciales en un intento de conexión TCP activo. Este valor no debe ser superior a 255. El valor predeterminado es 6, lo que corresponde a un tiempo de reintento de hasta aproximadamente 127 segundos. Antes de Linux 3.7, el valor predeterminado era 5, que, sumando al cálculo basado en otros parámetros del núcleo, correspondía a aproximadamente 180 segundos.

tcp_synack_retries (entero; predeterminado: 5; desde Linux 2.2)
    Número máximo de veces que se retransmitirá un segmento SYN/ACK para una conexión TCP pasiva. Este número no debería ser mayor que 255.

tcp_syncookies (entero; predeterminado: 1; desde Linux 2.2)
    Habilita las TCP syncookies. El núcleo debe compilarse con CONFIG_SYN_COOKIES. La función syncookies intenta proteger un socket de un ataque de inundación SYN. Debe usarse como último recurso, si es que se usa. Esto constituye una violación del protocolo TCP y entra en conflicto con otras áreas de TCP, como las extensiones TCP. Puede causar problemas a clientes y relés. No se recomienda como mecanismo de ajuste para servidores con mucha carga, para ayudar con condiciones de sobrecarga o configuración incorrecta. Para alternativas recomendadas, consulte tcp_max_syn_backlog, tcp_synack_retries e tcp_abort_on_overflow. Establézcalo en uno de los siguientes valores:

    0   Desactiva TCP syncookies.

    1   Envía cookies de sincronización cuando la cola de sincronización pendiente de un socket se desborda.

    2   (desde Linux 3.12) Envía cookies de sincronización incondicionalmente. Esto puede ser útil para pruebas de red.

tcp_timestamps (entero; predeterminado: 1; desde Linux 2.2)
    Establece uno de los siguientes valores para habilitar o deshabilitar las marcas de tiempo TCP según el RFC 1323:

    0   Deshabilita las marcas de tiempo.

    1   Habilita las marcas de tiempo según la definición de RFC 1323 y utiliza un desplazamiento aleatorio para cada conexión en lugar de usar solo la hora actual.

    2   Igual que el valor 1, pero sin desplazamientos aleatorios. Establecer tcp_timestamps con este valor es relevante desde Linux 4.10.

tcp_tso_win_divisor (entero; valor predeterminado: 3; desde Linux 2.6.9)
    Este parámetro controla el porcentaje de la ventana de congestión que puede consumir una sola trama de Descarga de Segmentación TCP (TSO). La configuración de este parámetro busca un equilibrio entre la capacidad de ráfaga y la creación de tramas TSO más grandes.

tcp_tw_recycle (booleano; valor predeterminado: deshabilitado; desde Linux 2.4 hasta Linux 4.11)
    Habilita el reciclaje rápido de sockets TIME_WAIT. No se recomienda habilitar esta opción, ya que la IP remota podría no usar marcas de tiempo que aumenten de forma previsible (dispositivos con NAT, dispositivos con desplazamientos de marca de tiempo por conexión). Consulte los RFC 1323 (PAWS) y RFC 6191.

tcp_tw_reuse (Booleano; valor predeterminado: deshabilitado; desde Linux 2.4.19/2.6)
    Permite reutilizar los sockets TIME_WAIT para nuevas conexiones cuando sea seguro desde el punto de vista del protocolo. No debe modificarse sin el asesoramiento o la solicitud de expertos técnicos.

tcp_vegas_cong_avoid (Booleano; valor predeterminado: deshabilitado; desde Linux 2.2 hasta Linux 2.6.13)
    Habilita el algoritmo de prevención de congestión TCP Vegas. TCP Vegas es una modificación de TCP que solo afecta al remitente y que anticipa la aparición de congestión estimando el ancho de banda. TCP Vegas ajusta la velocidad de envío modificando la ventana de congestión. TCP Vegas debería proporcionar una menor pérdida de paquetes, pero no es tan agresivo como TCP Reno.

tcp_westwood (Booleano; valor predeterminado: deshabilitado; Linux 2.4.26/2.6.3 a Linux 2.6.13)
    Habilita el algoritmo de control de congestión TCP Westwood+. TCP Westwood+ es una modificación de la pila de protocolos TCP Reno, que solo afecta al remitente, y que optimiza el rendimiento del control de congestión TCP. Se basa en la estimación del ancho de banda de extremo a extremo para establecer la ventana de congestión y un umbral de inicio lento tras una congestión. Con esta estimación, TCP Westwood+ establece de forma flexible un umbral de inicio lento y una ventana de congestión que tiene en cuenta el ancho de banda utilizado en el momento de la congestión. TCP Westwood+ aumenta significativamente la equidad con respecto a TCP Reno en redes cableadas y el rendimiento en enlaces inalámbricos.

tcp_window_scaling (Booleano; valor predeterminado: habilitado; desde Linux 2.2)
    Activa la ampliación de ventanas TCP según el RFC 1323. Esta característica permite el uso de una ventana grande (> 64 kB) en conexiones TCP, aunque el otro extremo debería soportarla. Normalmente, el campo de 16 bit de longitud de ventana en la cabecera TCP limita el tamaño de ventana a menos de 64 kB. Si se desean ventanas mayores, las aplicaciones pueden incrementar el tamaño de sus buffers de conectores y se empleará la opción de ampliación de ventanas. Si tcp_window_scaling se desactiva, TCP no negociará el uso de la ampliación de ventanas con el otro extremo durante el establecimiento de la conexión.

tcp_wmem (desde Linux 2.4)
    Éste es un vector de 3 enteros: [min, default, max]. Estos parámetros los usa TCP para regular los tamaños de los buffers de envío. TCP ajusta dinámicamente el tamaño del buffer de envío a partir de los valores por omisión listados más abajo, en el rango de estas valores, dependiendo de la memoria disponible en el sistema.

    min Tamaño mínimo del búfer de envío utilizado por cada socket TCP. El valor predeterminado es el tamaño de página del sistema. (En Linux 2.4, el valor predeterminado es 4 kB). Este valor se utiliza para garantizar que, cuando se dispone de escasa memoria, las asignaciones inferiores a este tamaño se realicen correctamente. No se utiliza para limitar el tamaño del búfer de envío declarado mediante SO_SNDBUF en un socket.

    default
        Tamaño predeterminado del búfer de envío para un socket TCP. Este valor sobrescribe el tamaño predeterminado inicial del búfer del valor genérico global /proc/sys/net/core/wmem_default definido para todos los protocolos. El valor predeterminado es 16 kB. Si se desean tamaños de búfer de envío mayores, se debe aumentar este valor (para que afecte a todos los sockets). Para emplear ventanas TCP grandes, /proc/sys/net/ipv4/tcp_window_scaling debe establecerse en un valor distinto de cero (predeterminado).

    max Tamaño máximo del búfer de envío utilizado por cada socket TCP. Este valor no sobrescribe el valor de /proc/sys/net/core/wmem_max. No se utiliza para limitar el tamaño del búfer de envío, declarado mediante SO_SNDBUF, en un socket. El valor por defecto se calcula mediante la fórmula:

            max(65536, min(4 MB, tcp_mem[1]*PAGE_SIZE/128))

        (En Linux 2.4, el valor predeterminado es 128 kB, que se reduce a 64 kB en sistemas con poca memoria).

tcp_workaround_signed_windows (Booleano; valor predeterminado: deshabilitado; desde Linux 2.6.26)
    Si está habilitado, se asume que la ausencia de una opción de escalado de ventana significa que el TCP remoto está roto y trata la ventana como una cantidad con signo. Si está deshabilitado, se asume que el TCP remoto no está roto incluso si no recibimos una opción de escalado de ventana.

  Opciones de los conectores
Para establecer u obtener una opción de socket TCP, invoque a getsockopt(2) para leer o a setsockopt(2) para escribir la opción con el argumento de nivel de opción establecido en IPPROTO_TCP. A menos que se indique lo contrario, optval es un puntero a un int. Además, la mayoría de las opciones de socket IPPROTO_IP son válidas en sockets TCP. Consulte ip(7) para más información.

A continuación, se muestra una lista de opciones de socket específicas de TCP. Consulte sockets(7) para obtener más información sobre otras opciones de socket que también son aplicables a sockets TCP.

TCP_CONGESTION (desde Linux 2.6.13)
    El argumento de esta opción es una cadena. Esta opción permite al usuario configurar el algoritmo de control de congestión TCP que se utilizará por lossockets. Los procesos sin privilegios de administrador solo pueden elegir uno de los algoritmos en tcp_allowed_congestion_control (descrito anteriormente). Los procesos con privilegios (CAP_NET_ADMIN) pueden elegir cualquiera de los algoritmos de control de congestión disponibles (véase la descripción de tcp_available_congestion_control anteriormente).

TCP_CORK (desde Linux 2.2)
    Si se configura, no se envían tramas parciales. Todas las tramas parciales en cola se envían al desactivar la opción. Esto resulta útil para anteponer encabezados antes de invocar a sendfile(2) o para optimizar el rendimiento. En la implementación actual, existe un límite de 200 milisegundos para el tiempo durante el cual TCP_CORK bloquea la salida. Si se alcanza este límite, los datos en cola se transmiten automáticamente. Esta opción solo se puede combinar con TCP_NODELAY a partir de Linux 2.5.71. No debe utilizarse en código pretenda ser portable.

TCP_DEFER_ACCEPT (desde Linux 2.4)
    Allow a listener to be awakened only when data arrives on the socket. Takes an integer value (seconds), this can bound the maximum number of attempts TCP will make to complete the connection. The kernel will round this value up to the next larger TCP retransmit duration.

    On a client socket, if nonzero, delays sending the final ACK of the three-way handshake until the socket has data to send, in which case the ACK is piggybacked on the first data segment, or a delayed-ACK timeout is reached.

    This option should not be used in code intended to be portable.

TCP_INFO (desde Linux 2.4)
    Se utiliza para recopilar información sobre este socket. El núcleo devuelve un struct tcp_info, tal como se define en el archivo /usr/include/linux/tcp.h. No debe utilizarse si se desea que el código portable.

TCP_KEEPCNT (desde Linux 2.4)
    Número máximo de sondas “keep-alive” que TCP debería enviar antes de abandonar la conexión. No debería usar esta opción si desea que su código sea transportable.

TCP_KEEPIDLE (desde Linux 2.4)
    Tiempo (en segundos) que la conexión necesita estar ociosa antes de que TCP empiece a enviar sondas “keep-alive” si la opción de conector SO_KEEPALIVE se ha activado en este conector. No debería usar esta opción si desea que su código sea transportable.

TCP_KEEPINTVL (desde Linux 2.4)
    Tiempo (en segundos) entre sondas “keep-alive”. No debería usar esta opción si desea que su código sea portable.

TCP_LINGER2 (desde Linux 2.4)
    Tiempo de vida de los sockets huérfanos con estado FIN_WAIT2. Esta opción puede utilizarse para anular la configuración general del sistema en el archivo /proc/sys/net/ipv4/tcp_fin_timeout para este socket. No debe confundirse con la opción de nivel socket(7) SO_LINGER. No debe utilizarse si se considera la portabilidad del código.

TCP_MAXSEG
    Tamaño máximo del segmento para los paquetes TCP salientes. En Linux 2.2 y anteriores, y en Linux 2.6.28 y posteriores, si esta opción se configura antes de establecer la conexión, también cambia el valor MSS anunciado al otro extremo en el paquete inicial. Los valores superiores a la MTU de la interfaz (eventual) no tienen efecto. TCP también impondrá sus límites mínimo y máximo sobre el valor indicado.

TCP_NODELAY
    Si se configura, se deshabilita el algoritmo de Nagle. Los segmentos siempre se enviarán lo antes posible, incluso con una pequeña cantidad de datos. Si no se configura, los datos se almacenan en búfer hasta que haya suficiente cantidad para enviar, evitando así el envío frecuente de paquetes pequeños, lo que resulta en una mala utilización de la red. Esta opción se sobrescribe con TCP_CORK; sin embargo, al configurarla, se fuerza a un vaciado de la salida pendiente, incluso si TCP_CORK está configurado.

TCP_QUICKACK (desde Linux 2.4.4)
    Activa el modo “quickack” cuando se pone a 1 y lo desactiva cuando se pone a 0. En el modo “quickack”, los reconocimientos se envían inmediatamente, antes de retrasarlos si es necesario conforme a un funcionamiento normal de TCP. Esta opción no es permanente, sólo permite un cambio a o desde el modo “quickack”. Las operaciones posteriores del protocolo TCP entrarán/saldrán otra vez del modo “quickack” dependiendo del procesamiento interno del protocolo y de factores tales como la expiración de plazos de reconocimientos retrasados y la transferencia de datos. No debería usar esta opción si desea que su código sea transportable.

TCP_SYNCNT (desde Linux 2.4)
    Establece el número de retransmisiones SYN que debe enviar TCP antes de interrumpir el intento de conexión. No puede exceder de 255. No debería usar esta opción si desea que su código sea transportable.

TCP_SAVE_SYN (since Linux 4.3)
    Saves incoming SYN packet contents of the listening socket until it is read with TCP_SAVED_SYN once. Could be set before or after the listen(2) call.

TCP_SAVED_SYN (since Linux 4.3)
    Reads SYN packet contents saved by TCP_SAVE_SYN. The saved SYN headers are freed after the first call. The data returned in TCP_SAVED_SYN are network (IPv4/IPv6) and TCP headers.

TCP_USER_TIMEOUT (desde Linux 2.6.37)
    Esta opción toma un entero sin signo como argumento. Cuando el valor es mayor que 0, dará el tiempo máximo en milisegundos que los datos transmitidos pueden permanecer sin confirmar, o que los datos almacenados en búfer pueden permanecer sin transmitir (debido al tamaño de ventana cero), antes de que TCP cierre forzosamente la conexión correspondiente y retorne ETIMEDOUT a la aplicación. Si el valor de la opción es 0, TCP utilizará el valor predeterminado del sistema.

    El aumento de los tiempos de espera del usuario permite que una conexión TCP previva durante periodos prolongados sin conectividad de extremo a extremo. Reducir los tiempos de espera del usuario permite que las aplicaciones den error rápidamente, si así se desea. De lo contrario, el fallo puede tardar hasta 20 minutos con los valores predeterminados del sistema en un entorno WAN normal.

    Esta opción se puede configurar en cualquier estado de una conexión TCP, pero solo es efectiva durante los estados sincronizados de una conexión (ESTABLISHED, FIN-WAIT-1, FIN-WAIT-2, CLOSE-WAIT, CLOSING y LAST-ACK). Además, al usar la opción de mantenimiento de conexión TCP (SO_KEEPALIVE), TCP_USER_TIMEOUT sobrescribirá el mantenimiento de conexión para determinar cuándo cerrar una conexión debido a un fallo de mantenimiento de conexión.

    Esta opción no afecta a la retransmisión TCP de un paquete ni al envío de un paquete sonda de mantenimiento de conexión.

    Esta opción, como muchas otras, será heredada por el socket devuelto por accept(2), si se configuró en el socket de escucha.

    Para más detalles sobre la función de tiempo de espera del usuario, consulte los RFC 793 y RFC 5482 «Opción de tiempo de espera del usuario TCP».

TCP_WINDOW_CLAMP (desde Linux 2.4)
    Limita el tamaño de la ventana anunciada a este valor. El núcleo impone un tamaño mínimo de SOCK_MIN_RCVBUF/2. No debería usar esta opción si desea que su código sea transportable.

TCP_FASTOPEN (desde Linux 3.6)
    Esta opción habilita la apertura rápida (RFC 7413) en el socket de escucha. El valor especifica la longitud máxima de los SYN pendientes (similar al argumento de retraso en listen(2)). Una vez habilitado, el socket de escucha otorga la cookie de Apertura Rápida TCP al SYN entrante con la opción de Apertura Rápida TCP.

    Más importante aún, acepta los datos en SYN con una cookie de Apertura Rápida válida y responde con un SYN-ACK, confirmando tanto los datos como la secuencia SYN. accept(2) devuelve un socket disponible para lectura y escritura cuando el protocolo de enlace aún no se ha completado. Por lo tanto, el intercambio de datos puede comenzar antes de que se complete el protocolo de enlace. Esta opción requiere habilitar la compatibilidad del lado del servidor en sysctl net.ipv4.tcp_fastopen (véase más arriba). Para obtener información sobre la compatibilidad del lado del cliente con Apertura Rápida TCP, consulte send(2), MSG_FASTOPEN o TCP_FASTOPEN_CONNECT más adelante.

TCP_FASTOPEN_CONNECT (desde Linux 4.11)
    Esta opción habilita una forma alternativa de realizar Apertura Rápida en el lado activo (cliente). Cuando esta opción está habilitada, connect(2) se comportará de manera diferente dependiendo de si hay una cookie de apertura rápida disponible para el destino.

    If a cookie is not available (i.e., first contact to the destination), connect(2) behaves as usual by sending a SYN immediately, except the SYN would include an empty Fast Open cookie option to solicit a cookie.

    Si hay una cookie disponible, connect(2) devolvería 0 inmediatamente, pero la transmisión del SYN se aplaza. Un write(2) o sendmsg(2) posterior activaría un SYN con datos más una cookie en la opción de Apertura Rápida. Es decit, la operación de conexión se aplaza hasta que se proporcionen los datos.

    Observe: Aunque esta opción está diseñada para mayor comodidad, habilitarla modifica el comportamiento y ciertas llamadas del sistema podrían establecer valores errno diferentes. Con una cookie presente, se debe llamar a write(2) o sendmsg(2) inmediatamente después de connect(2) para enviar SYN + datos para completar el 3WHS (acrónimo que significa «saludo de 3 partes») y establecer la conexión. Si se llama a read(2) justo después de connect(2) sin write(2) provocará que el socket bloqueador se bloquee indefinidamente.

    La aplicación debe configurar la opción de socket TCP_FASTOPEN_CONNECT antes de write(2) o sendmsg(2), o llamar directamente a write(2) o sendmsg(2) con el indicador MSG_FASTOPEN, en lugar de usar ambos en la misma conexión.

    Este es el flujo de llamada típico con esta nueva opción:

        s = socket();
        setsockopt(s, IPPROTO_TCP, TCP_FASTOPEN_CONNECT, 1, ...);
        connect(s);
        write(s);  /* write() should always follow connect()
                    * in order to trigger SYN to go out.  */
        read(s)/write(s);
        /* ... */
        close(s);

  API de sockets
TCP ofrece compatibilidad limitada con datos fuera de banda, en forma de datos urgentes (un solo byte). En Linux, esto significa que si el otro extremo envía datos fuera de banda más recientes, los datos urgentes más antiguos se insertan como datos normales en el flujo (incluso si SO_OOBINLINE no está configurado). Esto difiere del comportamiento de las pilas basadas en BSD.

Por defecto, Linux utiliza la interpretación compatible con BSD del campo de puntero urgente. Esto incumple lo dispuesto en el RFC 1122, pero es necesario para la interoperabilidad con otras pilas. Se puede modificar en /proc/sys/net/ipv4/tcp_stdurg.

Es posible acceder a datos fuera de banda mediante el indicador MSG_PEEK de recv(2).

Desde Linux 2.4, Linux admite el uso de MSG_TRUNC en el argumento flags de recv(2) (y recvmsg(2)). Este indicador hace que los bytes de datos recibidos se descarten, en lugar de devolverse a un búfer proporcionado por el emisor. Desde Linux 2.4.4, MSG_TRUNC también tiene este efecto cuando se utiliza junto con MSG_OOB para recibir datos fuera de banda.

  Ioctls
Las siguientes llamadas a ioctl(2) devuelven información en valor. La sintaxis correcta es:

    int valor;
    error = ioctl(tcp_socket, ioctl_type, &valor);

ioctl_type es una de las siguientes:

SIOCINQ
    Devuelve la cantidad de datos no leídos en cola en el búfer de recepción. El socket no debe estar en estado LISTEN, de lo contrario se devuelve un error (EINVAL). SIOCINQ se define en <linux/sockios.h>. Como alternativa, puede emplearse el sinónimo FIONREAD, definido en <sys/ioctl.h>.

SIOCATMARK
    Devuelve verdadero (es decir, valor es distinto de cero) si el flujo de datos entrante se encuentra en la marca de urgencia.

    Si la opción de socket SO_OOBINLINE está activada y SIOCATMARK devuelve verdadero, la siguiente lectura del socket devolverá los datos urgentes. Si la opción de socket SO_OOBINLINE no está establecida y SIOCATMARK devuelve verdadero, la siguiente lectura del socket devolverá los bytes posteriores a los datos urgentes (para leer los datos urgentes se requiere el indicador recv(MSG_OOB)).

    Una lectura nunca sobrepasa la marca de urgencia. Si se informa a una aplicación de la presencia de datos urgentes mediante select(2) (mediante el argumento exceptfds) o mediante la entrega de una señal SIGURG, puede avanzar hasta la marca mediante un bucle que prueba repetidamente SIOCATMARK y realiza una lectura (solicitando cualquier número de bytes) siempre que SIOCATMARK devuelva falso.

SIOCOUTQ
    Devuelve la cantidad de datos no enviados en la cola de envío del socket. El socket no debe estar en estado LISTEN; de lo contrario, se devuelve un error (EINVAL). SIOCOUTQ se define en <linux/sockios.h>. Como alternativa, puede usar el sinónimo TIOCOUTQ, definido en <sys/ioctl.h>.

  Gestión de errores
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 requieren una notificación de errores más rápida. Esto se puede habilitar con la opción de socket IP_RECVERR de nivel IPPROTO_IP. Cuando esta opción está habilitada, todos los errores entrantes se pasan inmediatamente al programa de usuario. Use esta opción con precaución, ya que reduce la tolerancia de TCP a los cambios de enrutamiento y otras condiciones normales de red.

ERRORES

EAFNOTSUPPORT
    El tipo de dirección de conector pasado en sin_family no es AF_INET.

EPIPE
    El otro extremo ha cerrado el conector inesperadamente o se ha intentado leer de un conector desconectado.

ETIMEDOUT
    El otro extremo no ha reconocido los datos retransmitidos después de cierto tiempo.

TCP también puede devolver cualquier error definido por ip(7) o la capa de conectores genéricos.

VERSIONES
La compatibilidad con la Notificación Explícita de Congestión, en sendfile(2), soporte para reordenamiento y algunas extensiones SACK (DSACK) se introdujeron en Linux 2.4. La compatibilidad con el acuse de recibo de reenvío (FACK), el reciclaje TIME_WAIT y las opciones de socket keepalive por conexión se introdujeron en Linux 2.3.

ERRORES
No se han documentado todos los errores.

No se ha descrito IPv6.

VÉASE TAMBIÉN
accept(2), bind(2), connect(2), getsockopt(2), listen(2), recvmsg(2), sendfile(2), sendmsg(2), socket(2), ip(7), socket(7)

The kernel source file Documentation/networking/ip-sysctl.rst.

RFC 793 para la especificación de TCP.
RFC 1122 para los requisitos de TCP y una descripción del algoritmo Nagle.
RFC 1323 para las opciones TCP de fechado y de ampliación de ventana.
RFC 1337 para una descripción de los peligros que conlleva el “asesinato” de los conectores TIME_WAIT.
RFC 3168 para una descripción de la Notificación Explícita de la Congestión.
RFC 2581 para los algoritmos TCP de control de la congestión.
RFC 2018 y RFC 2883 para SACK y sus extensiones.

TRADUCCIÓN
La traducción al español de esta página del manual fue creada por Juan Piernas <piernas@ditec.um.es> y Marcos Fouces <marcos@debian.org>

Esta traducción es documentación libre; lea la GNU General Public License Version 3 (https://www.gnu.org/licenses/gpl-3.0.html) o posterior con respecto a las condiciones de copyright. No existe NINGUNA RESPONSABILIDAD.

Si encuentra algún error en la traducción de esta página del manual, envíe un correo electrónico a debian-l10n-spanish@lists.debian.org.