Articulo de referencia

Protocolo de control de transmisión

El Protocolo de Control de Transmisión ( TCP ) es uno de los principales protocolos del conjunto de protocolos de Internet , que proporciona una entrega fiable , ordenada y con ...

El Protocolo de Control de Transmisión ( TCP ) es uno de los principales protocolos del conjunto de protocolos de Internet , que proporciona una entrega fiable , ordenada y con comprobación de errores de un flujo de octetos ( bytes ) entre aplicaciones que se ejecutan en hosts que se comunican a través de una red IP. Su origen se remonta a la implementación inicial de la red, donde complementaba el Protocolo de Internet (IP). Por lo tanto, todo el conjunto se conoce comúnmente como TCP/IP .

Las principales aplicaciones de internet, como la World Wide Web , el correo electrónico, la administración remota , la transferencia de archivos y la transmisión de contenido multimedia , dependen de TCP, que forma parte de la capa de transporte del conjunto de protocolos TCP/IP. SSL/TLS suele funcionar sobre TCP. Hoy en día, TCP sigue siendo un protocolo fundamental para la mayoría de las comunicaciones en internet, garantizando una transferencia de datos fiable a través de diversas redes. [ 1 ]

TCP está orientado a la conexión , lo que significa que el emisor y el receptor primero deben establecer una conexión basada en parámetros acordados; lo hacen a través de un procedimiento de intercambio de tres vías . [ 2 ] El servidor debe estar escuchando (abierto pasivo) las solicitudes de conexión de los clientes antes de que se establezca una conexión. El intercambio de tres vías (abierto activo), la retransmisión y la detección de errores aumentan la confiabilidad pero alargan la latencia . Las aplicaciones que no requieren un servicio de flujo de datos confiable pueden usar el Protocolo de Datagramas de Usuario (UDP) en su lugar, que proporciona un servicio de datagramas sin conexión que prioriza el tiempo sobre la confiabilidad. TCP emplea la prevención de la congestión de la red . Sin embargo, existen vulnerabilidades en TCP, incluyendo la denegación de servicio , el secuestro de conexión , el veto TCP y el ataque de reinicio .

Origen histórico

En mayo de 1974, Vint Cerf y Bob Kahn describieron un protocolo de interconexión de redes para compartir recursos mediante la conmutación de paquetes entre nodos de red. [ 3 ] Los autores habían estado trabajando con Gérard Le Lann para incorporar conceptos del proyecto francés CYCLADES a la nueva red. [ 4 ] La especificación del protocolo resultante, RFC 675 ( Especificación del programa de control de transmisión de Internet ), fue escrita por Vint Cerf, Yogen Dalal y Carl Sunshine, y publicada en diciembre de 1974. [ 5 ] Contiene el primer uso documentado del término internet , como abreviatura de interconexión de redes .

El Programa de Control de Transmisión incorporó enlaces orientados a la conexión y servicios de datagramas entre hosts. En la versión 4, el monolítico Programa de Control de Transmisión se dividió en una arquitectura modular que consta del Protocolo de Control de Transmisión y el Protocolo de Internet . [ 6 ] [ 7 ] Esto dio como resultado un modelo de red que se conoció informalmente como TCP/IP , aunque formalmente se le denominó de diversas maneras como modelo de arquitectura de Internet del Departamento de Defensa ( modelo DoD para abreviar) o modelo DARPA . [ 8 ] [ 9 ] [ 10 ] Posteriormente, pasó a formar parte del conjunto de protocolos de Internet y se convirtió en sinónimo de este. TCP continúa evolucionando, con actualizaciones incrementales y mejores prácticas formalizadas en RFC como la RFC 9293 (2022). [ 11 ]

Los siguientes documentos de Internet Experiment Note (IEN) describen la evolución de TCP hasta su versión moderna: [ 12 ]

  • Especificación IEN #5 del programa de control de transmisión de Internet TCP versión 2 (marzo de 1977)
  • Especificación IEN #21 del programa de control de transmisión de interconexión de redes TCP versión 3 (enero de 1978)
  • IEN #27 Propuesta para el formato de encabezado de TCP versión 3.1 (febrero de 1978)
  • IEN #40 Protocolo de control de transmisión, borrador versión 4 (junio de 1978)
  • IEN #44 Últimos formatos de encabezado (junio de 1978)
  • Especificación IEN #55 del Protocolo de Control de Transmisión de Interconexión de Redes, Versión 4 (septiembre de 1978)
  • IEN #81 Protocolo de control de transmisión, versión 4 (febrero de 1979)
  • Protocolo de control de transmisión IEN n.° 112 (agosto de 1979)
  • IEN #124 PROTOCOLO ESTÁNDAR DE CONTROL DE TRANSMISIÓN DEL DOD (diciembre de 1979)

El protocolo TCP se estandarizó en enero de 1980 como RFC 761.

En 2004, Vint Cerf y Bob Kahn recibieron el Premio Turing por su trabajo fundamental sobre TCP/IP. [ 13 ] [ 14 ]

Función de red

El Protocolo de Control de Transmisión (TCP) proporciona un servicio de comunicación en un nivel intermedio entre un programa de aplicación y el Protocolo de Internet (IP). Ofrece conectividad entre hosts en la capa de transporte del modelo de Internet . Una aplicación no necesita conocer los mecanismos específicos para enviar datos a través de un enlace a otro host, como la fragmentación IP necesaria para adaptarse a la unidad de transmisión máxima del medio. En la capa de transporte, TCP gestiona todos los detalles de la comunicación y la transmisión, y presenta una abstracción de la conexión de red a la aplicación, generalmente a través de una interfaz de socket de red .

En los niveles inferiores de la pila de protocolos, debido a la congestión de la red , el equilibrio de carga del tráfico o el comportamiento impredecible de la red, los paquetes IP pueden perderse , duplicarse o entregarse fuera de orden . TCP detecta estos problemas, solicita la retransmisión de los datos perdidos, reorganiza los datos fuera de orden e incluso ayuda a minimizar la congestión de la red para reducir la aparición de otros problemas. Si los datos siguen sin entregarse, se notifica al origen de este fallo. Una vez que el receptor TCP ha reconstruido la secuencia de octetos transmitidos originalmente, los pasa a la aplicación receptora. De este modo, TCP abstrae la comunicación de la aplicación de los detalles subyacentes de la red.

TCP está optimizado para la entrega precisa en lugar de la entrega puntual y puede generar retrasos relativamente largos (del orden de segundos) mientras espera mensajes fuera de orden o retransmisiones de mensajes perdidos. Por lo tanto, no es particularmente adecuado para aplicaciones en tiempo real como la voz sobre IP . Para tales aplicaciones, generalmente se recomiendan protocolos como el Protocolo de Transporte en Tiempo Real (RTP) que opera sobre el Protocolo de Datagramas de Usuario (UDP). [ 15 ]

TCP es un servicio confiable de entrega de flujo de bytes que garantiza que todos los bytes recibidos serán idénticos y estarán en el mismo orden que los enviados. Dado que la transferencia de paquetes en muchas redes no es confiable, TCP logra esto mediante una técnica conocida como acuse de recibo positivo con retransmisión . Esto requiere que el receptor responda con un mensaje de acuse de recibo al recibir los datos. El remitente mantiene un registro de cada paquete que envía y un temporizador desde el momento en que se envió el paquete. El remitente retransmite un paquete si el temporizador expira antes de recibir el acuse de recibo. El temporizador es necesario en caso de que un paquete se pierda o se corrompa. [ 15 ]

Mientras que IP gestiona la entrega real de los datos, TCP realiza un seguimiento de los segmentos : las unidades individuales de transmisión de datos en las que se divide un mensaje para un enrutamiento eficiente a través de la red. Por ejemplo, cuando se envía un archivo HTML desde un servidor web, la capa de software TCP de ese servidor divide el archivo en segmentos y los reenvía individualmente a la capa de Internet en la pila de red . El software de la capa de Internet encapsula cada segmento TCP en un paquete IP añadiendo una cabecera que incluye (entre otros datos) la dirección IP de destino . Cuando el programa cliente en el ordenador de destino los recibe, el software TCP en la capa de transporte vuelve a ensamblar los segmentos y se asegura de que estén correctamente ordenados y sin errores mientras transmite el contenido del archivo a la aplicación receptora.

Estructura del segmento TCP

El Protocolo de Control de Transmisión (TCP) acepta datos de un flujo de datos, los divide en fragmentos y agrega una cabecera TCP, creando un segmento TCP. El segmento TCP se encapsula en un datagrama del Protocolo de Internet (IP) y se intercambia con los pares. [ 16 ]

El término paquete TCP aparece tanto en el uso informal como formal, mientras que en una terminología más precisa, segmento se refiere a la unidad de datos del protocolo TCP (PDU), datagrama [ 17 ] a la PDU IP y trama a la PDU de la capa de enlace de datos :

Los procesos transmiten datos llamando al TCP y pasando búferes de datos como argumentos. El TCP empaqueta los datos de estos búferes en segmentos y llama al módulo de Internet [por ejemplo, IP] para transmitir cada segmento al TCP de destino. [ 18 ]

Un segmento TCP consta de una cabecera y una sección de datos . La cabecera contiene 10 campos obligatorios y un campo de extensión opcional ( Opciones , octetos del 20 al 56 en la tabla). La sección de datos sigue a la cabecera y contiene los datos de carga útil de la aplicación. [ 19 ] La longitud de la sección de datos no se especifica en la cabecera; se puede calcular restando la longitud combinada de la cabecera y la cabecera IP de la longitud total del datagrama IP especificada en la cabecera IP.

Puerto de origen : 16 bits
Identifica el puerto de envío.
Puerto de destino : 16 bits
Identifica el puerto receptor.
Número de secuencia : 32 bits
Tiene una doble función:
  • Si el indicador SYN está activado (1), este es el número de secuencia inicial. El número de secuencia del primer byte de datos real y el número de confirmación en el ACK correspondiente son entonces este número de secuencia más 1.
  • Si el indicador SYN no está establecido (0), entonces este es el número de secuencia acumulado del primer byte de datos de este segmento para la sesión actual.
Número de acuse de recibo : 32 bits
Si se activa el indicador ACK, el valor de este campo es el siguiente número de secuencia que espera el remitente del ACK. Esto confirma la recepción de todos los bytes anteriores (si los hay). [ 21 ] El primer ACK enviado por cada extremo confirma el número de secuencia inicial del otro extremo, pero no datos. [ 22 ]
Desplazamiento de datos  (DOffset) : 4 bits
Especifica el tamaño de la cabecera TCP en palabras de 32 bits . El tamaño mínimo de la cabecera es de 5 palabras y el máximo de 15, lo que da como resultado un tamaño mínimo de 20 bytes y un máximo de 60 bytes, permitiendo hasta 40 bytes de opciones en la cabecera. Este campo recibe su nombre del hecho de que también representa el desplazamiento desde el inicio del segmento TCP hasta los datos propiamente dichos.
Reservado  (Rsrvd) : 4 bits
Para uso futuro, deben establecerse en cero; los remitentes no deben configurarlos y los receptores deben ignorarlos si están configurados, en ausencia de especificaciones e implementación adicionales.
Desde 2003 hasta 2017, el último bit (bit 103 del encabezado) fue definido como el indicador NS (Nonce Sum) por el RFC experimental 3540 , ECN-nonce. ECN-nonce nunca se generalizó y el RFC pasó a tener estatus histórico. [ 23 ]
Un borrador de RFC [ 24 ] propone un nuevo uso para este bit. El bit ahora se utiliza para negociar el uso de Accurate ECN .
Banderas : 8 bits
Contiene 8 indicadores de 1 bit (bits de control) como se muestra a continuación. Al usar tcpdump , un indicador activado se indica con el carácter entre paréntesis.
CWR  (W) : 1 bit
El indicador de ventana de congestión reducida (CWR) es establecido por el host emisor para indicar que recibió un segmento TCP con el indicador ECE establecido y que respondió en el mecanismo de control de congestión. [ 25 ] [ a ]
ECE  (E) : 1 bit
ECN-Echo tiene una doble función, dependiendo del valor del indicador SYN. ​​Indica:
  • Si el indicador SYN está activado (1), el par TCP es compatible con ECN . [ 26 ]
  • Si el indicador SYN no está activado (0), se recibió un paquete con el indicador Congestion Experienced activado (ECN=11) en su encabezado IP durante la transmisión normal. [ a ] ​​Esto sirve como indicación de congestión de la red (o congestión inminente) para el remitente TCP. [ 27 ]
