#include <sys/socket.h>
#include <netinet/in.h>
tcp_socket = socket(PF_INET, SOCK_STREAM, 0);
É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 (``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 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. Estas incluyen protección contra la
repetición de números de secuencia (PAWS, ``Protection Against
Wrapped Sequence Numbers''), ampliación de ventana (``Window
Scaling'') y fechados (``Timestamps''). La ampliación de ventana
permite el uso de grandes ventanas TCP (> 64K) para dar soporte a enlaces
con una alta latencia o un 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 variables sysctls
net.ipv4.tcp_wmem y net.ipv4.tcp_rmem, o para cada conector
individual mediante las opciones de conector SO_SNDBUF y
SO_RCVBUF con la llamada setsockopt(2).
Los tamaños máximos de los buffers de los conectores
declarados a través de SO_SNDBUF y SO_RCVBUF
están limitados por las sysctls globales net.core.rmem_max y
net.core.wmem_max. Dese cuenta que TCP realmente asigna dos veces el
tamaño del buffer solicitado en la llamada setsockopt(2), por
lo que una llamada con éxito a getsockopt(2) no
devolverá el mismo tamaño de buffer que el solicitado en la
llamada setsockopt(2). TCP usa esto para propósitos
administrativos y estructuras internas del núcleo, y las variables
sysctl reflejan los tamaños mayores comparados con las ventanas TCP
actuales. Para las conexiones individuales, el tamaño del buffer del
conector se debe establecer antes de las llamadas listen() o
connect() para que tenga efecto. 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
SIOCSPGRP o FIOSETOWN. 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).
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.
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 variables pueden ser accedidas 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).
- tcp_abort_on_overflow
- Activa el reinicio de conexiones si el servicio que escucha es demasiado
lento y es incapaz de continuar y aceptarlas. No está activo por
omisión. 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
- Considera que el gasto del almacenamiento temporal es
bytes/2^tcp_adv_win_scale (si tcp_adv_win_scale > 0) o
bytes-bytes/2^(-tcp_adv_win_scale) si el valor es <= 0. El valor por
omisión es 2.
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_app_win
- Esta variable define cuántos bytes de la ventana TCP se reservan
para el gasto del almacenamiento temporal.
La cantidad de bytes de la ventana que se reservan para el
buffer de la aplicación es el máximo de
(window/2^tcp_app_win, mss). 0 significa que no se reserva ninguna
cantidad. El valor por omisión es 31.
- tcp_dsack
- Activa el soporte para SACK Duplicados TCP según se describen en
RFC2883. Está activo por omisión.
- tcp_ecn
- Activa la Notificación Explícita de Congestión (ECN,
Explicit Congestion Notification), descrita en el RFC2884. No está
activa por omisión. Cuando está activa, se podría ver
afectada la conectividad a algunos destinos debido a la existencia a lo
largo de la ruta de enrutadores antiguos con un comportamiento defectuoso,
los cuales provocarían la pérdida de conexiones.
- tcp_fack
- Activa el soporte para el Reconocimiento Adelantado (``Forward
Acknowledgement'') TCP. Por omisión, está activo.
- tcp_fin_timeout
- Cantidad de segundos a esperar un paquete FIN final antes de que el
conector se cierre por la fuerza. Éstas es estrictamente una
violación de la especificación TCP, pero se necesita para
evitar ataques de denegación de servicio (DoS). El valor por
omisión en los núcleos 2.4 es 60, por debajo de los 180
segundos de la versión 2.2.
- tcp_keepalive_intvl
- Número de segundos entre dos sondas ``keep-alive'' TCP. El valor
por omisión es 75 segundos.
- tcp_keepalive_probes
- 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. El valor por omisión es 9.
- tcp_keepalive_time
- 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_max_orphans
- Número máximo de conectores TCP huérfanos (no
conectados a ningún manejador de fichero de usuario) que se
permiten en el sistema. Cuando se sobrepasa este número, la
conexión huérfana se reinicia y se muestra un aviso. Este
límite existe sólo para evitar ataques DoS sencillos. No se
recomienda reducir este límite. Las condiciones de la red
podría hacer necesario que incremente el número de
huérfanos permitidos, pero dese cuenta que cada huérfano
puede gasta hasta ~64K de memoria no intercambiable. El valor por
omisión inicial es igual al parámetro del núcleo
NR_FILE. Este valor se ajusta dependiendo de la memoria del sistema.
- tcp_max_syn_backlog
- 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 (>= 128Mb) y se reduce a 128 en aquellos sistemas con
muy poca memoria (<= 32Mb). Si se necesita incrementar este valor por
encima de 1024, se recomienda que se modifique TCP_SYNQ_HSIZE para
mantener TCP_SYNQ_HSIZE*16<=tcp_max_syn_backlog y que se recompile el
núcleo.
- tcp_max_tw_buckets
- Número máximo de conectores en el estado TIME_WAIT admitidos
por el sistema. Este límite existe sólo para evitar ataques
DoS 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_mem
- Este es un vector de 3 enteros: [low, pressure, high]. Estos
límites los usa TCP para hacer un seguimiento de su uso de memoria.
Los valores por omisión se calculan durante el arranque a partir de
la cantidad de memoria disponible.
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_orphan_retries
- Número máximo de intentos realizados para sondear el otro
extremo de una conexión que ha sido cerrada por nuestro extremo. El
valor por omisión es 8.
- tcp_reordering
- 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. El valor por omisión es 3. 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
- Intentar enviar paquetes de tamaño máximo durante las
retransmisiones. Esto está activo por defecto.
- tcp_retries1
- 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 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 RFC1122
normalmente se considera demasiado pequeño.
- tcp_rfc1337
- Activa el comportamiento TCP que se ajusta al RFC 1337. Esto no
está activo por omisión. 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
- É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 variables
sysctl, dependiendo de la memoria disponible en el sistema.
min - tamaño mínimo del buffer de
recepción usado por cada conector TCP. El valor por
omisión es 4K y se reduce a PAGE_SIZE bytes en sistemas con poca
memoria. Este valor se usa para asegurar que, en el modo de
presión de memoria, las asignaciones de memoria por debajo de
este tamaño todavía tendrán éxito. Esto no
se usa para limitar el tamaño del buffer de recepción
declarado usando SO_RCVBUF en un conector.
default - el tamaño por omisión del
buffer de recepción de un conector TCP. Este valor sobrescribe el
tamaño por omisión inicial del buffer que viene dado por
el valor genérico global net.core.rmem_default, definido
para todos los protocolos. El valor por omisión es de 87380 bytes
y se reduce a 43689 en sistemas con poca memoria. Si se desean
tamaños de buffers de recepción mayores, se debería
incrementar este valor (para que afecte a todos los conectores). Para
que se empleen ventanas TCP grandes, se debe activar (valor por
omisión) net.ipv4.tcp_window_scaling.
max - tamaño máximo del buffer de
recepción usado por cada conector TCP. Este valor no invalida el
valor global net.core.rmem_max. Esto no se usa para limitar el
tamaño del buffer de recepción declarado usando
SO_RCVBUF sobre un conector. El valor por omisión de
87380*2 bytes se reduce a 87380 en sistemas con poca memoria.
- tcp_sack
- Activa los Reconocimientos Selectivos TCP descritos por el RFC2018. Esto
está activo por omisión.
- tcp_stdurg
- Activa la interpretación estricta RFC793 del campo puntero-urgente
de TCP. El valor por omisión es usar la interpretación
compatible con BSD del puntero urgente, que apunta al primer byte tras los
datos urgentes. La interpretación RFC793 es hacer que apunte al
último byte de los datos urgentes. Activar esta opción puede
conducir a problemas de interoperatividad.
- tcp_synack_retries
- 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. El valor por omisión es
5.
- tcp_syncookies
- Activa los ``syncookies'' TCP. Se debe compilar el núcleo con
CONFIG_SYN_COOKIES. Envía ``syncookies'' cuando la cola de
paquetes syn pendientes de un conector se desborda. Los ``syncookies''
intentan proteger a un conector de un ataque por la llegada en avalancha
de paquetes SYN. Esto se debería usar como último recurso o
nunca. Esto es una violación del protocolo TCP y entra en conflicto
con otras áreas de TCP como las extensiones TCP. Puede producir
problemas para clientes y nodos repetidores. No se recomienda como
mecanismo de ajuste para ayudar a servidores muy cargados en condiciones
de sobrecarga o de mala configuración. Para alternativas
recomendadas, vea tcp_max_syn_backlog, tcp_synack_retries,
tcp_abort_on_overflow.
- tcp_syn_retries
- Número máximo de veces que se retransmitirán SYNs
iniciales para un intento activo de conexión TCP. Este valor no
debería ser mayor que 255. El valor por omisión es 5, que se
corresponde a, aproximadamente, 180 segundos.
- tcp_timestamps
- Activa fechados TCP según el RFC1323. Esto está activo por
omisión.
- tcp_tw_recycle
- Activa el reciclado rápido de conectores TIME-WAIT. No está
activo por omisión. No se recomienda activar esta opción ya
que produce problemas cuando se trabaja con NAT (Network Address
Translation).
- tcp_window_scaling
- Activa la ampliación de ventanas TCP según el RFC1323. Esto
está activo por omisión. Esta característica permite
el uso de una ventana grande (> 64K) 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 64K bytes. 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
- É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 variables sysctl,
dependiendo de la memoria disponible en el sistema.
min - tamaño mínimo del buffer de
envío usado por cada conector TCP. El valor por omisión es
de 4K bytes. Este valor se usa para asegurar que, en el modo de
presión de memoria, las asignaciones de memoria por debajo de
este tamaño todavía tendrán éxito. Esto no
se usa para limitar el tamaño del buffer de envío
declarado usando SO_SNDBUF en un conector.
default - el tamaño por omisión del
buffer de envío un conector TCP. Este valor sobrescribe el
tamaño por omisión inicial del buffer que viene dado por
el valor genérico global net.core.wmem_default, definido
para todos los protocolos. El valor por omisión es de 16K. Si se
desean tamaños de buffers de envío mayores, se
debería incrementar este valor (para que afecte a todos los
conectores). Para que se empleen ventanas TCP grandes, se debe activar
(valor por omisión) la variable sysctl.
net.ipv4.tcp_window_scaling.
max - tamaño máximo del buffer de
envío usado por cada conector TCP. Este valor no invalida el
valor global net.core.wmem_max. Esto no se usa para limitar el
tamaño del buffer de envío declarado usando
SO_SNDBUF sobre un conector. El valor por omisión de 128K
bytes. Se reduce a 64K dependiendo de la memoria disponible en el
sistema.
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 del nivel de
opción. 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).
- TCP_CORK
- Si se activa, no se envían tramas parciales. Todas las tramas
parciales encoladas se envían cuando esta opción se
desactiva de nuevo. Es útil para añadir cabeceras antes de
llamar a sendfile(2) o para optmizar el rendimiento. Esta
opción no se puede combinar con TCP_NODELAY. No
debería usar esta opción si desea que su código sea
transportable.
- TCP_DEFER_ACCEPT
- Permite despertar a un proceso oyente sólo cuando lleguen datos al
conector. Toma un valor entero (segundos). Puede limitar el número
máximo de intentos que hará TCP para terminar de establecer
la conexión. No debería usar esta opción si desea que
su código sea transportable.
- TCP_INFO
- Se usa para recoger información sobre este conector. El
núcleo devuelve una estructura tcp_info como la que se define en el
fichero /usr/include/linux/tcp.h. No debería usar esta
opción si desea que su código sea transportable.
- TCP_KEEPCNT
- 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
- 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
- Tiempo (en segundos) entre sondas ``keep-alive''. No debería usar
esta opción si desea que su código sea transportable.
- TCP_LINGER2
- Tiempo de vida de conectores que han quedado huérfanos en estado
FIN_WAIT2. Esta opción se puede usar para invalidar la sysctl
global del sistema tcp_fin_timeout en este conector. No confundir
con la opción SO_LINGER del nivel de conectores
(socket(7)). No debería usar esta opción si desea que
su código sea transportable.
- TCP_MAXSEG
- Tamaño máximo de segmento para los paquetes TCP de salida.
Si se establece esta opción antes del establecimiento de
conexiones, también cambia el valor MSS anunciado al otro extremo
en el paquete inicial. Valores mayores que la MTU de la interfaz que
finalmente se use no tienen efecto. TCP también impondrá sus
límites mínimo y máximo sobre el valor dado.
- TCP_NODELAY
- Si se usa, desactiva el algoritmo de Nagle. Esto significa que los
segmentos siempre se envían tan pronto como sea posible, aunque
sólo haya una pequeña cantidad de datos. Cuando no se usa,
los datos se almacenan temporalmente hasta que haya una cantidad
suficiente para ser enviada, evitando así el envío frecuente
de pequeños paquetes que ocasiona una pobre utilización de
la red. Esta opción no se puede usar a la misma vez que la
opción TCP_CORK.
- TCP_QUICKACK
- 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
- Establece el número de retransmisiones SYN que debe enviar TCP
antes de abortar 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_WINDOW_CLAMP
- 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.
Estas ioctls pueden ser accedidas usando ioctl(2). La
sintaxis correcta es:
int value;
error = ioctl(tcp_socket, ioctl_type, &value);
- SIOCINQ
- Devuelve la cantidad de datos encolados sin leer en el buffer de
recepción. El argumento es un puntero a un entero. El conector no
debe estar en estado LISTEN, de lo contrario se devolverá un error
(EINVAL).
- SIOCATMARK
- Devuelve cierto cuando el programa de usuario ya ha recibido todos los
datos urgentes. Esto se usa junto con SO_OOBINLINE. El argumento es
un puntero a un entero para el resultado de la comprobación.
- SIOCOUTQ
- Devuelve la cantidad de datos sin enviar en la cola de envío del
conector en el puntero a un valor entero pasado. El conector no debe estar
en estado LISTEN, de lo contrario se devolverá un error
(EINVAL).
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_KEEPALIVE.
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.
- 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.
- EAFNOTSUPPORT
- El tipo de dirección de conector pasado en sin_family no es
AF_INET.
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.
El soporte para la Notificación Explícita de la
Congestión, sendfile sin copias internas de datos, la
reorganización de paquetes y algunas extensiones SACK (DSACK) se
introdujo en la versión 2.4. El soporte para el Reconocimiento
Adelantado (FACK), el reciclado de conectores en estado TIME_WAIT, opciones
``keep-alive'' para conexiones individuales y las sysctls se introdujo en la
versión 2.3.
Los valores por omisión y las descripciones de la variables
sysctl dados más arriba son aplicables para la versión 2.4 del
núcleo.
Esta página de manual fue escrita originariamente por Andi
Kleen. Nivedita Singhvi la actualizó para la versión 2.4 de
Linux con la información del documento
Documentation/networking/ip-sysctls.txt de Alexey Kuznetsov.
socket(7), socket(2), ip(7), bind(2),
listen(2), accept(2), connect(2), sendmsg(2),
recvmsg(2), sendfile(2), sysctl(2),
getsockopt(2).
RFC793 para la especificación de TCP.
RFC1122 para los requisitos de TCP y una descripción del algoritmo
Nagle.
RFC1323 para las opciones TCP de fechado y de ampliación de ventana.
RFC1644 para una descripción de los peligros que conlleva el
``asesinato'' de los conectores TIME_WAIT.
RFC2481 para una descripción de la Notificación Explícita
de la Congestión.
RFC2581 para los algoritmos TCP de control de la congestión.
RFC2018 y RFC2883 para SACK y sus extensiones.