¿En qué circunstancias implementaremos TCP usando UDP en lugar de usar TCP directamente?

Puedo pensar en un ejemplo en el que su pregunta podría tener sentido.

TCP tiene algunas características que lo hacen destacar como un mecanismo para entregar datos de manera confiable: acuse de recibo, corrección de errores, retransmisión de datos, ventanas deslizantes, tamaños de segmento, detección de congestión, inicio rápido, etc.

Si bien TCP es un protocolo excelente, hay momentos en que no es óptimo para el trabajo:

  1. la distancia a recorrer entre los puntos finales de la conversación es alta, y la latencia de la red también lo es;
  2. la transferencia implica una gran cantidad de datos;
  3. la pérdida de paquetes en la conexión no es despreciable;
  4. Los tamaños y las configuraciones del búfer en los extremos receptores no están optimizados para transferencias de gran volumen y alta latencia

UDP es menos confiable: no hay salvaguardas ni protecciones. La aplicación del usuario queda para determinar si llegó el paquete, en qué orden llegó y cómo confirmar la entrega.

Existen tecnologías, como la optimización WAN, Tsunami UDP, Aspera, FASP, que utilizan UDP como transporte para la transferencia de datos, que es MUCHO más rápido que TCP. Estas tecnologías luego implementan sus propios mecanismos para proteger contra la llegada fuera de servicio, etc.

Estos protocolos de alta velocidad se desarrollan específicamente con el propósito de mover archivos grandes rápidamente a través de redes altamente latentes. Otros protocolos, como la transmisión de video, usan UDP porque no es tan importante si un paquete o dos caen al piso; el video no sufrirá notablemente. Si la transmisión de video utilizara TCP, sería mucho más susceptible a bloqueos y desconexiones, una vez que los mecanismos de TCP se abruman al intentar volver a ensamblar los datos en orden.

Para una respuesta útil, leeré su pregunta como:

Para cualquier protocolo de aplicación, ¿en qué circunstancias emularíamos el conjunto de características de TCP mientras lo ejecutamos en UDP, en lugar de ejecutarlo directamente en TCP?

Cuando desee algunas de las funciones de TCP, pero necesite un control íntimo sobre cómo funcionan.

Digamos que desea garantizar la entrega en orden , que creo que es lo principal que la mayoría de la gente quiere cuando usan TCP.

Supongamos que está distribuyendo datos desde una red de sensores en modo completo + incremental (es decir, volcados de estado completo regulares, con deltas incrementales contra el estado completo anterior).

Con TCP, obtiene la entrega en orden con retransmisión, que no necesita, ya que un problema de red en el camino crea un “embotellamiento”, y cuando se resuelve, se queda atascado procesando actualizaciones antiguas que ya no son útiles. .

En su lugar, decide usar UDP, pero agrega un número de secuencia al comienzo de cada paquete de datos. Para facilitar las cosas, decide hacer volcados completos cada 10 paquetes, por lo que # 0, 10, 20, 30, etc.

Su algoritmo de recepción para un paquete con el número de secuencia N es entonces:

si N% 10 == 0: # volcado completo …

si N> lastN: # … enviado después del último volcado completo

guardar volcado, último N = N

más:

descartar paquete # datos antiguos, ignorar

más: # volcado incremental …

si N / 10 == lastN: # … hecho contra el volcado completo tenemos

paquete de proceso

más:

descartar paquete # no tiene referencia volcado completo, ignorar

De esta forma, maneja los paquetes correctamente independientemente de su orden de recepción.

Simplemente poner TCP en paquetes UDP sería una tontería, ya que las otras respuestas se expanden. El único caso que puedo imaginar sería si hicieras VPN sobre UDP (porque estarías rellenando las conexiones TCP y UDP en paquetes VPN que ellos mismos viajaron sobre UDP).

Su pregunta parece basarse en la premisa incorrecta de que TCP se implementa en términos de UDP; ese UDP es todo o parte de los fundamentos del protocolo TCP. Si eso es lo que estás implicando con tu pregunta, entonces la pregunta no tiene sentido, porque la premisa es incorrecta.

No entiendo esto. TCP y UDP son capas alternativas sobre IP. Podría poner un paquete TCP como la carga útil de un paquete UDP, lo que simplemente resultaría en una sobrecarga sin sentido del encabezado UDP. No ganaría nada y desperdiciaría unos pocos bytes de ancho de banda,