URG  (U) : 1 bit
Indica que el campo de puntero Urgente es significativo.
ACK  (.) : 1 bit
Indica que el campo de acuse de recibo es significativo. Todos los paquetes posteriores al paquete SYN inicial enviado por el cliente deben tener este indicador activado. [ 28 ]
PSH  (P) : 1 bit
Función Push. Solicita que se envíen los datos almacenados en búfer desde el extremo del remitente a la aplicación receptora en el extremo del receptor. [ 19 ]
RST  (R) : 1 bit
Restablecer la conexión
SYN  (S) : 1 bit
Sincronizar los números de secuencia. Solo el primer paquete enviado desde cada extremo debe tener este indicador activado. Algunos otros indicadores y campos cambian de significado según este indicador, y algunos solo son válidos cuando está activado, mientras que otros lo están cuando está desactivado.
FIN  (F) : 1 bit
Último paquete del remitente
Ventana : 16 bits
El tamaño de la ventana de recepción , que especifica el número de unidades de tamaño de ventana [ b ] que el remitente de este segmento está dispuesto a recibir actualmente. [ c ] (Véase §  Control de flujo y §  Escalado de ventana ).
Suma de verificación : 16 bits
El campo de suma de verificación de 16 bits se utiliza para comprobar errores en la cabecera TCP, la carga útil y una pseudocabecera IP. La pseudocabecera consta de la dirección IP de origen , la dirección IP de destino , el número de protocolo para el protocolo TCP (6) y la longitud de las cabeceras TCP y la carga útil (en bytes).
Puntero urgente : 16 bits
Si se activa el indicador URG, este campo de 16 bits es un desplazamiento con respecto al número de secuencia que indica el último byte de datos urgentes.
Opciones  (Opción TCP) : Longitud variable, hasta 40 bytes (320 bits) ;Options length (bytes) = (Data Offset − 5) × 4; equivalent bit formula per RFC 9293: (Data Offset − 5) × 32
La longitud de este campo viene determinada por el campo Desplazamiento de datos . El relleno del encabezado TCP se utiliza para asegurar que el encabezado TCP finalice y los datos comiencen en un límite de 32 bits. El relleno se compone de ceros. [ 18 ]
Las opciones tienen hasta tres campos: Tipo de opción (1 byte), Longitud de opción (1 byte) y Datos de opción (variable). El campo Tipo de opción indica el tipo de opción y es el único campo obligatorio. Dependiendo del valor de Tipo de opción, se pueden configurar los dos campos siguientes. Longitud de opción indica la longitud total de la opción, y Datos de opción contiene los datos asociados a la opción, si corresponde. Por ejemplo, un byte de Tipo de opción de 1 indica que se trata de una opción sin operación, utilizada únicamente para relleno, y no tiene campos de Longitud de opción ni de Datos de opción a continuación. Un byte de Tipo de opción de 0 marca el final de las opciones y también es de un solo byte. Un byte de Tipo de opción de 2 se utiliza para indicar la opción Tamaño máximo de segmento, y irá seguido de un byte de Longitud de opción que especifica la longitud del campo MSS. Longitud de opción es la longitud total del campo de opciones dado, incluidos los campos Tipo de opción y Longitud de opción. Así, mientras que el valor MSS normalmente se expresa en dos bytes, Option-Length será 4. Como ejemplo, un campo de opción MSS con un valor de 0x05B4 se codifica como ( 0x02 0x04 0x05B4 ) en la sección de opciones TCP.
Algunas opciones solo se pueden enviar cuando SYN está activado; se indican a continuación como [SYN]. El tipo de opción y las longitudes estándar se dan como (Tipo de opción, Longitud de opción).
Los valores restantes de Option-Kind son históricos, obsoletos, experimentales, aún no estandarizados o no asignados. La asignación de números de opción la mantiene la Autoridad de Números Asignados de Internet (IANA). [ 33 ]
Datos : Variable
La carga útil del paquete TCP

Operación del protocolo

Diagrama de estados TCP simplificado

El protocolo TCP se divide en tres fases. El establecimiento de la conexión es un proceso de enlace en varios pasos que establece la conexión antes de la transferencia de datos . Una vez completada la transferencia de datos, la terminación de la conexión la cierra y libera todos los recursos asignados.

Una conexión TCP es gestionada por un sistema operativo a través de un recurso que representa el punto final local para las comunicaciones, el socket de Internet . Durante la vida útil de una conexión TCP, el punto final local experimenta una serie de cambios de estado : [ 34 ]

Establecimiento de conexión

Establecimiento de conexión

Antes de que un cliente intente conectarse con un servidor, este debe primero vincularse a un puerto y escuchar en él para abrirlo a las conexiones: esto se denomina apertura pasiva. Una vez establecida la apertura pasiva, un cliente puede establecer una conexión iniciando una apertura activa mediante el protocolo de enlace de tres vías (o de tres pasos):

  1. SYN : La apertura activa se realiza cuando el cliente envía un SYN al servidor. El cliente establece el número de secuencia del segmento a un valor aleatorio x.
  2. SYN-ACK : En respuesta, el servidor responde con un SYN-ACK. El número de acuse de recibo se establece en uno más que el número de secuencia recibido, es decir, x+1, y el número de secuencia que el servidor elige para el paquete es otro número aleatorio, y.
  3. ACK : Finalmente, el cliente envía un ACK al servidor. El número de secuencia se establece en el valor de acuse de recibo recibido, es decir, x+1, y el número de acuse de recibo se establece en uno más que el número de secuencia recibido, es decir, y+1.

Los pasos 1 y 2 establecen y confirman el número de secuencia en una dirección (cliente a servidor). Los pasos 2 y 3 establecen y confirman el número de secuencia en la otra dirección (servidor a cliente). Una vez completados estos pasos, tanto el cliente como el servidor han recibido confirmaciones y se establece una comunicación dúplex completa.

Terminación de la conexión

Terminación de la conexión
Diagrama de secuencia detallado de TCP close()

La fase de terminación de la conexión utiliza un protocolo de enlace de cuatro vías, donde cada extremo de la conexión finaliza de forma independiente. Cuando un extremo desea finalizar su parte de la conexión, transmite un paquete FIN, que el otro extremo confirma con un ACK. Por lo tanto, una finalización típica requiere un par de segmentos FIN y ACK de cada extremo TCP. Después de que el extremo que envió el primer FIN haya respondido con el ACK final, espera un tiempo de espera antes de cerrar definitivamente la conexión, durante el cual el puerto local no está disponible para nuevas conexiones; este estado permite al cliente TCP reenviar la confirmación final al servidor en caso de que el ACK se pierda en tránsito. La duración del tiempo depende de la implementación, pero algunos valores comunes son 30 segundos, 1 minuto y 2 minutos. Después del tiempo de espera, el cliente entra en el estado CERRADO y el puerto local vuelve a estar disponible para nuevas conexiones. [ 35 ]

También es posible terminar la conexión mediante un intercambio de tres vías, cuando el host A envía un FIN y el host B responde con un FIN y un ACK (combinando dos pasos en uno) y el host A responde con un ACK. [ 36 ]

Algunos sistemas operativos, como Linux [ 37 ], implementan una secuencia de cierre semidúplex. Si el host cierra activamente una conexión, mientras aún tiene datos entrantes sin leer, envía la señal RST (perdiendo los datos recibidos) en lugar de FIN. Esto garantiza que una aplicación TCP sepa que se ha producido una pérdida de datos . [ 38 ]

Una conexión puede estar en un estado semiabierto , en cuyo caso una de las partes ha terminado la conexión, pero la otra no. La parte que ha terminado ya no puede enviar datos a la conexión, pero la otra sí. La parte que termina debe seguir leyendo los datos hasta que la otra parte también termine. [ 39 ] [ 40 ]

Uso de recursos

La mayoría de las implementaciones asignan una entrada en una tabla que relaciona una sesión con un proceso del sistema operativo en ejecución. Dado que los paquetes TCP no incluyen un identificador de sesión, ambos extremos identifican la sesión mediante la dirección y el puerto del cliente. Cada vez que se recibe un paquete, la implementación TCP debe consultar esta tabla para encontrar el proceso de destino. Cada entrada en la tabla se conoce como Bloque de Control de Transmisión (TCB). Contiene información sobre los extremos (dirección IP y puerto), el estado de la conexión, datos de los paquetes que se intercambian y búferes para el envío y la recepción de datos.

El número de sesiones en el servidor solo está limitado por la memoria y puede aumentar a medida que llegan nuevas conexiones, pero el cliente debe asignar un puerto efímero antes de enviar el primer SYN al servidor. Este puerto permanece asignado durante toda la conversación y limita efectivamente el número de conexiones salientes desde cada una de las direcciones IP del cliente. Si una aplicación no cierra correctamente las conexiones innecesarias, un cliente puede quedarse sin recursos y no poder establecer nuevas conexiones TCP, incluso desde otras aplicaciones.

Ambos extremos también deben asignar espacio para los paquetes no confirmados y los datos recibidos (pero no leídos).

Transferencia de datos

El Protocolo de Control de Transmisión (TCP) difiere en varias características clave en comparación con el Protocolo de Datagramas de Usuario (UDP) :

  • Transferencia de datos ordenada: el host de destino reorganiza los segmentos según un número de secuencia [ 15 ].
  • Retransmisión de paquetes perdidos: cualquier flujo acumulativo no reconocido se retransmite [ 15 ].
  • Transferencia de datos sin errores: los paquetes corruptos se tratan como perdidos y se retransmiten [ 16 ].
  • Control de flujo: limita la velocidad a la que un emisor transfiere datos para garantizar una entrega fiable. El receptor informa continuamente al emisor sobre la cantidad de datos que puede recibir. Cuando el búfer del host receptor se llena, la siguiente confirmación suspende la transferencia y permite que se procesen los datos que contiene. [ 15 ]
  • Control de congestión: los paquetes perdidos (presumiblemente debido a la congestión) provocan una reducción en la tasa de entrega de datos [ 15 ].

Transmisión fiable

TCP utiliza un número de secuencia para identificar cada byte de datos. Este número de secuencia identifica el orden de los bytes enviados desde cada equipo, de modo que los datos puedan reconstruirse en orden, independientemente de cualquier entrega desordenada que pueda ocurrir. El transmisor elige el número de secuencia del primer byte para el primer paquete, que se marca como SYN. ​​Este número puede ser arbitrario y, de hecho, debería ser impredecible para protegerse contra ataques de predicción de secuencia TCP .

Los acuses de recibo (ACK) son enviados por el receptor de datos con un número de secuencia para informar al remitente que los datos se han recibido hasta el byte especificado. Los ACK no implican que los datos se hayan entregado a la aplicación; simplemente indican que ahora es responsabilidad del receptor entregarlos.

La fiabilidad se logra mediante la detección por parte del remitente de los datos perdidos y su retransmisión. TCP utiliza dos técnicas principales para identificar la pérdida: el tiempo de espera de retransmisión (RTO) y los acuses de recibo acumulativos duplicados (DupAcks).

Cuando se retransmite un segmento TCP, conserva el mismo número de secuencia que el intento de entrega original. Esta confusión entre la entrega y el orden lógico de los datos implica que, al recibirse una confirmación tras una retransmisión, el remitente no puede determinar si se está confirmando la transmisión original o la retransmisión, lo que se conoce como ambigüedad de retransmisión . [ 41 ] TCP presenta complejidad debido a la ambigüedad de retransmisión. [ 42 ]

retransmisión basada en ACK duplicado

Si se pierde un solo segmento (por ejemplo, el segmento número 100) en un flujo, el receptor no puede confirmar los paquetes posteriores a ese segmento (100) porque utiliza confirmaciones acumulativas. Por lo tanto, el receptor confirma el paquete 99 nuevamente al recibir otro paquete de datos. Esta confirmación duplicada se utiliza como señal de pérdida de paquetes. Es decir, si el emisor recibe tres confirmaciones duplicadas, retransmite el último paquete no confirmado. Se utiliza un umbral de tres porque la red puede reordenar los segmentos, lo que provoca confirmaciones duplicadas. Se ha demostrado que este umbral evita retransmisiones espurias debidas a la reordenación. [ 43 ] Algunas implementaciones de TCP utilizan confirmaciones selectivas (SACK) para proporcionar información explícita sobre los segmentos que se han recibido. Esto mejora considerablemente la capacidad de TCP para retransmitir los segmentos correctos.

La ambigüedad de retransmisión puede causar retransmisiones rápidas espurias y evitación de congestión si hay reordenamiento más allá del umbral de acuse de recibo duplicado. [ 44 ] En las últimas dos décadas se ha observado un mayor reordenamiento de paquetes en Internet [ 45 ] lo que llevó a las implementaciones de TCP, como la del kernel de Linux, a adoptar métodos heurísticos para escalar el umbral de acuse de recibo duplicado. [ 46 ] Recientemente, se han realizado esfuerzos para eliminar por completo las retransmisiones rápidas basadas en ACK duplicados y reemplazarlas por retransmisiones basadas en temporizadores. [ 47 ] (No confundir con el RTO clásico que se analiza más adelante). El algoritmo de detección de pérdida basado en el tiempo llamado Reconocimiento Reciente (RACK) [ 48 ] se ha adoptado como algoritmo predeterminado en Linux y Windows. [ 49 ]

Retransmisión basada en tiempo de espera

Cuando un remitente transmite un segmento, inicializa un temporizador con una estimación conservadora del tiempo de llegada del acuse de recibo. El segmento se retransmite si el temporizador expira, con un nuevo umbral de tiempo de espera del doble del valor anterior, lo que resulta en un comportamiento de retroceso exponencial . Normalmente, el valor inicial del temporizador es RTT suavizado + max( G , 4 × variación de RTT) , donde G es la granularidad del reloj. [ 50 ] Esto protege contra el tráfico de transmisión excesivo debido a actores defectuosos o maliciosos, como los atacantes de denegación de servicio de intermediario .

Las estimaciones precisas de RTT son importantes para la recuperación de pérdidas, ya que permiten a un remitente asumir que un paquete no confirmado se ha perdido después de que transcurra un tiempo suficiente (es decir, determinar el tiempo RTO). [ 51 ] La ambigüedad de la retransmisión puede llevar a que la estimación de RTT de un remitente sea imprecisa. [ 51 ] En un entorno con RTT variables, pueden producirse tiempos de espera espurios: [ 52 ] si el RTT se subestima, entonces el RTO se activa y desencadena una retransmisión innecesaria y un inicio lento. Después de una retransmisión espuria, cuando llegan los acuses de recibo de las transmisiones originales, el remitente puede creer que están acusando recibo de la retransmisión y concluir, incorrectamente, que los segmentos enviados entre la transmisión original y la retransmisión se han perdido, causando más retransmisiones innecesarias hasta el punto en que el enlace realmente se congestiona; [ 53 ] [ 54 ] el acuse de recibo selectivo puede reducir este efecto. [ 55 ] RFC 6298 especifica que las implementaciones no deben usar segmentos retransmitidos al estimar el RTT. [ 56 ] El algoritmo de Karn asegura que se producirá una buena estimación del RTT —eventualmente— al esperar hasta que haya un acuse de recibo inequívoco antes de ajustar el RTO. [ 57 ] Sin embargo, después de retransmisiones espurias, puede pasar un tiempo significativo antes de que llegue dicho acuse de recibo inequívoco, lo que degrada el rendimiento en el intervalo. [ 58 ] Las marcas de tiempo TCP también resuelven el problema de la ambigüedad de la retransmisión al establecer el RTO, [ 56 ] aunque no necesariamente mejoran la estimación del RTT. [ 59 ]

Detección de errores

Los números de secuencia permiten a los receptores descartar paquetes duplicados y ordenar correctamente los paquetes que llegan fuera de orden. Los acuses de recibo permiten a los remitentes determinar cuándo retransmitir los paquetes perdidos.

Para garantizar la corrección, se incluye un campo de suma de comprobación; consulte la sección "  Cálculo de la suma de comprobación" para obtener más detalles. La suma de comprobación TCP es una comprobación débil según los estándares modernos y normalmente se combina con una comprobación de integridad CRC en la capa 2 , por debajo de TCP e IP, como la que se utiliza en PPP o en la trama Ethernet . Sin embargo, es común la introducción de errores en los paquetes entre saltos protegidos por CRC, y la suma de comprobación TCP de 16 bits detecta la mayoría de ellos. [ 60 ]

Control de flujo

TCP utiliza un protocolo de control de flujo de extremo a extremo para evitar que el remitente envíe datos demasiado rápido, impidiendo que el receptor TCP los reciba y procese de forma fiable. Contar con un mecanismo de control de flujo es esencial en un entorno donde se comunican máquinas con diferentes velocidades de red. Por ejemplo, si un PC envía datos a un teléfono inteligente que procesa lentamente los datos recibidos, el teléfono inteligente debe poder regular el flujo de datos para no saturarse. [ 15 ]

TCP utiliza un protocolo de control de flujo de ventana deslizante . En cada segmento TCP, el receptor especifica en el campo de ventana de recepción la cantidad de datos adicionales recibidos (en bytes) que está dispuesto a almacenar en búfer para la conexión. El host emisor solo puede enviar hasta esa cantidad de datos antes de tener que esperar una confirmación y una actualización de la ventana de recepción por parte del host receptor.

Los números de secuencia TCP y las ventanas de recepción se comportan de forma muy similar a un reloj. La ventana de recepción se desplaza cada vez que el receptor recibe y confirma un nuevo segmento de datos. Una vez que se agotan los números de secuencia, el contador vuelve a cero.

Cuando un receptor anuncia un tamaño de ventana de 0, el emisor deja de enviar datos e inicia su temporizador de persistencia . Este temporizador protege a TCP de un posible bloqueo que podría ocurrir si se pierde una actualización posterior del tamaño de ventana por parte del receptor. El emisor no puede enviar más datos hasta recibir una nueva actualización del tamaño de ventana. Cuando expira el temporizador de persistencia, el emisor TCP intenta recuperarse enviando un paquete pequeño para que el receptor responda enviando otra confirmación con el nuevo tamaño de ventana.

Si un receptor procesa los datos entrantes en pequeños incrementos, puede anunciar repetidamente una pequeña ventana de recepción. Esto se conoce como el síndrome de la ventana tonta , ya que resulta ineficiente enviar solo unos pocos bytes de datos en un segmento TCP, dado el considerable coste adicional de la cabecera TCP.

Control de congestión

El último aspecto principal de TCP es el control de congestión . TCP utiliza diversos mecanismos para lograr un alto rendimiento y evitar el colapso por congestión , una situación de bloqueo que degrada gravemente el rendimiento de la red . Estos mecanismos controlan la velocidad de entrada de datos a la red, manteniendo el flujo de datos por debajo de una velocidad que desencadenaría el colapso. Además, proporcionan una asignación aproximadamente equitativa entre los flujos, basada en el principio de máximo-mínimo.

Los remitentes utilizan las confirmaciones de recepción de datos, o la ausencia de ellas, para inferir el estado de la red entre el emisor y el receptor TCP. Junto con los temporizadores, los emisores y receptores TCP pueden modificar el comportamiento del flujo de datos. Esto se conoce generalmente como control de congestión o prevención de congestión.

Las implementaciones modernas de TCP contienen cuatro algoritmos entrelazados: inicio lento , evitación de congestión , retransmisión rápida y recuperación rápida . [ 61 ]

Además, los remitentes emplean un tiempo de espera de retransmisión (RTO) que se basa en el tiempo de ida y vuelta (RTT) estimado entre el remitente y el receptor, así como en la varianza de este tiempo de ida y vuelta. [ 62 ] Hay sutilezas en la estimación del RTT. Por ejemplo, los remitentes deben tener cuidado al calcular muestras de RTT para paquetes retransmitidos; normalmente utilizan el algoritmo de Karn o marcas de tiempo TCP. [ 29 ] Estas muestras individuales de RTT se promedian a lo largo del tiempo para crear un tiempo de ida y vuelta suavizado (SRTT) utilizando el algoritmo de Jacobson . Este valor SRTT es el que se utiliza como estimación del tiempo de ida y vuelta.

Mejorar TCP para gestionar de forma fiable las pérdidas, minimizar los errores, controlar la congestión y alcanzar altas velocidades en entornos de muy alta velocidad son áreas de investigación y desarrollo de estándares en constante evolución. Como resultado, existen diversas variantes de algoritmos para evitar la congestión de TCP .

Tamaño máximo del segmento

El tamaño máximo de segmento (MSS) es la cantidad máxima de datos, especificada en bytes, que TCP está dispuesto a recibir en un solo segmento. Para un rendimiento óptimo, el MSS debe configurarse lo suficientemente pequeño para evitar la fragmentación de IP , que puede provocar pérdida de paquetes y retransmisiones excesivas. Para lograr esto, normalmente cada extremo anuncia el MSS mediante la opción MSS al establecer la conexión TCP. El valor de esta opción se deriva del tamaño de la unidad de transmisión máxima (MTU) de la capa de enlace de datos de las redes a las que están conectados directamente el emisor y el receptor. Los emisores TCP pueden usar el descubrimiento de MTU de ruta para inferir la MTU mínima a lo largo de la ruta de red entre el emisor y el receptor, y usarla para ajustar dinámicamente el MSS y evitar la fragmentación de IP dentro de la red.

El anuncio de MSS también puede llamarse negociación de MSS, pero, estrictamente hablando, el MSS no se negocia . Se permiten dos valores de MSS completamente independientes para las dos direcciones del flujo de datos en una conexión TCP, [ 63 ] [ 18 ] por lo que no hay necesidad de acordar una configuración de MSS común para una conexión bidireccional.

Agradecimientos selectivos

Depender exclusivamente del esquema de acuse de recibo acumulativo empleado por el TCP original puede generar ineficiencias cuando se pierden paquetes. Por ejemplo, supongamos que los bytes con número de secuencia del 1000 al 10999 se envían en 10 segmentos TCP diferentes de igual tamaño, y el segundo segmento (números de secuencia del 2000 al 2999) se pierde durante la transmisión. En un protocolo de acuse de recibo acumulativo puro, el receptor solo puede enviar un valor de ACK acumulativo de 2000 (el número de secuencia inmediatamente posterior al último número de secuencia de los datos recibidos) y no puede indicar que recibió correctamente los bytes del 3000 al 10999. Por lo tanto, el remitente podría tener que reenviar todos los datos a partir del número de secuencia 2000.

Para mitigar este problema, TCP emplea la opción de acuse de recibo selectivo (SACK) , definida en 1996 en la RFC 2018 , que permite al receptor confirmar la recepción de bloques discontinuos de paquetes recibidos correctamente, además del número de secuencia inmediatamente posterior al último número de secuencia del último byte contiguo recibido sucesivamente, como en el acuse de recibo básico de TCP. El acuse de recibo puede incluir varios bloques SACK , donde cada bloque SACK se transmite mediante el borde izquierdo del bloque (el primer número de secuencia del bloque) y el borde derecho del bloque (el número de secuencia inmediatamente posterior al último número de secuencia del bloque), siendo un bloque un rango contiguo que el receptor recibió correctamente. En el ejemplo anterior, el receptor enviaría un segmento ACK con un valor ACK acumulativo de 2000 y una cabecera de opción SACK con los números de secuencia 3000 y 11000. En consecuencia, el remitente retransmitiría únicamente el segundo segmento con los números de secuencia del 2.000 al 2.999.

Un emisor TCP puede interpretar la entrega de un segmento fuera de orden como un segmento perdido. En ese caso, retransmitirá el segmento anterior al paquete fuera de orden y reducirá la velocidad de entrega de datos para esa conexión. La opción duplicate-SACK, una extensión de la opción SACK definida en mayo de 2000 en la RFC 2883 , resuelve este problema. Cuando el receptor TCP detecta un segundo paquete duplicado, envía un D-ACK para indicar que no se perdieron segmentos, lo que permite al emisor TCP restablecer la velocidad de transmisión más alta.

La opción SACK no es obligatoria y solo se activa si ambas partes la admiten. Esto se negocia al establecer la conexión. SACK utiliza una opción de encabezado TCP (consulte la  sección Estructura del segmento TCP para obtener más detalles). El uso de SACK se ha generalizado: todas las pilas TCP más populares lo admiten. El acuse de recibo selectivo también se utiliza en el Protocolo de transmisión de control de flujo (SCTP).

Los acuses de recibo selectivos pueden ser «rechazados», lo que implica que el receptor descarta unilateralmente los datos confirmados selectivamente. El RFC 2018 desaconsejaba este comportamiento, pero no lo prohibía, permitiendo a los receptores la opción de revocar el acuse de recibo si, por ejemplo, se quedaban sin espacio en el búfer. [ 64 ] La posibilidad de revocar el acuse de recibo conlleva una complejidad de implementación tanto para los emisores como para los receptores, y también impone costes de memoria al emisor. [ 65 ]

Escalado de ventana

Para un uso más eficiente de redes de alto ancho de banda, se puede utilizar un tamaño de ventana TCP mayor. Un campo de tamaño de ventana TCP de 16 bits controla el flujo de datos y su valor está limitado a 65 535 bytes. Dado que el campo de tamaño no se puede ampliar más allá de este límite, se utiliza un factor de escala. La opción de escala de ventana TCP , tal como se define en la RFC 1323 , es una opción que se utiliza para aumentar el tamaño máximo de la ventana a 1 gigabyte. Escalar a estos tamaños de ventana mayores es necesario para la optimización de TCP .

La opción de escala de ventana se utiliza únicamente durante el protocolo de enlace TCP de tres vías. El valor de escala de ventana representa el número de bits que se desplazan a la izquierda en el campo de tamaño de ventana de 16 bits al interpretarlo. Este valor puede configurarse de 0 (sin desplazamiento) a 14 para cada dirección de forma independiente. Ambas partes deben enviar la opción en sus segmentos SYN para habilitar el escalado de ventana en cualquier dirección.

Algunos enrutadores y cortafuegos de paquetes modifican el factor de escala de la ventana durante una transmisión. Esto provoca que los emisores y receptores asuman diferentes tamaños de ventana TCP. El resultado es un tráfico inestable que puede ser muy lento. El problema se observa en algunos sitios detrás de un enrutador defectuoso. [ 66 ]

Marcas de tiempo TCP

Las marcas de tiempo TCP, definidas en el RFC 1323 en 1992, ayudan a TCP a determinar el orden en que se enviaron los paquetes. Normalmente, las marcas de tiempo TCP no están alineadas con el reloj del sistema y comienzan con un valor aleatorio. Muchos sistemas operativos incrementan la marca de tiempo por cada milisegundo transcurrido; sin embargo, el RFC solo establece que los incrementos deben ser proporcionales.

Hay dos campos de marca de tiempo:

  • un valor de marca de tiempo del remitente de 4 bytes (mi marca de tiempo)
  • un valor de marca de tiempo de respuesta de eco de 4 bytes (la marca de tiempo más reciente recibida de usted).

Las marcas de tiempo TCP se utilizan en un algoritmo conocido como Protección contra Números de Secuencia Desbordados ( PAWS , por sus siglas en inglés). PAWS se utiliza cuando la ventana de recepción cruza el límite de desbordamiento del número de secuencia. En caso de que un paquete se haya retransmitido potencialmente, responde a la pregunta: "¿Este número de secuencia está en los primeros 4  GB o en los segundos?". La marca de tiempo se utiliza para desempatar.

Además, el algoritmo de detección de Eifel utiliza marcas de tiempo TCP para determinar si las retransmisiones se producen porque se pierden paquetes o simplemente están fuera de orden. [ 67 ]

Las marcas de tiempo TCP están habilitadas de forma predeterminada en Linux, [ 68 ] y deshabilitadas de forma predeterminada en Windows Server 2008 , 2012 y 2016. [ 69 ]

Las estadísticas recientes muestran que el nivel de adopción de marcas de tiempo TCP se ha estancado en aproximadamente un 40%, debido a que Windows Server dejó de ofrecer soporte desde Windows Server 2008. [ 70 ]

Datos fuera de banda

Es posible interrumpir o cancelar la transmisión en cola en lugar de esperar a que finalice. Esto se logra especificando los datos como urgentes . Esto marca la transmisión como datos fuera de banda (OOB) e indica al programa receptor que la procese inmediatamente. Una vez finalizada, TCP informa a la aplicación y reanuda la cola de transmisión. Un ejemplo es cuando se utiliza TCP para una sesión de inicio de sesión remota, donde el usuario puede enviar una secuencia de teclas que interrumpe o cancela el programa que se ejecuta remotamente sin esperar a que finalice su transferencia actual. [ 15 ]

El puntero urgente solo altera el procesamiento en el host remoto y no acelera ningún procesamiento en la propia red. La capacidad se implementa de forma diferente o deficiente en distintos sistemas, o puede que no sea compatible. Cuando está disponible, es prudente asumir que solo se gestionarán de forma fiable bytes individuales de datos OOB. [ 71 ] [ 72 ] Dado que la función no se utiliza con frecuencia, no se ha probado adecuadamente en algunas plataformas y se ha asociado con vulnerabilidades , como WinNuke .

Obligar a entregar los datos

Normalmente, TCP espera 200  ms para enviar un paquete completo de datos ( el algoritmo de Nagle intenta agrupar mensajes pequeños en un solo paquete). Esta espera genera pequeños retrasos, pero potencialmente graves, si se repite constantemente durante una transferencia de archivos. Por ejemplo, un bloque de envío típico sería de 4  KB, un MSS típico es de 1460, por lo que se envían 2 paquetes en una  red Ethernet de 10 Mbit/s, tardando aproximadamente 1,2  ms cada uno, seguidos de un tercero que transporta los 1176 restantes después de una  pausa de 197 ms porque TCP está esperando a que se llene el búfer. En el caso de Telnet, cada pulsación de tecla del usuario es devuelta por el servidor antes de que el usuario pueda verla en la pantalla. Este retraso resultaría muy molesto.

Al configurar la opción de socketTCP_NODELAY , se anula el retardo de envío predeterminado de 200  ms. Los programas de aplicación utilizan esta opción de socket para forzar el envío de la salida después de escribir un carácter o una línea de caracteres.

El RFC 793 define el PSHbit push como "un mensaje a la pila TCP receptora para enviar estos datos inmediatamente a la aplicación receptora". [ 15 ] No hay forma de indicarlo o controlarlo en el espacio de usuario usando sockets de Berkeley ; solo lo controla la pila de protocolos . [ 73 ]

Vulnerabilidades

TCP puede ser atacado de diversas maneras. Los resultados de una evaluación de seguridad exhaustiva de TCP, junto con posibles mitigaciones para los problemas identificados, se publicaron en 2009, [ 74 ] y se continuó trabajando en el IETF hasta 2012. [ 75 ] Las vulnerabilidades notables incluyen denegación de servicio, secuestro de conexión, veto TCP y ataque de reinicio TCP .

Denegación de servicio

Al usar una dirección IP falsificada y enviar repetidamente paquetes SYN ensamblados a propósito , seguidos de muchos paquetes ACK, los atacantes pueden hacer que el servidor consuma grandes cantidades de recursos para mantener el seguimiento de las conexiones falsas. Esto se conoce como un ataque de inundación SYN . ​​Las soluciones propuestas para este problema incluyen cookies SYN y acertijos criptográficos, aunque las cookies SYN vienen con su propio conjunto de vulnerabilidades. [ 76 ] Sockstress es un ataque similar, que podría mitigarse con la administración de recursos del sistema . [ 77 ] Un ataque DoS avanzado que involucra la explotación del temporizador de persistencia TCP fue analizado en Phrack No. 66. [ 78 ] Las inundaciones PUSH y ACK son otras variantes. [ 79 ]

secuestro de conexión

Un atacante capaz de interceptar una sesión TCP y redirigir paquetes puede secuestrar una conexión TCP. Para ello, obtiene el número de secuencia de la comunicación en curso y falsifica un segmento que se asemeja al siguiente segmento del flujo. Un secuestro simple puede provocar que un paquete sea aceptado erróneamente en un extremo. Cuando el host receptor reconoce el segmento falso, se pierde la sincronización. [ 80 ] El secuestro puede combinarse con la suplantación de ARP u otros ataques de enrutamiento que permiten al atacante tomar el control permanente de la conexión TCP.

Suplantar una dirección IP diferente no era difícil antes de la RFC 1948 , ya que el número de secuencia inicial era fácil de adivinar. Las implementaciones anteriores permitían a un atacante enviar a ciegas una secuencia de paquetes que el receptor creería que provenían de una dirección IP diferente, sin necesidad de interceptar la comunicación mediante ataques ARP o de enrutamiento: bastaba con asegurarse de que el host legítimo de la dirección IP suplantada estuviera caído, o provocarlo mediante ataques de denegación de servicio . Por eso, ahora el número de secuencia inicial se elige aleatoriamente.

veto TCP

Un atacante que pueda interceptar y predecir el tamaño del siguiente paquete que se enviará puede lograr que el receptor acepte una carga útil maliciosa sin interrumpir la conexión existente. El atacante inyecta un paquete malicioso con el número de secuencia y el tamaño de carga útil del siguiente paquete esperado. Cuando finalmente se recibe el paquete legítimo, se descubre que tiene el mismo número de secuencia y longitud que un paquete ya recibido y se descarta silenciosamente como un paquete duplicado normal; el paquete malicioso veta el paquete legítimo. A diferencia del secuestro de conexión, la conexión nunca se desincroniza y la comunicación continúa con normalidad después de que se acepta la carga útil maliciosa. El veto TCP le da al atacante menos control sobre la comunicación, pero hace que el ataque sea particularmente resistente a la detección. La única evidencia para el receptor de que algo anda mal es un solo paquete duplicado, algo normal en una red IP. El remitente del paquete vetado nunca ve ninguna evidencia de un ataque. [ 81 ]

puertos TCP

Una conexión TCP se identifica mediante una cuádrupla formada por la dirección de origen, el puerto de origen , la dirección de destino y el puerto de destino. [ d ] [ 82 ] [ 83 ] Los números de puerto se utilizan para identificar diferentes servicios y para permitir múltiples conexiones entre hosts. [ 16 ] TCP utiliza números de puerto de 16 bits , lo que proporciona 65.536 valores posibles para cada uno de los puertos de origen y destino. [ 19 ] La dependencia de la identidad de la conexión en las direcciones significa que las conexiones TCP están vinculadas a una única ruta de red; TCP no puede utilizar otras rutas que los hosts con múltiples interfaces de red tienen disponibles, y las conexiones se interrumpen si cambia la dirección de un punto final. [ 84 ]

Los números de puerto se clasifican en tres categorías básicas: conocidos, registrados y dinámicos o privados. Los puertos conocidos son asignados por la Autoridad de Números Asignados de Internet (IANA) y suelen ser utilizados por procesos del sistema. Las aplicaciones conocidas que se ejecutan como servidores y escuchan pasivamente las conexiones suelen utilizar estos puertos. Algunos ejemplos incluyen: FTP (20 y 21), SSH (22), TELNET (23), SMTP (25), HTTP sobre SSL/TLS (443) y HTTP (80). [ e ] Los puertos registrados (1024–49151) pueden ser asignados a servicios específicos por desarrolladores externos, pero algunos sistemas operativos también asignan puertos de cliente efímeros de este rango. Los puertos dinámicos o privados (49152–65535) no están asociados con ningún servicio registrado y se utilizan comúnmente de forma exclusiva como puertos efímeros para conexiones de cliente temporales.

La traducción de direcciones de red (NAT, por sus siglas en inglés) suele utilizar números de puerto dinámicos, en el lado público, para desambiguar el flujo de tráfico que pasa entre una red pública y una subred privada , lo que permite que muchas direcciones IP (y sus puertos) en la subred sean atendidas por una única dirección pública.

Desarrollo

TCP es un protocolo complejo. Sin embargo, aunque se han realizado y propuesto mejoras significativas a lo largo de los años, su funcionamiento más básico no ha cambiado significativamente desde su primera especificación RFC 675 en 1974, y la especificación v4 RFC 793 , publicada en septiembre de 1981. RFC 1122 , publicada en octubre de 1989, aclaró una serie de requisitos de implementación del protocolo TCP. Una lista de las 8 especificaciones requeridas y más de 20 mejoras altamente recomendadas está disponible en RFC 7414. Entre esta lista se encuentra RFC 2581 , Control de Congestión TCP, uno de los RFC relacionados con TCP más importantes de los últimos años, que describe algoritmos actualizados que evitan la congestión indebida. En 2001, se escribió RFC 3168 para describir la Notificación Explícita de Congestión (ECN), un mecanismo de señalización para evitar la congestión.

El algoritmo original de prevención de congestión de TCP se conocía como TCP Tahoe , pero desde entonces se han propuesto muchos algoritmos alternativos (entre ellos TCP Reno , TCP Vegas , FAST TCP , TCP New Reno y TCP Hybla ).

El protocolo TCP multipath (MPTCP) [ 85 ] [ 86 ] es un esfuerzo continuo dentro del IETF que busca permitir que una conexión TCP utilice múltiples rutas para maximizar el uso de recursos y aumentar la redundancia. La redundancia que ofrece el protocolo TCP multipath en el contexto de redes inalámbricas permite el uso simultáneo de diferentes redes, lo que proporciona un mayor rendimiento y mejores capacidades de transferencia. El protocolo TCP multipath también ofrece beneficios de rendimiento en entornos de centros de datos. [ 87 ] La ​​implementación de referencia [ 88 ] del protocolo TCP multipath se desarrolló en el kernel de Linux. [ 89 ] El protocolo TCP multipath se utiliza para admitir la aplicación de reconocimiento de voz Siri en iPhones, iPads y Macs. [ 90 ]

tcpcrypt es una extensión propuesta en julio de 2010 para proporcionar cifrado a nivel de transporte directamente en TCP. Está diseñada para funcionar de forma transparente y no requiere ninguna configuración. A diferencia de TLS (SSL), tcpcrypt no proporciona autenticación, pero ofrece primitivas sencillas a la aplicación para que la implementen. El RFC de tcpcrypt fue publicado por la IETF en mayo de 2019. [ 91 ]

TCP Fast Open es una extensión para acelerar la apertura de conexiones TCP sucesivas entre dos puntos finales. Funciona omitiendo el protocolo de enlace de tres vías mediante una cookie criptográfica . Es similar a una propuesta anterior llamada T/TCP , que no fue ampliamente adoptada debido a problemas de seguridad. [ 92 ] TCP Fast Open se publicó como RFC 7413 en 2014. [ 93 ]

Propuesta en mayo de 2013, la Reducción de Tasa Proporcional (PRR) es una extensión de TCP desarrollada por ingenieros de Google. PRR garantiza que el tamaño de la ventana TCP después de la recuperación sea lo más cercano posible al umbral de inicio lento . [ 94 ] El algoritmo está diseñado para mejorar la velocidad de recuperación y es el algoritmo de control de congestión predeterminado en los núcleos de Linux 3.2+. [ 95 ]

Propuestas obsoletas

TCP Cookie Transactions (TCPCT) es una extensión propuesta en diciembre de 2009 [ 96 ] para proteger los servidores contra ataques de denegación de servicio. A diferencia de las cookies SYN, TCPCT no entra en conflicto con otras extensiones TCP, como el escalado de ventanas . TCPCT se diseñó debido a las necesidades de DNSSEC , donde los servidores deben gestionar un gran número de conexiones TCP de corta duración. En 2016, TCPCT quedó obsoleto en favor de TCP Fast Open. El estado del RFC original se cambió a histórico . [ 97 ]

Implementaciones de hardware

Una forma de superar los requisitos de potencia de procesamiento de TCP es mediante la creación de implementaciones de hardware, conocidas como motores de descarga de TCP (TOE). El principal problema de los TOE es su difícil integración en sistemas informáticos, que requiere modificaciones importantes en el sistema operativo del ordenador o dispositivo.

Se ha demostrado que TCP de baja potencia ( TCPLp ) funciona en entornos con recursos limitados donde, de otro modo, se prefiere CoAP basado en UDP. [ 98 ] [ 99 ]

Imagen de alambre y osificación

Los datos de cable de TCP brindan oportunidades significativas de recopilación y modificación de información a los observadores en la ruta, ya que los metadatos del protocolo se transmiten en texto plano . [ 100 ] [ 101 ] Si bien esta transparencia es útil para los operadores de red [ 102 ] e investigadores, [ 103 ] la información recopilada de los metadatos del protocolo puede reducir la privacidad del usuario final. [ 104 ] Esta visibilidad y maleabilidad de los metadatos ha llevado a que TCP sea difícil de extender —un caso de osificación del protocolo— ya que cualquier nodo intermedio (una ' caja intermedia ') puede tomar decisiones basadas en esos metadatos o incluso modificarlos, [ 105 ] [ 106 ] rompiendo el principio de extremo a extremo . [ 107 ] Una medición encontró que un tercio de las rutas a través de Internet encuentran al menos un intermediario que modifica los metadatos de TCP, y el 6,5% de las rutas encuentran efectos de osificación dañinos de los intermediarios. [ 108 ] Evitar los riesgos de extensibilidad de los intermediarios impuso restricciones significativas al diseño de MPTCP , [ 109 ] [ 110 ] y las dificultades causadas por los intermediarios han obstaculizado el despliegue de TCP Fast Open en navegadores web . [ 111 ] Otra fuente de osificación es la dificultad de modificar las funciones TCP en los puntos finales, típicamente en el núcleo del sistema operativo [ 112 ] o en hardware con un motor de descarga TCP . [ 113 ]

Actuación

Como TCP proporciona a las aplicaciones la abstracción de un flujo de bytes confiable , puede sufrir bloqueo de cabecera de línea : si los paquetes se reordenan o se pierden y necesitan ser retransmitidos (y por lo tanto se reordenan), los datos de partes secuencialmente posteriores del flujo pueden recibirse antes que las partes secuencialmente anteriores del flujo; sin embargo, los datos posteriores normalmente no se pueden usar hasta que se hayan recibido los datos anteriores, lo que genera latencia de red . Si se encapsulan y multiplexan varios mensajes independientes de nivel superior en una sola conexión TCP, el bloqueo de cabecera de línea puede hacer que el procesamiento de un mensaje completamente recibido que se envió posteriormente espere la entrega de un mensaje que se envió anteriormente. [ 114 ] Los navegadores web intentan mitigar el bloqueo de cabecera de línea abriendo múltiples conexiones paralelas. Esto genera el costo de establecer la conexión repetidamente, así como multiplicar los recursos necesarios para rastrear esas conexiones en los puntos finales. [ 115 ] Las conexiones paralelas también tienen un control de congestión que opera independientemente entre sí, en lugar de poder agrupar información y responder más rápidamente a las condiciones de red observadas; [ 116 ] Los agresivos patrones de envío inicial de TCP pueden causar congestión si se abren múltiples conexiones paralelas; y el modelo de equidad por conexión conduce a una monopolización de los recursos por parte de las aplicaciones que adoptan este enfoque. [ 117 ]

El establecimiento de la conexión es un importante contribuyente a la latencia experimentada por los usuarios web. [ 118 ] [ 119 ] El protocolo de enlace de tres vías de TCP introduce un RTT de latencia durante el establecimiento de la conexión antes de que se puedan enviar datos. [ 119 ] Para flujos cortos, estos retrasos son muy significativos. [ 120 ] Transport Layer Security (TLS) requiere su propio protocolo de enlace para el intercambio de claves en el establecimiento de la conexión. Debido al diseño en capas, el protocolo de enlace TCP y el protocolo de enlace TLS proceden en serie; el protocolo de enlace TLS no puede comenzar hasta que el protocolo de enlace TCP haya concluido. [ 121 ] Se requieren dos RTT para el establecimiento de la conexión con TLS 1.2 sobre TCP. [ 122 ] TLS 1.3 permite la reanudación de la conexión con cero RTT en algunas circunstancias, pero, cuando se superpone a TCP, todavía se requiere un RTT para el protocolo de enlace TCP, y esto no puede ayudar a la conexión inicial; Los intercambios de claves con RTT cero también presentan desafíos criptográficos, ya que el intercambio de claves no interactivo eficiente, seguro contra repetición y seguro hacia adelante es un tema de investigación abierto. [ 123 ] TCP Fast Open permite la transmisión de datos en los paquetes iniciales (es decir, SYN y SYN-ACK), eliminando un RTT de latencia durante el establecimiento de la conexión. [ 124 ] Sin embargo, TCP Fast Open ha sido difícil de implementar debido a la osificación del protocolo; a partir de 2020, ningún navegador web lo usaba por defecto. [ 111 ]

El rendimiento de TCP se ve afectado por el reordenamiento de paquetes . Los paquetes reordenados pueden causar el envío de acuses de recibo duplicados, que, si superan un umbral, activarán una retransmisión espuria y el control de congestión. El comportamiento de la transmisión también puede volverse irregular, ya que se reconocen rangos grandes de una sola vez cuando se recibe un paquete reordenado al inicio del rango (de manera similar a como el bloqueo de cabecera de línea afecta a las aplicaciones). [ 125 ] Blanton y Allman (2002) encontraron que el rendimiento estaba inversamente relacionado con la cantidad de reordenamiento, hasta un umbral donde todo reordenamiento activa una retransmisión espuria. [ 126 ] La mitigación del reordenamiento depende de la capacidad del remitente para determinar que ha enviado una retransmisión espuria y, por lo tanto, de la resolución de la ambigüedad de la retransmisión. [ 127 ] La reducción de las retransmisiones espurias inducidas por el reordenamiento puede ralentizar la recuperación de una pérdida genuina. [ 128 ]

El acuse de recibo selectivo puede proporcionar un beneficio significativo al rendimiento; Bruyeron, Hemon y Zhang (1998) midieron ganancias de hasta el 45 %. [ 129 ] Un factor importante en la mejora es que el acuse de recibo selectivo puede evitar con mayor frecuencia el inicio lento después de una pérdida y, por lo tanto, puede utilizar mejor el ancho de banda disponible. [ 130 ] Sin embargo, TCP solo puede acusar de recibo selectivamente un máximo de tres bloques de números de secuencia. Esto puede limitar la tasa de retransmisión y, por lo tanto, la recuperación de pérdidas o causar retransmisiones innecesarias, especialmente en entornos con alta pérdida. [ 131 ] [ 132 ]

TCP fue diseñado originalmente para redes cableadas donde la pérdida de paquetes se considera el resultado de la congestión de la red y el tamaño de la ventana de congestión se reduce drásticamente como precaución. Sin embargo, se sabe que los enlaces inalámbricos experimentan pérdidas esporádicas y generalmente temporales debido al desvanecimiento , la sombra, la transferencia, la interferencia y otros efectos de radio, que no son estrictamente congestión. Después de la reducción (errónea) del tamaño de la ventana de congestión, debido a la pérdida de paquetes inalámbricos, puede haber una fase de evitación de la congestión con una disminución conservadora en el tamaño de la ventana. Esto hace que el enlace de radio se subutilice. Se ha llevado a cabo una extensa investigación para combatir estos efectos perjudiciales. Las soluciones sugeridas se pueden categorizar como soluciones de extremo a extremo, que requieren modificaciones en el cliente o el servidor, [ 133 ] soluciones de capa de enlace, como el Protocolo de Enlace de Radio en redes celulares, o soluciones basadas en proxy que requieren algunos cambios en la red sin modificar los nodos finales. [ 133 ] [ 134 ] Se han propuesto varios algoritmos alternativos de control de congestión, como Vegas , Westwood , Veno y Santa Cruz, para ayudar a resolver el problema inalámbrico.

Aceleración

La idea de un acelerador TCP es finalizar las conexiones TCP dentro del procesador de red y luego reenviar los datos a una segunda conexión hacia el sistema final. Los paquetes de datos que se originan del remitente se almacenan en búfer en el nodo acelerador, que se encarga de realizar retransmisiones locales en caso de pérdida de paquetes. De esta manera, en caso de pérdidas, el bucle de retroalimentación entre el remitente y el receptor se acorta al que existe entre el nodo acelerador y el receptor, lo que garantiza una entrega de datos más rápida al receptor. [ 135 ]

Dado que TCP es un protocolo adaptativo a la velocidad, la frecuencia con la que el emisor TCP inyecta paquetes en la red es directamente proporcional a la carga de la red y a la capacidad de procesamiento del receptor. El emisor evalúa las condiciones de la red a partir de las confirmaciones recibidas. El nodo acelerador divide el bucle de retroalimentación entre el emisor y el receptor, garantizando así un tiempo de ida y vuelta (RTT) más corto por paquete. Un RTT más corto resulta beneficioso, ya que asegura una respuesta más rápida ante cualquier cambio en la red y una adaptación más veloz del emisor para contrarrestar dichos cambios.

Entre las desventajas de este método se encuentra el hecho de que la sesión TCP debe dirigirse a través del acelerador; esto significa que si el enrutamiento cambia y el acelerador ya no se encuentra en la ruta, la conexión se interrumpirá. Además, destruye la propiedad de extremo a extremo del mecanismo TCP ACK; cuando el remitente recibe el ACK, el paquete ha sido almacenado por el acelerador, no entregado al receptor.

Depuración

Un analizador de paquetes , que intercepta el tráfico TCP en un enlace de red, puede ser útil para depurar redes, pilas de red y aplicaciones que utilizan TCP, ya que muestra al ingeniero qué paquetes pasan por el enlace. Algunas pilas de red admiten la opción de socket SO_DEBUG, que se puede habilitar en el socket mediante setsockopt. Esta opción vuelca todos los paquetes, estados TCP y eventos en ese socket, lo que resulta útil para la depuración. Netstat es otra utilidad que se puede utilizar para la depuración.

Alternativas

Para muchas aplicaciones, TCP no es apropiado. Normalmente, la aplicación no puede acceder a los paquetes que llegan después de un paquete perdido hasta que se recibe la copia retransmitida del paquete perdido. Esto causa problemas en aplicaciones en tiempo real, como la transmisión de contenido multimedia, los juegos multijugador en tiempo real y la voz sobre IP (VoIP), donde generalmente es más útil obtener la mayor parte de los datos de forma oportuna que obtenerlos todos en orden.

Por razones históricas y de rendimiento, la mayoría de las redes de área de almacenamiento (SAN) utilizan el protocolo Fibre Channel (FCP) sobre conexiones Fibre Channel . Para sistemas embebidos , arranque de red y servidores que atienden solicitudes sencillas de un gran número de clientes (por ejemplo, servidores DNS ), la complejidad de TCP puede ser un problema. Tareas como la transmisión de datos entre dos hosts que se encuentran detrás de NAT (mediante STUN o sistemas similares) son mucho más sencillas sin un protocolo relativamente complejo como TCP.

En general, cuando TCP no es adecuado, se utiliza el Protocolo de Datagramas de Usuario (UDP). Este protocolo ofrece la misma multiplexación de aplicaciones y sumas de verificación que TCP, pero no gestiona flujos ni retransmisiones, lo que permite al desarrollador de la aplicación programarlos de forma adecuada para la situación o sustituirlos por otros métodos, como la corrección de errores hacia adelante o la ocultación de errores .

El Protocolo de Transmisión de Control de Flujo (SCTP) es otro protocolo que proporciona servicios de flujo confiables, similares a TCP. Es más reciente y considerablemente más complejo que TCP, y aún no se ha implementado de forma generalizada. Sin embargo, está especialmente diseñado para usarse en situaciones donde la confiabilidad y la precisión casi en tiempo real son cruciales.

El Protocolo de Transporte Venturi (VTP) es un protocolo propietario patentado diseñado para reemplazar a TCP de forma transparente y superar las ineficiencias percibidas en la transmisión inalámbrica de datos. En particular, en las comunicaciones móviles y las redes inalámbricas, la transmisión de datos puede volverse inestable debido a la alta latencia y las interferencias de señal.

El algoritmo de prevención de congestión de TCP funciona muy bien en entornos ad hoc donde se desconoce de antemano quién envía los datos. Si el entorno es predecible, un protocolo basado en temporización, como el Modo de Transferencia Asíncrona (ATM), puede evitar la sobrecarga de retransmisión de TCP.

El protocolo de transferencia de datos basado en UDP (UDT) está diseñado para entornos de red de alto ancho de banda y alta latencia, en particular para transferencias de datos a gran escala, como la transmisión de archivos o contenido multimedia. En redes con un alto producto ancho de banda-retardo , [ 136 ] UDT ofrece ventajas sobre TCP, proporcionando mayor eficiencia y equidad.

El Protocolo de Transacciones Multipropósito (MTP/IP) es un software propietario patentado diseñado para lograr de forma adaptativa un alto rendimiento y una excelente capacidad de transmisión de datos en una amplia variedad de condiciones de red, en particular aquellas en las que se percibe que TCP es ineficiente.

Cálculo de suma de verificación

Suma de comprobación TCP para IPv4

Cuando TCP se ejecuta sobre IPv4 , el método utilizado para calcular la suma de verificación se define de la siguiente manera: [ 18 ]

El campo de suma de verificación es el complemento a uno de 16 bits de la suma en complemento a uno de todas las palabras de 16 bits en el encabezado y el texto. El cálculo de la suma de verificación debe garantizar la alineación de 16 bits de los datos que se suman. Si un segmento contiene un número impar de octetos de encabezado y texto, la alineación se puede lograr rellenando el último octeto con ceros a su derecha para formar una palabra de 16 bits para el cálculo de la suma de verificación. El relleno no se transmite como parte del segmento. Al calcular la suma de verificación, el propio campo de suma de verificación se reemplaza con ceros.

En otras palabras, después del relleno adecuado, todas las palabras de 16 bits se suman utilizando aritmética de complemento a uno . La suma se complementa bit a bit y se inserta como campo de suma de verificación. Un pseudoencabezado que imita el encabezado del paquete IPv4 utilizado en el cálculo de la suma de verificación es el siguiente:

La suma de verificación se calcula sobre los siguientes campos:

Dirección de origen : 32 bits
La dirección de origen en el encabezado IPv4
Dirección de destino : 32 bits
La dirección de destino en el encabezado IPv4
Ceros : 8 bits
Todo ceros
Protocolo : 8 bits
El valor del protocolo para TCP:6
Longitud TCP : 16 bits
La longitud del encabezado TCP y los datos (medida en octetos). Por ejemplo, supongamos que tenemos un paquete IPv4 con una longitud total de200  bytes y un valor IHL de 5, lo que indica una longitud de5  bits × 32  bits =160  bits =20  bytes . Podemos calcular la longitud TCP como (Longitud total) (Longitud del encabezado IPv4), es decir, 200 20 , lo que resulta en180  bytes .

Suma de comprobación TCP para IPv6

Cuando TCP se ejecuta sobre IPv6 , el método utilizado para calcular la suma de verificación cambia: [ 137 ]

Cualquier protocolo de transporte u otro protocolo de capa superior que incluya las direcciones del encabezado IP en el cálculo de su suma de verificación debe modificarse para su uso sobre IPv6, de manera que incluya las direcciones IPv6 de 128 bits en lugar de las direcciones IPv4 de 32 bits.

A continuación se muestra un pseudoencabezado que imita el encabezado IPv6 para el cálculo de la suma de verificación.

La suma de verificación se calcula sobre los siguientes campos:

Dirección de origen : 128 bits
La dirección en el encabezado IPv6.
Dirección de destino : 128 bits
El destino final; si el paquete IPv6 no contiene una cabecera de enrutamiento, TCP utiliza la dirección de destino de la cabecera IPv6; de lo contrario, en el nodo de origen, utiliza la dirección del último elemento de la cabecera de enrutamiento y, en el nodo receptor, utiliza la dirección de destino de la cabecera IPv6.
Longitud TCP : 32 bits
La longitud de la cabecera y los datos TCP (medida en octetos).
Ceros : 24 bits ;Zeroes == 0
Todo ceros.
Siguiente encabezado : 8 bits
El valor del protocolo para TCP:6 .

Descarga de suma de comprobación

Muchas implementaciones de la pila de software TCP/IP ofrecen opciones para utilizar asistencia de hardware que permite calcular automáticamente la suma de verificación en el adaptador de red antes de la transmisión a la red o al recibirla para su validación. Esto puede reducir la carga de la CPU asociada al cálculo de la suma de verificación, lo que podría mejorar el rendimiento general de la red.

Esta característica puede provocar que los analizadores de paquetes que no estén al tanto o tengan dudas sobre el uso de la descarga de suma de comprobación informen sumas de comprobación no válidas en los paquetes salientes que aún no han llegado al adaptador de red. [ 138 ] Esto solo ocurrirá con los paquetes que se intercepten antes de ser transmitidos por el adaptador de red; todos los paquetes transmitidos por el adaptador de red en el cable tendrán sumas de comprobación válidas. [ 139 ] Este problema también puede ocurrir al monitorear paquetes que se transmiten entre máquinas virtuales en el mismo host, donde un controlador de dispositivo virtual puede omitir el cálculo de la suma de comprobación (como optimización), sabiendo que la suma de comprobación será calculada posteriormente por el kernel del host de la VM o su hardware físico.

Véase también

Notas

  1. 1 2 Añadido al encabezado por RFC 3168
  2. Las unidades de tamaño de Windows son, por defecto, bytes.
  3. El tamaño de la ventana es relativo al segmento identificado por el número de secuencia en el campo de acuse de recibo.
  4. De forma equivalente, un par de sockets de red para el origen y el destino, cada uno de los cuales se compone de una dirección y un puerto.
  5. A partir del último estándar, HTTP/3 ,se utiliza QUIC como protocolo de transporte en lugar de TCP.

Referencias

  1. Comer, DE (2021). Interconexión de redes con TCP/IP (6.ª ed.). Pearson. 
  2. Labrador, Miguel A.; Pérez, Alfredo J.; Wightman, Pedro M. (2010). Sistemas de información basados ​​en la ubicación: desarrollo de aplicaciones de seguimiento en tiempo real . CRC Press. ISBN 9781000556803.
  3. Vinton G. Cerf; Robert E. Kahn (mayo de 1974). "Un protocolo para la intercomunicación de redes de paquetes" (PDF) . IEEE Transactions on Communications . 22 (5): 637– 648. Bibcode : 1974ITCom..22..637C . doi : 10.1109/tcom.1974.1092259 . Archivado del original (PDF) el 4 de marzo de 2016.
  4. Bennett, Richard (septiembre de 2009). "Diseñado para el cambio: argumentos integrales, innovación en Internet y el debate sobre la neutralidad de la red" (PDF) . Fundación de Tecnologías de la Información e Innovación. pág. 11. Archivado (PDF) del original el 29 de agosto de 2019. Recuperado el 11 de septiembre de 2017 . 
  5. RFC 675 .
  6. Russell, Andrew Lawrence (2008).«Legislaturas industriales»: la estandarización por consenso en la segunda y tercera revolución industrial (tesis)."Véase Abbate, Inventing the Internet , 129–30; Vinton G. Cerf (octubre de 1980). "Protocols for Interconnected Packet Networks". ACM SIGCOMM Computer Communication Review . 10 (4): 10– 11.; y RFC 760 . IETF . doi : 10.17487/RFC0760 ."
  7. Postel, Jon (15 de agosto de 1977), Comentarios sobre el protocolo de Internet y TCP , IEN 2, archivado del original el 16 de mayo de 2019 , recuperado el 11 de junio de 2016 , Estamos cometiendo errores en el diseño de nuestros protocolos de Internet al violar el principio de capas. Específicamente, estamos tratando de usar TCP para hacer dos cosas: servir como un protocolo de extremo a extremo a nivel de host y servir como un protocolo de enrutamiento y empaquetado de Internet. Estas dos cosas deberían proporcionarse de manera modular y por capas.
  8. Cerf, Vinton G. (1 de abril de 1980). "Informe final del proyecto TCP de la Universidad de Stanford" .
  9. Cerf, Vinton G; Cain, Edward (octubre de 1983). "El modelo de arquitectura de Internet del Departamento de Defensa". Computer Networks . 7 (5): 307– 318. doi : 10.1016/0376-5075(83)90042-9 .
  10. "La guía TCP/IP: arquitectura TCP/IP y modelo TCP/IP" . www.tcpipguide.com . Consultado el 11 de febrero de 2020 .
  11. Eddy, Wesley (agosto de 2022). Protocolo de control de transmisión (TCP) . IETF . doi : 10.17487/RFC9293 . RFC 9293 .
  12. "Índice de notas sobre experimentos de Internet" . www.rfc-editor.org . Consultado el 21 de enero de 2024 .
  13. "Robert E Kahn – Galardonado con el Premio AM Turing" . amturing.acm.org . Archivado del original el 13 de julio de 2019. Consultado el 13 de julio de 2019 .
  14. "Vinton Cerf – Galardonado con el Premio AM Turing" . amturing.acm.org . Archivado del original el 11 de octubre de 2021. Consultado el 13 de julio de 2019 .
  15. 1 2 3 4 5 6 7 8 9 Comer, Douglas E. (2006). Interconexión de redes con TCP/IP: Principios, protocolos y arquitectura . Vol. 1 (5.ª ed.). Prentice Hall. ISBN   978-0-13-187671-2.
  16. 1 2 3 RFC 9293 , 2.2. Conceptos clave de TCP.
  17. RFC 791 , págs. 5–6.
  18. 1 2 3 4 RFC 9293 .
  19. 1 2 3 4 RFC 9293 , 3.1. Formato de encabezado.
  20. RFC 9293 , 3.8.5 La comunicación de información urgente.
  21. RFC 9293 , 3.4. Números de secuencia.
  22. RFC 9293 , 3.4.1. Selección del número de secuencia inicial.
  23. "Cambiar RFC 3540 "Señalización de notificación de congestión explícita robusta (ECN) con nonces" a histórico" . datatracker.ietf.org . Consultado el 18 de abril de 2023 .
  24. Briscoe, Bob; Kühlewind, Mirja; Scheffenegger, Richard (10 de marzo de 2025). Notificación explícita de congestión más precisa (AccECN) con retroalimentación en TCP . IETF . ID draft-ietf-tcpm-accurate-ecn . Consultado el 24 de octubre de 2025 .
  25. RFC 3168 , págs. 13–14.
  26. RFC 3168 , pág. 15.
  27. RFC 3168 , págs. 18–19.
  28. RFC 793 .
  29. 1 2 3 RFC 7323 .
  30. RFC 2018 , 2. Opción de Sack permitido.
  31. RFC 2018 , 3. Formato de opción de sack.
  32. Heffernan, Andy (agosto de 1998). Protección de sesiones BGP mediante la opción de firma TCP MD5 . IETF. doi : 10.17487/RFC2385 . RFC 2385. Recuperado el 30 de diciembre de 2023 .
  33. "Parámetros del Protocolo de Control de Transmisión (TCP): Números de tipo de opción TCP" . IANA. Archivado del original el 2 de octubre de 2017. Consultado el 19 de octubre de 2017 .
  34. RFC 9293 , 3.3.2. Descripción general de la máquina de estados.
  35. Kurose, James F. (2017). Redes informáticas : un enfoque descendente . Keith W. Ross (7.ª ed.). Harlow, Inglaterra. pág. 286. ISBN    978-0-13-359414-0OCLC 936004518 {{cite book}}: CS1 mantenimiento: falta el editor de ubicación ( enlace )
  36. Tanenbaum, Andrew S. (17 de marzo de 2003). Redes de computadoras (Cuarta edición). Prentice Hall. ISBN  978-0-13-066102-9.
  37. "linux/net/ipv4/tcp_minisocks.c en master · torvalds/linux" . GitHub . Consultado el 24 de abril de 2025 .
  38. RFC 1122 , 4.2.2.13. Cierre de una conexión.
  39. "TCP (Protocolo de Control de Transmisión) – Explicación del protocolo de transmisión" . Guía digital de IONOS . 2 de marzo de 2020. Consultado el 24 de abril de 2025 .
  40. "La guía TCP/IP - Terminación de conexión TCP" . www.tcpipguide.com . Consultado el 24 de abril de 2025 .
  41. Karn y Partridge 1991 , pág. 364.
  42. RFC 9002 , 4.2. Números de paquetes que aumentan monótonamente.
  43. Mathis; Mathew; Semke; Mahdavi; Ott (1997). "El comportamiento macroscópico del algoritmo de evitación de congestión TCP". ACM SIGCOMM Computer Communication Review . 27 (3): 67– 82. CiteSeerX 10.1.1.40.7002 . doi : 10.1145/263932.264023 . S2CID 1894993 .  
  44. RFC 3522 , pág. 4.
  45. Leung, Ka-cheong; Li, Victor Ok; Yang, Daiqin (2007). "Una visión general del reordenamiento de paquetes en el protocolo de control de transmisión (TCP): problemas, soluciones y desafíos". IEEE Transactions on Parallel and Distributed Systems . 18 (4): 522– 535. Bibcode : 2007ITPDS..18..522L . doi : 10.1109/TPDS.2007.1011 .
  46. Johannessen, Mads (2015). Investigación sobre el reordenamiento en Linux TCP (tesis de maestría). Universidad de Oslo.
  47. Cheng, Yuchung (2015). RACK: una detección rápida de pérdidas basada en el tiempo para TCP draft-cheng-tcpm-rack-00 (PDF) . IETF94. Yokohama: IETF.
  48. RFC 8985 .
  49. Cheng, Yuchung; Cardwell, Neal; Dukkipati, Nandita ; Jha, Priyaranjan (2017). RACK: un borrador de recuperación rápida de pérdidas basado en el tiempo draft-ietf-tcpm-rack-02 (PDF) . IETF100. Yokohama: IETF.
  50. RFC 6298 , pág. 2.
  51. 1 2 Zhang 1986 , pág. 399.
  52. Karn y Partridge 1991 , pág. 365.
  53. Ludwig y Katz 2000 , págs .
  54. Gurtov y Ludwig 2003 , pág. 2.
  55. Gurtov y Floyd 2004 , pág. 1.
  56. 1 2 RFC 6298 , pág. 4.
  57. Karn y Partridge 1991 , págs. 370–372.
  58. Allman y Paxson 1999 , pág. 268.
  59. RFC 7323 , pág. 7.
  60. Stone; Partridge (2000). "Cuando el CRC y la suma de comprobación TCP no coinciden" . Actas de la conferencia sobre aplicaciones, tecnologías, arquitecturas y protocolos para la comunicación informática . ACM SIGCOMM Computer Communication Review . págs. 309–319 . CiteSeerX 10.1.1.27.7611 . doi : 10.1145/347059.347561 . ISBN   978-1581132236. S2CID 9547018 . Archivado del original el 05-05-2008 . Recuperado el 28-04-2008 . 
  61. RFC 5681 .
  62. RFC 6298 .
  63. RFC 1122 .
  64. RFC 2018 , pág. 10.
  65. RFC 9002 , 4.4. No se permite el incumplimiento.
  66. Corbet, Jonathan (7 de julio de 2004). "Escalado de ventana TCP y enrutadores defectuosos" . LWN.net . Archivado del original el 31 de marzo de 2020. Recuperado el 21 de julio de 2016 .
  67. RFC 3522 .
  68. "IP sysctl" . Documentación del núcleo de Linux . Archivado del original el 5 de marzo de 2016. Consultado el 15 de diciembre de 2018 .
  69. Wang, Eve. "La marca de tiempo TCP está deshabilitada" . Technet – Windows Server 2012 Essentials . Microsoft. Archivado del original el 15/12/2018 . Consultado el 15/12/2018 .
  70. David Murray; Terry Koziniec; Sebastian Zander; Michael Dixon; Polychronis Koutsakis (2017). "Análisis de las características cambiantes del tráfico de red empresarial" (PDF) . XXIII Conferencia Asia-Pacífico sobre Comunicaciones (APCC 2017). Archivado (PDF) del original el 3 de octubre de 2017. Recuperado el 3 de octubre de 2017 .
  71. Gont, Fernando (noviembre de 2008). "Sobre la implementación de datos urgentes TCP" . 73.ª reunión del IETF. Archivado del original el 16 de mayo de 2019. Recuperado el 4 de enero de 2009 .
  72. Peterson, Larry (2003). Redes informáticas . Morgan Kaufmann. pág . 401. ISBN  978-1-55860-832-0.
  73. Richard W. Stevens (noviembre de 2011). TCP/IP Ilustrado. Vol. 1, Los protocolos . Addison-Wesley. págs. Capítulo 20. ISBN  978-0-201-63346-7.
  74. "Evaluación de seguridad del Protocolo de Control de Transmisión (TCP)" (PDF) . Archivado del original (PDF) el 6 de marzo de 2009. Consultado el 23 de diciembre de 2010 .
  75. Encuesta sobre métodos de endurecimiento de seguridad para implementaciones del Protocolo de Control de Transmisión (TCP) . IETF . ID draft-ietf-tcpm-tcp-security.
  76. Jakob Lell (13 de agosto de 2013). "Suplantación rápida de conexión TCP ciega con cookies SYN" . Archivado del original el 22 de febrero de 2014. Recuperado el 5 de febrero de 2014 .
  77. "Algunas ideas sobre las recientes vulnerabilidades de TCP DoS (Denegación de Servicio)" (PDF) . Archivado del original (PDF) el 18 de junio de 2013. Consultado el 23 de diciembre de 2010 .
  78. "Explotando TCP y el infinito del temporizador de persistencia" . Archivado del original el 22/01/2010 . Consultado el 22/01/2010 .
  79. "Push and ACK Flood" . f5.com . Archivado del original el 28 de septiembre de 2017. Consultado el 27 de septiembre de 2017 .
  80. Laurent Joncheray (1995). Ataque activo simple contra TCP (PDF) . 5.º Simposio de Seguridad UNIX de USENIX . Consultado el 4 de junio de 2023 .
  81. John T. Hagen; Barry E. Mullins (2013). TCP veto: Un nuevo ataque de red y su aplicación a los protocolos SCADA . Conferencia IEEE PES sobre Tecnologías Innovadoras de Redes Inteligentes (ISGT) de 2013. pp. 1–6 . doi : 10.1109/ISGT.2013.6497785 . ISBN  978-1-4673-4896-6. S2CID 25353177 . 
  82. RFC 9293 , 4. Glosario.
  83. RFC 8095 , pág. 6.
  84. Paasch y Buenaventura 2014 , p. 51.
  85. RFC 6182 .
  86. RFC 6824 .
  87. Raiciu; Barre; Pluntke; Greenhalgh; Wischik; Handley (2011). "Mejora del rendimiento y la robustez de los centros de datos con TCP multipath" . ACM SIGCOMM Computer Communication Review . 41 (4): 266. CiteSeerX 10.1.1.306.3863 . doi : 10.1145/2043164.2018467 . Archivado del original el 4 de abril de 2020. Recuperado el 29 de junio de 2011 . 
  88. "MultiPath TCP – Implementación del kernel de Linux" . Archivado del original el 27 de marzo de 2013. Consultado el 24 de marzo de 2013 .
  89. Raiciu; Paasch; Barre; Ford; Honda; Duchene; Bonaventure; Handley (2012). "¿Qué tan difícil puede ser? Diseño e implementación de un TCP multipath desplegable" . Usenix NSDI : 399–412 . Archivado del original el 3 de junio de 2013. Recuperado el 24 de marzo de 2013 .
  90. Bonaventure; Seo (2016). "Implementaciones TCP de rutas múltiples" . Revista IETF . Archivado del original el 23 de febrero de 2020. Recuperado el 3 de enero de 2017 .
  91. Protección criptográfica de flujos TCP (tcpcrypt) . IETF . Mayo de 2019. doi : 10.17487/RFC8548 . RFC 8548 .
  92. Michael Kerrisk (1 de agosto de 2012). "TCP Fast Open: acelerando los servicios web" . LWN.net . Archivado del original el 3 de agosto de 2014. Consultado el 21 de julio de 2014 .
  93. RFC 7413 .
  94. RFC 6937 .
  95. Grigorik, Ilya (2013). Redes de navegadores de alto rendimiento (1.ª ed.). Pekín: O'Reilly. ISBN  978-1449344764.
  96. RFC 6013 .
  97. RFC 7805 .
  98. Kumar, Sam; P Andersen, Michael; Kim, Hyung-Sin; E. Culler, David (2020). TCP de alto rendimiento para redes inalámbricas de baja potencia . NSDI '20. USENIX.
  99. Kumar, Sam (2023). Repensando el diseño de sistemas para la criptografía expresiva (PDF) (tesis doctoral). Universidad de California, Berkeley. Archivado (PDF) del original el 13 de octubre de 2025.
  100. RFC 8546 , pág. 6.
  101. RFC 8558 , pág. 3.
  102. RFC 9065 , 2. Usos actuales de las cabeceras de transporte dentro de la red.
  103. RFC 9065 , 3. Investigación, desarrollo e implementación.
  104. RFC 8558 , pág. 8.
  105. RFC 9170 , 2.3. Interacciones entre múltiples partes y cajas intermedias.
  106. RFC 9170 , A.5. TCP.
  107. ^ Papastergiou y col. 2017 , pág. 620.
  108. ^ Edeline y Donnet 2019 , págs .
  109. Raiciu et al. 2012 , pág. 1.
  110. ^ Hesmans y col. 2013 , pág. 1.
  111. 1 2 Rybczyńska 2020 .
  112. ^ Papastergiou y col. 2017 , pág. 621.
  113. Corbet 2015 .
  114. ^ Briscoe y col. 2016 , págs. 29-30.
  115. Marx 2020 , Bloqueo HOL en HTTP/1.1.
  116. Marx 2020 , Bonus: Control de la congestión del transporte.
  117. Grupo de trabajo HTTP de la IETF , ¿Por qué solo una conexión TCP?
  118. Corbet 2018 .
  119. 1 2 RFC 7413 , pág. 3.
  120. Sy et al. 2020 , pág. 271.
  121. ^ Chen y col. 2021 , págs. 8–9.
  122. Ghedini 2018 .
  123. ^ Chen y col. 2021 , págs. 3–4.
  124. RFC 7413 , pág. 1.
  125. Blanton y Allman 2002 , págs. 1–2.
  126. Blanton y Allman 2002 , págs. 4–5.
  127. Blanton y Allman 2002 , págs. 3–4.
  128. Blanton y Allman 2002 , págs. 6–8.
  129. Bruyeron, Hemon y Zhang 1998 , pág. 67.
  130. Bruyeron, Hemon y Zhang 1998 , pág. 72.
  131. ^ Bhat, Rizk y Zink 2017 , pág. 14.
  132. RFC 9002 , 4.5. Más rangos de ACK.
  133. 1 2 "Rendimiento TCP sobre CDMA2000 RLP" . Archivado del original el 3 de mayo de 2011. Recuperado el 30 de agosto de 2010 .
  134. Muhammad Adeel; Ahmad Ali Iqbal (2007). "Optimización de la ventana de congestión TCP para redes de datos de paquetes CDMA2000". Cuarta Conferencia Internacional sobre Tecnología de la Información (ITNG'07) . págs. 31–35 . doi : 10.1109/ITNG.2007.190 . ISBN  978-0-7695-2776-5. S2CID 8717768 . 
  135. "Aceleración TCP" . Archivado del original el 22 de abril de 2024. Consultado el 18 de abril de 2024 .
  136. Yunhong Gu; Xinwei Hong; Robert L. Grossman (2004). "Análisis del algoritmo AIMD con incrementos decrecientes" (PDF) . Archivado (PDF) del original el 5 de marzo de 2016.
  137. RFC 8200 .
  138. "Wireshark: Descarga" . Archivado del original el 31/01/2017 . Recuperado el 24/02/2017 . Wireshark captura los paquetes antes de que se envíen al adaptador de red. No verá la suma de comprobación correcta porque aún no se ha calculado. Peor aún, la mayoría de los sistemas operativos no se molestan en inicializar estos datos, por lo que probablemente esté viendo pequeños fragmentos de memoria que no debería. Las nuevas instalaciones de Wireshark 1.2 y posteriores deshabilitan la validación de suma de comprobación de IP, TCP y UDP de forma predeterminada. Puede deshabilitar la validación de suma de comprobación en cada uno de esos analizadores manualmente si es necesario.
  139. "Wireshark: Sumas de verificación" . Archivado del original el 22/10/2016 . Consultado el 24/02/2017 . La descarga de sumas de verificación suele causar confusión, ya que los paquetes de red que se van a transmitir se entregan a Wireshark antes de que se calculen las sumas de verificación. Wireshark recibe estas sumas de verificación "vacías" y las muestra como inválidas, aunque los paquetes contendrán sumas de verificación válidas cuando salgan del hardware de red posteriormente.

Bibliografía

Solicitudes de comentarios

  • Cerf, Vint ; Dalal, Yogen ; Sunshine, Carl (diciembre de 1974). Especificación del programa de control de transmisión de Internet, versión de diciembre de 1974. IETF . doi : 10.17487 /RFC0675 . RFC 675 .
  • Postel, Jon (septiembre de 1981). Protocolo de Internet . IETF . doi : 10.17487/RFC0791 . RFC 791 .
  • Postel, Jon (septiembre de 1981). Protocolo de control de transmisión . IETF . doi : 10.17487/RFC0793 . RFC 793 .
  • Braden, Robert , ed. (octubre de 1989). Requisitos para hosts de Internet: capas de comunicación . IETF . doi : 10.17487/RFC1122 . RFC 1122 .
  • Jacobson, Van ; Braden, Bob ; Borman, Dave (mayo de 1992). Extensiones TCP para alto rendimiento . IETF . doi : 10.17487/RFC1323 . RFC 1323 .
  • Bellovin, Steven M. (mayo de 1996). Defensa contra ataques de números de secuencia . IETF . doi : 10.17487/RFC1948 . RFC 1948 .
  • Mathis, Matt; Mahdavi, Jamshid; Floyd, Sally; Romanow, Allyn (octubre de 1996). Opciones de acuse de recibo selectivo TCP . IETF . doi : 10.17487/RFC2018 . RFC 2018 .
  • Allman, Mark; Paxson, Vern ; Stevens, W. Richard (abril de 1999). Control de congestión TCP . IETF . doi : 10.17487/RFC2581 . RFC 2581 .
  • Floyd, Sally ; Mahdavi, Jamshid; Mathis, Matt; Podolsky, Matthew (julio de 2000). Una extensión de la opción de acuse de recibo selectivo (SACK) para TCP . IETF . doi : 10.17487/RFC2883 . RFC 2883 .
  • Ramakrishnan, KK; Floyd, Sally ; Black, David (septiembre de 2001). La adición de notificación explícita de congestión (ECN) a IP . IETF . doi : 10.17487/RFC3168 . RFC 3168 .
  • Ludwig, Reiner; Meyer, Michael (abril de 2003). El algoritmo de detección de Eifel para TCP . IETF . doi : 10.17487/RFC3522 . RFC 3522 .
  • Spring, Neil; Weatherall, David; Ely, David (junio de 2003). Señalización robusta de notificación explícita de congestión (ECN) con nonces . IETF . doi : 10.17487/RFC3540 . RFC 3540 .
  • Allman, Mark; Paxson, Vern ; Blanton, Ethan (septiembre de 2009). Control de congestión TCP . IETF . doi : 10.17487/RFC5681 . RFC 5681 .
  • Simpson, William Allen (enero de 2011). Transacciones de cookies TCP (TCPCT) . IETF . doi : 10.17487/RFC6013 . RFC 6013 .
  • Ford, Alan; Raiciu, Costin; Handley, Mark ; Barre, Sebastien; Iyengar, Janardhan (marzo de 2011). Directrices arquitectónicas para el desarrollo de TCP multipath . IETF . doi : 10.17487/RFC6182 . RFC 6182 .
  • Paxson, Vern ; Allman, Mark; Chu, HK Jerry; Sargent, Matt (junio de 2011). Cálculo del temporizador de retransmisión de TCP . IETF . doi : 10.17487/RFC6298 . RFC 6298 .
  • Ford, Alan; Raiciu, Costin; Handley, Mark ; Bonaventure, Olivier (enero de 2013). Extensiones TCP para operación de rutas múltiples con múltiples direcciones . IETF . doi : 10.17487/RFC6824 . RFC 6824 .
  • Mathis, Matt; Dukkipati, Nandita ; Cheng, Yuchung (mayo de 2013). Reducción de tasa proporcional para TCP . IETF . doi : 10.17487/RFC6937 . RFC 6937 .
  • Borman, David; Braden, Bob ; Jacobson, Van (septiembre de 2014). Scheffenegger, Richard (ed.). Extensiones TCP para alto rendimiento . IETF . doi : 10.17487/RFC7323 . RFC 7323 .
  • Duke, Martin; Braden, Robert ; Eddy, Wesley M.; Blanton, Ethan; Zimmermann, Alexander (febrero de 2015). Una hoja de ruta para los documentos de especificación del protocolo de control de transmisión (TCP) . IETF . doi : 10.17487/RFC7414 . RFC 7414 .
  • Cheng, Yuchung; Chu, Jerry; Radhakrishnan, Sivasankar; Jain, Arvind (diciembre de 2014). Apertura rápida TCP . IETF . doi : 10.17487/RFC7413 . RFC 7413 .
  • Zimmermann, Alexander; Eddy, Wesley M.; Eggert, Lars (abril de 2016). Trasladar extensiones TCP obsoletas y documentos relacionados con TCP a un estado histórico o informativo . IETF . doi : 10.17487/RFC7805 . RFC 7805 .
  • Fairhurst, Gorry; Trammell, Brian; Kuehlewind, Mirja, eds. (marzo de 2017). Servicios proporcionados por los protocolos de transporte y mecanismos de control de congestión de la IETF . IETF . doi : 10.17487/RFC8095 . RFC 8095 .
  • Cheng, Yuchung; Cardwell, Neal; Dukkipati, Nandita ; Jha, Priyaranjan, eds. (febrero de 2021). El algoritmo de detección de pérdidas RACK-TLP para TCP . IETF . doi : 10.17487/RFC8985 . RFC 8985 .
  • Deering, Stephen E. ; Hinden, Robert M. (julio de 2017). Especificación del Protocolo de Internet, versión 6 (IPv6) . IETF . doi : 10.17487/RFC8200 . RFC 8200 .
  • Trammell, Brian; Kuehlewind, Mirja (abril de 2019). La imagen de cable de un protocolo de red . IETF . doi : 10.17487/RFC8546 . RFC 8546 .
  • Hardie, Ted, ed. (abril de 2019). Señales de ruta de protocolo de transporte . IETF . doi : 10.17487/RFC8558 . RFC 8558 .
  • Iyengar, Jana; Swett, Ian, eds. (mayo de 2021). QUIC Detección de pérdidas y control de congestión . IETF . doi : 10.17487/RFC9002 . RFC 9002 .
  • Fairhurst, Gorry; Perkins, Colin (julio de 2021). Consideraciones sobre la confidencialidad de las cabeceras de transporte, las operaciones de red y la evolución de los protocolos de transporte de Internet . IETF . doi : 10.17487/RFC9065 . RFC 9065 .
  • Thomson, Martin; Pauly, Tommy (diciembre de 2021). Viabilidad a largo plazo de los mecanismos de extensión de protocolo . IETF . doi : 10.17487/RFC9170 . RFC 9170 .
  • Eddy, Wesley M., ed. (agosto de 2022). Protocolo de control de transmisión (TCP) . IETF . doi : 10.17487/RFC9293 . RFC 9293 .

Otros documentos

  • Allman, Mark; Paxson, Vern (octubre de 1999). "Sobre la estimación de las propiedades de la ruta de red de extremo a extremo" . ACM SIGCOMM Computer Communication Review . 29 (4): 263– 274. doi : 10.1145/316194.316230 . hdl : 2060/20000004338 .
  • Bhat, Divyashri; Rizk, Amr; Zink, Michael (junio de 2017). "Not so QUIC: A Performance Study of DASH over QUIC". NOSSDAV'17: Proceedings of the 27th Workshop on Network and Operating Systems Support for Digital Audio and Video . pp. 13– 18. doi : 10.1145/3083165.3083175 . S2CID 32671949 .  
  • Blanton, Ethan; Allman, Mark (enero de 2002). "Sobre cómo hacer que TCP sea más robusto a la reordenación de paquetes" (PDF) . ACM SIGCOMM Computer Communication Review . 32 : 20–30 . doi : 10.1145/510726.510728 . S2CID 15305731 . 
  • Briscoe, Bob; Brunstrom, Anna; Petlund, Andreas; Hayes, David; Ros, David; Tsang, Ing-Jyh; Gjessing, Stein; Fairhurst, Gorry; Griwodz, Carsten; Welzl, Michael (2016). "Reducción de la latencia de Internet: una revisión de técnicas y sus méritos". IEEE Communications Surveys & Tutorials . 18 (3): 2149– 2196. doi : 10.1109/COMST.2014.2375213 . hdl : 2164/8018 . S2CID 206576469 . 
  • Bruyeron, Renaud; Hemon, Bruno; Zhang, Lixa (abril de 1998). "Experimentaciones con el acuse de recibo selectivo de TCP". ACM SIGCOMM Computer Communication Review . 28 (2): 54– 77. doi : 10.1145/279345.279350 . S2CID 15954837 . 
  • Chen, Shan; Jero, Samuel; Jagielski, Mateo; Boldyreva, Alexandra; Nita-Rotaru, Cristina (2021). "Establecimiento de canal de comunicación seguro: TLS 1.3 (apertura rápida sobre TCP) frente a QUIC" . Revista de criptología . 34 (3) 26. doi : 10.1007/s00145-021-09389-w . S2CID 235174220 . 
  • Corbet, Jonathan (8 de diciembre de 2015). "Descargas de suma de verificación y osificación de protocolos" . LWN.net .
  • Corbet, Jonathan (29 de enero de 2018). "QUIC como solución a la osificación de protocolos" . LWN.net .
  • Edeline, Korian; Donnet, Benoit (2019). Una investigación ascendente de la osificación de la capa de transporte . Conferencia de medición y análisis de tráfico de red de 2019 (TMA). doi : 10.23919/TMA.2019.8784690 .
  • Ghedini, Alessandro (26 de julio de 2018). "El camino hacia QUIC" . El blog de Cloudflare . Cloudflare .
  • Gurtov, Andrei; Floyd, Sally (febrero de 2004). Resolución de la ambigüedad de acuse de recibo en TCP sin SACK (PDF) . Next Generation Teletraffic and Wired/Wireless Advanced Networking (NEW2AN'04).
  • Gurtov, Andrei; Ludwig, Reiner (2003). Respuesta a tiempos de espera espurios en TCP (PDF) . IEEE INFOCOM 2003. Vigésimo segunda Conferencia Anual Conjunta de las Sociedades de Computación y Comunicaciones del IEEE. doi : 10.1109/INFCOM.2003.1209251 .
  • Hesmans, Benjamin; Duchene, Fabien; Paasch, Christoph; Detal, Gregory; Bonaventure, Olivier (2013). ¿ Son las extensiones TCP a prueba de middlebox? . HotMiddlebox '13. CiteSeerX 10.1.1.679.6364 . doi : 10.1145/2535828.2535830 . 
  • Grupo de Trabajo HTTP de la IETF. "Preguntas frecuentes sobre HTTP/2" .
  • Karn, Phil ; Partridge, Craig (noviembre de 1991). "Mejora de las estimaciones del tiempo de ida y vuelta en protocolos de transporte confiables" . ACM Transactions on Computer Systems . 9 (4): 364–373 . doi : 10.1145/118544.118549 .
  • Ludwig, Reiner; Katz, Randy Howard (enero de 2000). "El algoritmo Eifel: haciendo que TCP sea robusto contra retransmisiones espurias" . ACM SIGCOMM Computer Communication Review . 30 : 30–36 . doi : 10.1145/505688.505692 .
  • Marx, Robin (3 de diciembre de 2020). "Bloqueo de cabecera de línea en QUIC y HTTP/3: los detalles" .
  • Paasch, Christoph; Bonaventure, Olivier (1 de abril de 2014). "Multipath TCP". Communications of the ACM . 57 (4): 51– 57. doi : 10.1145/2578901 . hdl : 2078.1/141195 . S2CID 17581886 . 
  • Papastergiou, Giorgos; Fairhurst, Gorry; Ros, David; Brunstrom, Anna; Grinnemo, Karl-Johan; Hurtig, Per; Khademi, Naeem; Tüxen, Michael; Welzl, Michael; Damjanovic, Dragana; Mangiante, Simone (2017). "Desosilenciando la capa de transporte de Internet: una revisión y perspectivas futuras". IEEE Communications Surveys & Tutorials . 19 : 619–639 . doi : 10.1109/COMST.2016.2626780 . hdl : 2164/8317 . S2CID 1846371 . 
  • Rybczyńska, Marta (13 de marzo de 2020). "Una mirada RÁPIDA a HTTP/3" . LWN.net .
  • Sy, Erik; Mueller, Tobias; Burkert, Christian; Federrath, Hannes; Fischer, Mathias (2020). "Rendimiento y privacidad mejorados para TLS sobre TCP Fast Open" . Actas sobre tecnologías de mejora de la privacidad . 2020 (2): 271–287 . arXiv : 1905.03518 . doi : 10.2478/popets-2020-0027 .
  • Zhang, Lixia (5 de agosto de 1986). "Por qué los temporizadores TCP no funcionan bien". ACM SIGCOMM Computer Communication Review . 16 (3): 397– 405. doi : 10.1145/1013812.18216 .

Lecturas adicionales

  • Stevens, W. Richard (1994-01-10). TCP/IP Ilustrado, Volumen 1: Los Protocolos . Addison-Wesley Pub. Co. ISBN 978-0-201-63346-7.
  • Stevens, W. Richard; Wright, Gary R (1994). TCP/IP Ilustrado, Volumen 2: La Implementación . Addison-Wesley. ISBN 978-0-201-63354-2.
  • Stevens, W. Richard (1996). TCP/IP Ilustrado, Volumen 3: TCP para transacciones, HTTP, NNTP y los protocolos del dominio UNIX . Addison-Wesley. ISBN 978-0-201-63495-2.**
  • Entrevista de historia oral con Robert E. Kahn
  • Asignaciones de puertos de IANA
  • Parámetros TCP de IANA
  • Archivado el 14 de febrero de 2021 en Wayback Machine .