¿Cómo mejorar TCP/IP para una WAN interplanetaria?

Fondo

Es el futuro cercano. Después de una gran guerra mundial y un intercambio nuclear limitado, las naciones de la Tierra se han consolidado en unos pocos bloques. La amenaza de más guerras y el daño acumulativo al planeta estimulan una enorme inversión privada en la colonización del espacio. Las colonias flotantes rodean la Tierra y las órbitas cercanas a la Tierra del Sol. La terraformación de Marte ha comenzado. Una gran demanda de recursos fuera de la Tierra ha extendido las operaciones de extracción de asteroides por todo el sistema solar.

Un gran número de facciones se han desarrollado en el espacio. Ninguna facción tiene suficientes recursos para construir un sistema de comunicaciones que abarque todo el sistema solar interior, especialmente considerando que el costo de implementación de los nodos de comunicaciones es alto (los cohetes son caros). Las facciones en competencia deciden desarrollar un sistema de comunicación colaborativo modelado en Internet, donde ninguna facción puede ser dominante.

Problema

El conjunto de protocolos de Internet (con capas de enlace , Internet y transporte ) funciona bien en la Tierra, donde las computadoras estáticas están conectadas entre sí mediante cables. Los cables permiten una comunicación casi instantánea y las conexiones cableadas rara vez se modifican. A escala interplanetaria, llegan dos grandes problemas.

  • Conexiones escasas : los cables en la tierra son baratos, pero las antenas parabólicas que funcionan en distancias AU cuestan mucho dinero, por lo que hay un número limitado de conexiones que puede tener cada nodo. Además, las conexiones se pueden bloquear, según la posición relativa a los planetas y el sol. Es posible que dos nodos no puedan comunicarse durante horas o días a la vez. Es importante destacar que gran parte de la interrupción está programada, debido a las características orbitales y de rotación fácilmente predecibles. Un buen conjunto de protocolos tendrá la capacidad incorporada de optimizar la ruta de transferencia física de nodo a nodo para garantizar que los datos lleguen a donde van lo más rápido posible y para que las comunicaciones bidireccionales no se interrumpan innecesariamente.

  • Latencia : el tiempo de viaje del mensaje de un lado al otro del cinturón de asteroides toma alrededor de 45 minutos. De la Tierra a Marte en el acercamiento más cercano es de unos 3 minutos. Esto es significativo cuando se trata de un protocolo de enlace TCP/IP o SSL. Los protocolos deben minimizar la necesidad de comunicaciones bidireccionales sin sacrificar la seguridad. Además, si los paquetes en la misma sesión TCP tomaron dos rutas diferentes del punto A al punto B; en la Tierra, esta es una diferencia de tiempo insignificante, pero en el espacio podrían llegar con minutos, o incluso horas, de diferencia.

Declaración de trabajo

¿Cuál es el conjunto de cambios más pequeño que puede realizar en el conjunto de protocolos TCP/IP para optimizar su rendimiento en las redes interplanetarias?

El objetivo es optimizar la confiabilidad, el rendimiento y minimizar la latencia innecesaria.

notas

  • Actualmente, la humanidad está limitada al sistema solar interior (al cinturón de asteroides). Sin embargo, el protocolo desarrollado debería ser extensible al menos al Cinturón de Kuiper, con tiempos de latencia de hasta 10 horas.
  • Esta pregunta se centra en las capas de enlace de datos, IP y transporte; suponga que la capa física funciona bien.
  • Aquí hay un informe sobre los Protocolos de comunicaciones espaciales , aunque esto es para el espacio cercano a la Tierra. Aquí hay una discusión de algunos problemas con las comunicaciones interplanetarias.
Solo quiero señalar que la velocidad de la luz ya causa problemas de latencia aquí en la Tierra. Dada la mejor conexión posible, la comunicación de EE. UU. a Australia no puede funcionar mejor que un ping de 150 ms, porque ese es el tiempo que tarda la luz en recorrer ~ 26,000 millas. Esto es dolorosamente lento para algunas aplicaciones, como los videojuegos FPS o la transmisión en vivo.
La última oración de su pregunta tiene mucha mejor información de la que podríamos proponer.
(1) Computer Science Stack Exchange está en cs.stackexchange.com . (2) Esta es un área activa de investigación; Comience con el artículo de Wikipedia sobre Internet interplanetario y siga los enlaces. (3) El Comité Consultivo para Sistemas de Datos Espaciales (CCSDS) , "compuesto por las principales agencias espaciales del mundo" (Wikipedia), está coordinando el esfuerzo.
¿Sabías que no solo soy un fanático de las aeronaves sino que también estudio compsci? De todos modos, su sección Problema habla sobre problemas en la capa física, pero al final de la pregunta dice que la capa física funciona bien. Entonces, ¿qué es ahora?
Posible duplicado: Intercambio de información en el espacio (Divulgación completa: la respuesta aceptada es mía).
Demasiado corto para una respuesta, IP sobre redes de entrelazamiento de enlaces cuánticos.
¿No es esto de lo que se trata la Red de Espacio Profundo de la NASA?
@Renan No, Deep Space Network se trata de garantizar que la NASA tenga una cobertura completa de los cielos a medida que la Tierra gira. Consta de tres sitios terrestres separados cada uno por 120° para garantizar una comunicación continua.
@Schwern Ver worldbuilding.meta.stackexchange.com/questions/6621/… para una discusión de ciencia dura vs no ciencia dura. El otro es ciencia dura, así que esto no es un duplicado.
¿Cómo funcionaba el correo electrónico a través de líneas telefónicas? Las comunicaciones eran caras y la latencia alta (debido a la espera de que se produjeran las escasas comunicaciones, no a que la línea en sí fuera lenta). Su servidor de correo electrónico típico llamaría a un puñado de otros servidores de correo electrónico una vez al día, para enviar todos los correos electrónicos de ese día, IIUC.
¿Tiene que ser TCP ? ¿Podría salirse con la suya con algo que no tenga tantos viajes de ida y vuelta, como UDP o incluso un protocolo personalizado?
Uhm, no es relevante para la pregunta, pero es importante: comunicación basada en láser. Los satélites cuidadosamente colocados y calibrados (realmente pequeños y, por lo tanto, algo asequibles) serían LO que se elegiría. Especialmente porque mantiene baja la latencia entre dos enlaces.
Algo para protocolos de enlace SSL y demás: ¡Use PGP (o similar) para TODO! De esa manera, solo necesita un "índice de clave pública" confiable y puede comenzar a enviar cosas a todos, su clave pública adjunta
@immibis Depende. El correo electrónico corporativo usaba principalmente UUPC, a menudo llamando directamente a los módems de su proveedor de correo en lugar de usar Internet. Pero en el correo electrónico personal, a menudo haría una conexión a Internet, o al menos a un Internet TCP/IP, a través de SLIP o PPP, y luego usaría protocolos basados ​​en TCP como IMAP para recibir correo y SMTP para enviarlo. O incluso Telnet a una caja donde tienes un shell para ejecutar una aplicación de cliente de correo interactivo. Si está hablando de los años 80, entonces marcó directamente en un cuadro donde obtuvo un shell para ejecutar un cliente.
@abarnert Era una pregunta retórica.

Respuestas (10)

La respuesta obvia a las redes tolerantes a demoras es almacenar y reenviar.

Con TCP, cuando un enrutador recibe un paquete, inmediatamente lo envía al siguiente salto o, si no puede, lo rechaza y devuelve un error.

Con un protocolo de almacenamiento y reenvío, cuando un enrutador recibe un paquete, busca la próxima vez que espera poder hablar con el siguiente salto (posiblemente eligiendo entre múltiples posibilidades según el tamaño del paquete, cuál es su las etiquetas QoS dicen, etc.) y lo almacena hasta entonces.

Store-and-forward se remonta a SMTP, NNTP, UUCP y otros protocolos anteriores a la Internet pública. Antes de 1994, si su empresa quería tener correo electrónico externo, eso generalmente significaba que su servidor se conectaba a su proveedor dos veces al día a través de UUCP y enviaba y recibía todos los mensajes salientes y entrantes. Pero los DTN modernos necesitan algo más granular que "enviar todo a un host dos veces al día". (Además, estos protocolos están diseñados para redes que se conectan con poca frecuencia pero de baja latencia mientras están conectadas, por lo que hacen un protocolo de enlace mucho más ruidoso de lo que desea para las redes que se conectan a menudo pero de alta latencia).

Mientras tanto, almacenar y reenviar a nivel de pequeños paquetes IP no es tan útil, por lo que agrega una forma para que las aplicaciones definan paquetes de múltiples paquetes. Luego puede enrutar, QoS y administrar la congestión de paquetes completos (así que, idealmente, cuando envía accidentalmente a casa un video 4K en lugar de uno SD, se agota el tiempo de espera en su enrutador local en lugar de desperdiciar todo su ancho de banda y la mitad de su ISP). antes de caer). Como beneficio adicional, los paquetes pueden ser lo suficientemente grandes como para permitirse funciones de seguridad como el enrutamiento basado en la identidad, que también puede ser importante para una DTN.

La forma obvia de hacer todo esto es definir una red de superposición de enrutamiento sobre UDP, muy similar a la forma en que las mallas P2P (posteriores a BitTorrent) funcionan como una superposición sobre UDP. (Excepto que, a diferencia de una malla P2P típica, necesita algo de inteligencia para que no solo vuelva a intentar los paquetes UDP con retroceso exponencial y ajuste de malla automático, sino que almacene horarios programables en su tabla de enrutamiento, porque muchas cosas serán predecibles —no rebotes en ese satélite lunar durante las próximas 3 horas porque está bloqueado por la luna…)

La última vez que miré esto fue hace aproximadamente una década, y el estado del arte era el protocolo experimental en RFC 5050 . Probablemente ha habido avances desde entonces, y es posible que no esté recordando todo a la perfección.

Hay otro RFC diseñado para redes de latencia súper alta: RFC 2549 (IP sobre operadores aviares)
@TED ​​Iba a decir lo mismo, pero veo que me ganaste. RFC2549 es básicamente todo lo que necesitas :-)
Sin embargo, almacenar y reenviar no funciona para transmisiones "en vivo", que aún podría desear.
FWIW, RFC 5050 sigue siendo la versión más reciente del protocolo de paquete especificado; la nueva versión siete está actualmente en proceso de convertirse en un RFC .
Genuinamente entusiasmado con la perspectiva de que en realidad podamos terminar usando 2549 algún día.
@TED: En una nota más seria, algunos muchachos realmente implementaron RFC2549, y los cambios y ajustes que tuvieron que hacer en Linux (creo que eso es lo que estaban usando, aunque puede haber sido uno de los BSD) pila de red para hacer funciona con los retrasos de ruta extremadamente largos probablemente sean muy relevantes para esta pregunta.
@JörgWMittag El único problema es que no agregaron redundancia o verificación de errores en el protocolo, lo que provocó una gran pérdida de paquetes al enviar solicitudes de eco ICMP a través de IPoAC.
@TED ​​Eso sería excelente, desafortunadamente, el portador en el RFC solo se propaga en un medio específico que no se sabe que esté presente en el espacio interplanetario en cantidades suficientes.
¿No requeriría esto también una reescritura de BGP ?
Entonces, ¿los pollos espaciales finalmente tienen un uso?

La NASA ya pensó un poco en esto y ha desarrollado un concepto llamado "DTN" o Delay-Tolerant-Networking . Básicamente, comprueba si la conexión es posible con el siguiente "salto" o estación, y luego envía los datos. Si no está disponible, lo almacena en la memoria local hasta que se restablece la conexión. Esto puede operar junto o por separado del tradicional TCP/IP

En términos de infraestructura, estoy imaginando una solución a gran escala que involucre una serie de grandes platos espaciados alrededor del planeta para que al menos uno siempre tenga una conexión con un lugar o planeta determinado. Estos platos actúan como puentes hacia el resto del sistema solar, emitiendo enormes cantidades de datos a sus destinatarios a medida que las conexiones están disponibles. Al conectarlos en red, pueden transferirlo automáticamente de un plato al siguiente según sea necesario.

Probablemente desee cambiar de TCP/IP, que se basa en paquetes, a algo que sea direccionable por contenido. TCP/IP se basa en la suposición de que puede señalar la congestión a las personas que usan la red descartando paquetes. Si su tiempo de ida y vuelta es alto, se convierte en un método de señalización muy costoso.

Lo que le gustaría hacer es decirle a la red que desea cierta información y descargarla del nodo más cercano que tenga esa información. De esa manera, puede obtener su información más rápido si alguien más ya usó esa información antes. Un ejemplo de una implementación actual de esto es IPFS (Sistema de archivos interplanetarios).

Funciona como un gigantesco enjambre de bittorrent en el sentido de que descarga la información necesaria de pares cercanos que tienen la información. Esto reduce el tráfico duplicado en enlaces congestionados/costosos y disminuye la cantidad de tiempo que lleva obtener la información que necesita.

¿Cuál es el conjunto de cambios más pequeño que puede realizar en el conjunto de protocolos TCP/IP para optimizar su rendimiento en las redes interplanetarias?

Estoy un poco sorprendido de que nadie haya dicho esto todavía, pero no usaría ni TCP ni UDP. No es viable. La idea de cualquier nivel de conexión en vivo más allá de la órbita terrestre no es razonable. El viaje de ida y vuelta a la Luna es de 2,6 s. Aquí tenemos una conexión a Internet por cable que se vuelve bastante poco fiable cuando hace mal tiempo, por lo que he experimentado velocidades de Internet en las que los paquetes ICMP han requerido más de 2 segundos para un viaje de ida y vuelta y puedo decirles que Internet es prácticamente inutilizable bajo esas condiciones.

El mejor viaje de ida y vuelta que puede esperar entre Marte o Mercurio 6m24s y 6m, respectivamente. El siguiente lugar más interesante para estar más allá de Marte es Júpiter, y su mejor tiempo de ida y vuelta es más de una hora (69m47s).

Se mencionó la red tolerante a interrupciones/retrasos. DTN puede ser adecuado para conexiones de red en vivo orbitales o posiblemente incluso Tierra-Lunar, pero más allá de eso, usaría algo más.

Las conexiones de redes interplanetarias no estarían activas. De hecho, no tendría una conexión persistente, y mucho menos una conexión directa a cualquier Internet planetario más allá del suyo. Enviaría un paquete solicitando información muy específica y recibiría su transmisión de respuesta unos minutos o más después, dentro de los límites de tener que compartir el espectro de radio con todos los demás en el sistema solar. La transmisión se dividiría en "paquetes", pero no en paquetes en el sentido de TCP, más bien como paquetes en el antiguo sentido de Fidonet. En lugar de volver a solicitar los datos, simplemente repetiría su solicitud, especificando solo los bloques de datos que se perdieron o se confundieron; los protocolos se diseñarían de tal manera que tuvieran un marco predecible de los datos solo para que pudiera solicitar solo los datos incorrectos.

Algunos datos se transmitirían continuamente, algunos estarían disponibles a través de un transpondedor y otros se transmitirían en algún tipo de horario.

Habría alguna sincronización localizada, aunque no todo Internet. Wikipedia y otras grandes bases de datos, por ejemplo, se sincronizarían localmente. Las actualizaciones se solicitarán a partir de una marca de tiempo específica para que solo se transmitan los datos de sincronización actuales.

La comunicación en la red interplanetaria se parecería más al antiguo sistema de teletipo que al antiguo sistema BBS.

@Hobbamok me recuerda que la transmisión de microondas se usaría para las conexiones punto a punto entre los asentamientos, los puestos de avanzada y la Tierra. Es muy posible que también se utilice láser cuando sea apropiado. Eso anularía el problema de tener que compartir ancho de banda con el resto del sistema solar.

FidoNet es un gran ejemplo. Estaba pensando en UUCP y NNTP, pero la mayoría de las mismas razones por las que FidoNet era mejor para operadores pequeños pero ampliamente conectados en los años 80 serán ciertas en el futuro interplanetario.
Pero mientras tanto, con algunos cambios menores, su protocolo similar a Fido se puede canalizar a través de UDP exactamente de la misma manera que Fido podría hacerlo. Y eso significa que IPv7 UDP sirve como lingua franca para conectar una colección diversa de protocolos de nivel inferior con una colección diversa de protocolos de nivel de aplicación (o paquetes de protocolos en algún punto intermedio) sin necesidad de implementar todo el producto cartesiano.
+1 por la primera oración. No usaríamos TCP (ni UDP) sino otra cosa. Tal vez similar, pero no exactamente lo mismo.
¿Por qué TODOS se quedan con las ondas de radio? En una civilización lo suficientemente avanzada como para colonizar planetas, ¿qué nos impediría usar enlaces láser finamente calibrados? Mucho menor tiempo de transmisión, mucho menos ruido y casi NINGÚN consumo de energía en comparación
@Hobbamok Soy un gran admirador tanto del láser como del microondas, así que debería haberlo incluido en mi publicación. Estoy de acuerdo en que la velocidad de transmisión sería mucho más rápida, que utiliza una potencia de transmisión significativamente menor para realizar el mismo trabajo y, al ser principalmente punto a punto, no tiene la limitación de tener que compartir frecuencias con todos los demás en el Sistema solar. Gracias por señalar eso.
@Hobbamok, porque esas preocupaciones palidecen en comparación con el problema de la latencia.
@ilkkachu sí, ¡por eso LÁSER! ¿O está tratando de decirme que la luz en el vacío produciría una latencia más alta que las ondas de radio? [y mientras que en sistemas muy pequeños la conversión a luz es un factor de tiempo significativo, este escenario es todo lo contrario]
@Hobbamok, que yo sepa, los láseres están limitados por la velocidad de la luz al igual que las ondas de radio.
@ilkachu sí lo son. Ahora busque en Google ambas velocidades (en vacío) por favor
@Hobbamok Ambos serían 3 x 10 ^ 8 m / s, ¿no?
@ Mr47 sí, gracias por arreglar mi mala suposición, de hecho tienen la misma velocidad. Todavía preferiría enormemente los láseres para cualquier red de comunicación donde sea posible, ya que necesita mucha menos energía si puede dirigir su flujo de información. Pero la parte de la velocidad estaba mal, estaba pensando en que la radio era lo mismo que las ondas de sonido de alguna manera.

El conjunto más pequeño de cambios que podría hacer sería cambiar de TCP/IP a UDP/IP. El mayor problema con TCP es que necesita volver a consultar con el remitente para asegurarse de que el paquete haya llegado. Si toma 10 horas de ida, tomará 20 horas saber que el mensaje que envió ha llegado y si necesita reenviar paquetes.

Con UDP, este paso de verificación se ignora. Si quiero enviar un mensaje, puedo enviarlo en una fracción de segundo. Si no lo logra, la persona que solicita los datos simplemente los volverá a solicitar. No necesito mantener una conexión durante 20 horas impares, solo para asegurarme de que el mensaje ha llegado.

También necesitaría autenticar y cifrar sus datos con una clave compartida que deberá determinarse de antemano, similar a una clave SSH porque sería demasiado ineficiente cifrar las cosas dinámicamente.

Agregado -Editar: la pregunta solicita confiabilidad, rendimiento y baja latencia. Simplemente no puedes tenerlos todos. Si desea confiabilidad y alto rendimiento, no obtendrá baja latencia y si desea alto rendimiento y baja latencia, no será confiable. Es la cosita del triángulo donde solo puedes maximizar dos de los tres. Si se supone que su capa física funciona bien, entonces usar UDP y empujar el resto de la lógica a la capa de aplicación le proporcionará mejores resultados. La falta de protocolo de enlace y verificación significa que tendrá la latencia más baja posible, y el rendimiento y la confiabilidad terminarán dependiendo de su hardware.

La verdad del asunto es que no se utilizará ningún protocolo. Los protocolos garantizan diferentes cosas y sirven para diferentes propósitos. Si tiene una base/sonda remota que tarda 10 horas en comunicarse, no querrá esperar más de 20 horas para ver la transmisión de video en vivo (el apretón de manos, la transferencia de paquetes y la garantía de pedido consumirán todo su tiempo). Vas a usar UDP para asegurarte de tener el video lo más rápido posible (10 horas). Del mismo modo, si está transmitiendo un archivo, desea confiabilidad, y esto se puede agregar a nivel de protocolo (hay muchas variaciones de UDP o simplemente TCP) o nivel de aplicación. Finalmente, si desea transmitir grandes cantidades de datos, desea entregarlos físicamente,

" Si no lo hace, la persona que solicita los datos simplemente los solicitará de nuevo " - espera, ¿no es solo TCP otra vez? UDP no puede reemplazar a TCP. UDP con reglas de retransmisión de cosecha propia para tener confiabilidad, ordenamiento y verificación de errores probablemente funcionará mucho peor que TCP.
@Bergi No. Las retransmisiones no convierten UDP a TCP. Una propiedad fundamental de TCP es el establecimiento de una conexión , y no tiene sentido una conexión con un retraso de horas.
@Bergi La diferencia es que en UDP la lógica de reintento está en la capa de aplicación en lugar de la capa de transporte (modelo de 4 capas, no OSI de 7 capas). TCP tiene sentido para las aplicaciones que no quieren tener que reinventar esa rueda, y pagará la sobrecarga adicional del protocolo de enlace de 3 vías y el desmontaje de 4 paquetes a cambio de permitir que el código TCP realice un seguimiento de los bits complicados. Con un retraso de 20 horas, esa sobrecarga sería contraproducente.
@maaartinus Claro, la retransmisión no es la única característica que separa a TCP de UDP, simplemente lo seleccioné de la respuesta. Pero, ¿qué pasa si quiero enviar contenido grande (posiblemente infinito) que no cabe en un solo paquete UDP? Si necesito un protocolo interplanetario con las características de TCP, "usar UDP" no es una respuesta.
@Bergi Lo que quiera, no quiere desperdiciar 30 para establecer la conexión TCP. Algún tipo de UDP confiable o un protocolo diferente funcionaría mucho mejor que TCP. Escribí una respuesta yo mismo, elaborando esto.
@MontyHarder "Hacer la lógica del protocolo en la capa de aplicación" no es una respuesta a "cómo se vería un protocolo para XY". OP está buscando un protocolo que no requiera que todos reinventen la rueda. Si dice que el protocolo de enlace de 3 vías para establecer una sesión es el único inconveniente de TCP, ciertamente hay formas de evitarlo sin recurrir a UDP. Consulte QUIC o RUPD, por ejemplo.
@Bergi No dije que fuera el único inconveniente de TCP. Dije que era un inconveniente; un "rompe tratos". Como señala maaartinus, necesitaría 30 horas solo para abrir un socket, antes de poder comenzar a mover datos. Pero estaba respondiendo a su afirmación de que es "solo TCP nuevamente" al señalar algunas diferencias. El Protocolo de transferencia interplanetaria (IPTP) tendrá que diseñarse desde cero para enviar una gran cantidad de datos y luego esperar a escuchar lo que se perdió antes de enviar bloques faltantes individuales en lugar de todo lo que pasó el último ACK.
@MontyHarder Sí, "solo TCP nuevamente" fue hiperbólico. Principalmente discuto que IPTP sería solo UDP, o incluso solo UDP con retransmisión. Como dijiste, necesita ser rediseñado desde cero.
@Bergi Mucha gente ha diseñado protocolos que se ubican sobre UDP sobre los que puede superponer otros protocolos. Por ejemplo, RTMFP era un protocolo de red para mallas P2P que proporcionaba una interfaz similar a un socket TCP para la aplicación (aunque solo para Flash Player en la versión lanzada), pero bajo las cubiertas usaba sockets UDP. ¿Por qué? Porque eso permite que se escriba como una biblioteca de modo de usuario que se puede colocar en cualquier aplicación, en lugar de necesitar que se construya como un controlador/servicio y que requiera permisos especiales. UDP no interfiere demasiado, por lo que puede usarlo como si fuera una IP sin procesar.
@Bergi Pero creo que tiene razón en que la respuesta debe decir qué construiría sobre UDP, qué características de TCP construiría y cómo las haría de manera diferente a TCP, etc., en lugar de solo algo encima de UDP.
@abarnert Lo sé, lo he hecho yo mismo :-) UDP es súper simple para trabajar.

almacenamiento en caché

La descarga en primera persona del nuevo Juego de Tronos tarda 20 horas. Después de eso, una copia se almacena en el servidor de almacenamiento en caché y solo toma unos segundos para la segunda persona.

El almacenamiento en caché mantiene los resultados de las solicitudes localmente, por lo que es lento la primera vez mientras obtiene la información, pero mucho más rápido porque ya la tiene para futuras solicitudes. El servidor solo contiene X cantidad de datos, por lo que las solicitudes más antiguas se retiran al final de la cola a medida que se llena.

El resultado final es que las solicitudes más comunes se almacenan localmente y son mucho más rápidas y la transmisión de datos es mucho menor.

El almacenamiento en caché no ayuda a reducir el RTT, ni la cantidad de viajes de ida y vuelta necesarios para un apretón de manos
No, no es así, pero los problemas del apretón de manos ya se habían discutido, por lo que no tenía sentido dar esa respuesta a menos que quisiera repetir a todos los demás. En realidad, habrá una gran cantidad de cambios necesarios para que funcione, de los cuales el apretón de manos y el almacenamiento en caché serían una parte importante.
Entonces, ¿quieres una capa HTTP encima de TCP? Sí, eso funcionará para la transmisión de hiperdocumentos, pero no para otras aplicaciones de TCP.
Si bien sería necesario un almacenamiento en caché extenso, NO ayuda con ninguna de las preguntas de OP.

Necesita cambiar la forma en que su arquitectura de Internet está configurada para tener el almacenamiento en caché de sitios web completos

No hay razón para molestarse con tiempos de inactividad prolongados en Internet, excepto en forma de mensajes enviados de planeta a planeta. Si Internet tiene un tiempo de inactividad de 20 horas solo para cargar una lista de páginas web y otras 20 horas para cargar una página, la gente simplemente no lo hará.

Si desea que las personas usen Internet, cada colonia necesita sus propios servidores para almacenar los contenidos de la web que desean poder ver. Cuando un colono se conecta, en realidad solo se está comunicando con el servidor local. Los servidores locales se comunican a través de la red satelital enviando actualizaciones a otras colonias que descargan las actualizaciones. De esta manera, navegar por la web toma segundos, aunque las noticias pueden tener unas horas de antigüedad, lo que no se puede evitar de todos modos. Este proceso de actualización significa que la red está descentralizada y, debido a que las computadoras locales no se comunican directamente con el acceso a Internet, el tráfico se reduce significativamente. Si las computadoras se comunican directamente con Internet, los enrutadores no podrán manejar todo el tráfico, especialmente si están almacenando paquetes durante el tiempo de inactividad.

Cuando los servidores se comunican, todos los paquetes se envían a la vez y la conexión no se mantiene activa. Este protocolo funciona con la idea de almacenamiento de paquetes propuesta por otras respuestas.

Si tiene varias rutas de enrutamiento a través de las cuales se pueden enviar los mensajes, cada enrutador en la ruta envía los paquetes a través de todas las rutas disponibles y la computadora receptora toma la primera que recibe e ignora los duplicados. Si el paquete está dañado, espera a que llegue un duplicado. Si después de un par de horas solo ha recibido paquetes dañados o no ha llegado ningún paquete, vuelve a solicitar los paquetes.

Los mensajes pueden usar un protocolo diferente. Los mensajes se envían desde el servidor de una colonia directamente al servidor de destino, no a ningún otro servidor de la red. Cuando el servidor receptor recibe el mensaje, envía el mensaje a la computadora que lo recibe.

Con estos métodos, los servidores no pueden permitirse el lujo de abrir y cerrar puertos. Siempre tienen que estar atentos a las actualizaciones para no perderse nada.

Beneficios de este diseño:

Menos computadoras que envían paquetes a través de los enrutadores interplanetarios, reduce drásticamente los viajes de ida y vuelta, el servidor siempre recibe el mensaje lo más rápido posible, no es necesario un apretón de manos, múltiples rutas de enrutamiento significan que la red puede soportar la pérdida de algunos satélites, comunicación casi instantánea con el servidor local , capacidad de enviar actualizaciones en lugar de que el cliente las solicite, protocolo de mensajería separado (ninguna otra colonia ve su mensaje a una colonia diferente).

¿Entonces cada colonia tiene su propia red, y entre ellas hay una red de Internet? Uh, así es como ya está funcionando hoy.
@Bergi Algunas características de esta red: cada colonia almacena su propia Internet, los paquetes se envían a través de múltiples rutas diferentes por redundancia debido a la naturaleza ineficiente de solicitar paquetes, y debido a que Internet se almacena en el servidor de un clon, las solicitudes son casi instantáneas.
" Es su propia Internet ", pero es una red de área local , no una Internet , y es muy probable que muchos servicios no estén disponibles en ella, por ejemplo, cuando desea hacer negocios con otra colonia.
@Bergi Tal vez mi respuesta no fue lo suficientemente clara, cada colonia tiene su propio servidor/base de datos desde donde las personas de la colonia cargan páginas. Cuando alguien va a SE, por ejemplo, y responde una pregunta, la respuesta se envía desde el servidor de la colonia a todos los servidores en los servidores de las otras colonias que actualizan sus bases de datos para mostrar que ha aparecido una nueva respuesta en esa página. Con esta configuración, la carga de una página es instantánea, pero si alguien en una colonia diferente realiza una acción, habrá un retraso antes de que la veas.
"Internet" no es una sola base de datos/servidor, su éxito proviene de que todos pueden configurar su propio servidor. ¿Quién paga por cada otra colonia que aloja una copia de mi servicio? Eso no parece escalar.
Además, el mayor problema es que cada aplicación (como SE) ahora se convertiría en una aplicación distribuida , y esas son mucho más difíciles de codificar. Algunas funciones requieren una sincronización (por ejemplo, si elimina su pregunta, publico una respuesta desde diferentes colonias: un sistema no permite eliminar porque ya hay una respuesta, el otro no permite publicar porque fue eliminado, ¿qué alguien de una tercera colonia ¿ves?). La consistencia es muy difícil de lograr en una base de datos distribuida.
@Bergi El OP dijo: "Ninguna facción tiene suficientes recursos para construir un sistema de comunicaciones que abarque todo el sistema solar interior... Las facciones en competencia se conforman con desarrollar un sistema de comunicaciones colaborativo modelado en Internet, donde ninguna facción puede ser dominante". Cada colonia tiene solo las páginas que quiere en su internet. Si nadie en la colonia va a example.com, no hay razón para gastar espacio almacenando ese sitio web. Piense en ello como un sistema de almacenamiento en caché muy dinámico, donde el caché de la colonia se actualiza periódicamente con nuevos datos y la colonia envía nuevos datos a las otras colonias.
+1. Este concepto se ha utilizado en Forever Free de Joe Haldeman.

Banda ancha

No ha especificado cuánto ancho de banda tiene.

Puede transmitir absolutamente toneladas de información adicional si tiene ancho de banda adicional. Por ejemplo, interplanetary netflix puede transmitir 15 minutos de las 30 películas más similares junto con la película que está viendo cuando llega a su fin, de modo que puede seleccionar otra película para ver y comenzar a verla de inmediato. Lo mismo puede aplicarse a todo tipo de datos.

Predicción

Puede agregar predicción a esto, al igual que funciona Chrome, para seguir los enlaces probables para acelerar la carga en caso de que el usuario haga clic en ellos. Tendría que agregar todos estos datos al paquete. En lugar de cargar la página de inicio de wikipedia, una solicitud a wikipedia podría predecir lo que es probable que vea y transmitir todo el sitio o un resumen de cada página.

voladura de datos

También podría hacer algo similar a una explosión de datos de los años 90, donde la información se mostraría a alta velocidad y el público la grabaría en video y la reproduciría en cámara lenta para leerla. Estar constantemente transmitiendo todo tipo de información de forma continua y almacenándola en caché, en caso de que sea necesario. Incluso con un ancho de banda bajo, cualquier 'ciclo' de repuesto podría usarse para incluir información adicional.

Ejecutabilidad remota

La ejecutabilidad remota sería la capacidad de enviar un pequeño programa que se puede ejecutar en la tierra.

Por ejemplo, quieres jugar al ajedrez interestelar con alguien en la luna Io de Júpiter. En lugar de enviar un movimiento, solo para descubrir 45 minutos después que era un movimiento ilegal porque olvidó que estaba en jaque, sería más rápido si se cargara y ejecutara un pequeño programa de ajedrez tanto en la Tierra como en Io. Luego, cuando se realiza un movimiento ilegal, se puede validar o modificar sin necesidad de enviarlo.

Esto es similar a la validación del lado del cliente en Javascript, por lo que intenta enviar un formulario para registrarse en algo y olvida completar su dirección de correo electrónico, le pedirá que lo complete antes de enviar el formulario en lugar de enviarlo y obtener un error de vuelta.

Otro ejemplo de esto es si un cliente solicita información sobre la posición de la tierra en una fecha determinada. En lugar de que envíen la solicitud y 45 minutos después reciban una respuesta, podrían recibir un pequeño programa ejecutable que calculará esto por ellos.

almacenamiento en caché

Obviamente, el almacenamiento en caché de datos para reutilizarlos localmente pero a una escala más amplia, colocando servidores en varios planetas/satélites y almacenándolos en caché en cada uno de ellos. Por ejemplo, los grandes sitios de noticias serían populares todos los días, por lo que esto se distribuiría y almacenaría en caché entre todas las ubicaciones. Otros datos también se almacenarían en caché y se mantendrían en función de las vistas. Esto es muy similar a cómo funcionaba el sistema de almacén de Amazon: los artículos que es probable que compre la gente se distribuyen automáticamente a los almacenes utilizando algoritmos que predicen que la gente comprará los artículos, lo que ahorra tiempo de envío.


Supongo que una de las cosas clave a tener en cuenta es el cambio de paradigma requerido en términos de desarrollo de Internet. No es realmente una cuestión de cómo entregamos las páginas web y la experiencia de Internet actual , es más una cuestión de cómo se vería la red mundial si la latencia fuera increíblemente alta. . Volvería a capacitar a sus ingenieros de software y reescribiría todas sus herramientas, e Internet se basaría principalmente en aplicaciones, probablemente descargaría la aplicación BBC News y la actualizaría automáticamente todas las mañanas desde un caché local, ya sea descargando todo el sitio, o simplemente navegando por todo el sitio localmente desde un caché.

IPTP (Protocolo de transmisión interplanetaria)

IPTP es un protocolo bidireccional, punto a punto, de almacenamiento y reenvío, diseñado para ser altamente tolerante a fallas.

Los enlaces IPTP se definen entre planetas de modo que en un momento dado haya exactamente un transmisor en órbita alrededor de un planeta transmitiendo datos a cualquier conjunto de receptores en el otro. (El transmisor activo cambiará a medida que el planeta gire y los satélites giren a su alrededor). Este flujo debe poder multiplexar una gran cantidad de subflujos de datos diferentes (procedentes de muchas fuentes diferentes en el Internet planetario de origen), que a su vez ponerse en cola en los búferes para la transmisión real.

El flujo general se dividirá en "bloques" de un tamaño apropiado para la calidad del enlace, cada uno de los cuales se codificará individualmente mediante la corrección de errores Reed-Solomon, y se transmitirán periódicamente bloques de "paridad" adicionales, lo que permitirá la reconstrucción de bloques que excedió el umbral de corrección de errores del código RS en uso para ese bloque. (IPTP permite cambiar el tamaño de este bloque según lo justifiquen las condiciones). Cada bloque debe retenerse en el extremo de envío hasta que se reciba un acuse de recibo de bloque (BACK) del receptor.

Para mayor solidez, después de transmitir una serie de "filas" (N bloques de datos más un bloque de paridad XOR de esos bloques de datos), se transmite una "fila de paridad" (construida mediante la combinación XOR de los bloques correspondientes en M filas consecutivas). Al final de un grupo (llamado "capítulo") de L páginas de M filas y N columnas hay una "página de paridad" (construida mediante la operación XOR de los bloques correspondientes en todas las páginas). Todo el capítulo de (L+1)(M+1)(N+1)bloques debe usar el mismo tamaño de bloque y codificación RS, pero los capítulos posteriores pueden cambiar el tamaño del bloque, así como los valores de L, M y N, según lo justifiquen las condiciones. En general, L, M y N serán mayores cuando sea necesario volver a enviar menos bloques.

Dentro de un capítulo, los subflujos deben ensamblarse en orden de prioridad para minimizar la cantidad de bloques que transportan datos de dos o más prioridades diferentes. La prioridad de transmisión de un bloque es igual al subflujo de nivel de prioridad más alto que contiene.

Antes de cada capítulo hay un encabezado que define esos parámetros. [El Grupo de trabajo de transmisión interplanetaria dice que las futuras versiones de IPTP pueden extender el sistema de paridad a "libros" de K tales capítulos, incorporando (K+1)(L+1)(M+1)(N+1)bloques cada uno. IPTPv1 define K=1 sin paridad, por lo que un libro tiene solo un capítulo.]

Los metadatos "BACK" deben enviarse de regreso del receptor al transmisor para reconocer capítulos completos, así como rangos de bloques dentro de un capítulo. Cualquier bloque no retrocedido que caiga antes del último bloque retrocedido tendrá que ser retransmitido. La determinación de retransmitir no debe tomarse hasta que se haya recibido y descifrado todo el "libro", ya que los bloques, líneas, páginas (y capítulos) de paridad para permitir la reconstrucción completa de un BACK aún no se habrán procesado. Debido a que un BACK en sí mismo ocupa uno o más bloques para ser BACKed, siempre habrá algo para BACK, creando un "keepalive" implícito entre los nodos.

Los metadatos (incluidos, entre otros, los BACK anteriores) son el nivel de prioridad más alto para las subtransmisiones y, por lo tanto, siempre deben ser lo primero en un libro/capítulo después del encabezado del protocolo. El IPTTF todavía está definiendo los detalles de otras consideraciones de QoS.

Una vez que el flujo de datos se reconstruye en el extremo receptor, se puede demultiplexar en subflujos, cada uno de los cuales se envía a su destino deseado en la Internet planetaria.

Paridad XOR, ¿en serio?
Creo que el OP estaba más interesado en cómo funcionaba el enrutamiento, el almacenamiento en caché y el manejo de la latencia, en lugar de qué detección/corrección de errores se usa en la capa de enlace.
Sí, paridad XOR. Es rápido y paralelizable, lo cual es imprescindible para un protocolo que tiene que lidiar con una gran cantidad de métricas de datos que pasan a través de él. Tenga en cuenta que los bloques individuales usan códigos Reed-Solomon internamente, pero esos bloques individuales se pueden transferir a procesadores separados para manejar la corrección de errores en el nivel de subbloque. Solo aquellos bloques que no pudieran ser corregidos por los códigos RS necesitarían la paridad adicional de los arreglos KxLxMxN.
El almacenamiento en caché también se explica aquí. Todo el flujo de datos que va del planeta A al B debe almacenarse en caché hasta que se RESPALDE.
Debo haberme perdido eso en toda la charla sobre páginas, capítulos y libros. ¿Dónde se menciona el almacenamiento en caché?
@Bergi Supongo que podría desarrollar un poco más la parte del reconocimiento de Block.

Una revisión completa es el cambio sensato más pequeño

  • Con una latencia de 10 horas, seguramente no querrás establecer ninguna conexión ya que solo necesita tres paquetes, lo que significa 30 horas desperdiciadas .
  • El control de congestión tipo TCP no tiene sentido. Para obtener la máxima eficiencia, desea dirigir sus platos exactamente a la persona con la que se comunica. Eso es cierto tanto para el emisor como para el receptor (habrá una configuración fija como "este plato se comunica con Plutón" o un horario preestablecido). Esto elimina cualquier congestión en el propio enlace . El enlace siempre funcionará con una velocidad fija, a menos que se rompa.
  • Como el costo de transmisión es mucho más alto que el costo de almacenamiento, cada paquete enviado también se almacenará hasta que se reconozca (muchas horas después).

Supongo que UDP confiable se acerca más a lo que se necesita. De todos modos, puedes olvidarte de usar la red para navegar o similares. Se parecerá más a SMTP. Envía un mensaje y se entregará, posiblemente retrasado por muchas horas debido a las retransmisiones. Puede tener alguna comunicación cliente-servidor, pero se parecerá más a solicitar un libro de una biblioteca que a HTTP.

+1 por mencionar RUDP, -1 por el segundo punto. Sí, habría enlaces individuales entre las colonias en lugar de una transmisión (OP ya estableció que la capa de enlace funciona bien), pero no, eso no evita la congestión. En algún momento, usó el ancho de banda disponible de su enlace, independientemente de la capa física que sea. ¿Confundiste "congestión" con "colisión"?
@Bergi No estoy seguro de la redacción, pero no. No habrá tal cosa en el enlace punto a punto. El remitente enviará con una velocidad fija, no habrá pérdida de paquetes implícita en la congestión, ni bloqueo de nuevas conexiones (ya que no habrá conexiones en absoluto y el rendimiento seguirá siendo el mismo, lo que se opone a lo que dice Wikipedia sobre la congestión . Claro, habrá colas y retrasos, pero en un nivel diferente. Tenga en cuenta que en esta escala de tiempo, esto puede (y probablemente lo hará) incluso regularse a través de precios dinámicos . Eso no es un control de congestión similar a TCP.
Sí, el remitente físico tendrá una velocidad fija, ese es el ancho de banda. Pero si varios clientes intentan usar esa conexión para enviar datos, es posible que deseen enviar más datos de los que la conexión es capaz de enviar. (Lo que también podría ocurrir dinámicamente en cualquier lugar de una red enrutada). Entonces, sí, puede usar la cola en lugar de descartar los paquetes, pero en última instancia eso es una congestión. Es posible que pueda garantizar que no se pierdan paquetes, pero en algún momento los clientes deberán enviar menos datos (para no hacer crecer la cola infinitamente) o elegir una ruta diferente: control de congestión.
@Bergi Estoy de acuerdo y he editado mi respuesta. Habrá congestión en la red, pero no en un enlace. Como el enlace es mucho más caro que el almacenamiento, todo se pondrá en cola. No habrá caídas de paquetes (con algunas excepciones), pero habrá enrutamiento, clasificación y precios dinámicos.
@maaartinus Si hace esto bien, todavía tiene una forma de control de congestión, es muy diferente de la de TCP. No puede permitir que la cola en el enlace interplanetario se alargue demasiado (incluso con TOS complicados), por lo que necesita una mala presión en la red intraplanetaria que pondrá en cola o rechazará los paquetes antes de que lleguen allí, e idealmente empujar eso hasta el final huésped de origen. Cuando intentas enviar un mensaje demasiado grande, normalmente deberías recibir un error inmediato.
@maaartinus Además, puede hacer que el control de congestión sea más predetectable en lugar de puramente reactivo: la aplicación podría ver que no puede enviar su video y mostrar opciones emergentes para que el usuario pueda decidir (o consultar su configuración para reglas predeterminadas) para cambiar a lote para que el video finalmente llegue en aproximadamente 8 días, o suba a la siguiente clase de tarifa, o cancele. Esto es aún más diferente de lo que hace TCP, pero probablemente también sea aún más útil.
@abarnert De acuerdo, pero... Escribí "El control de congestión similar a TCP no tiene sentido" y "elimina cualquier congestión en el enlace en sí ". ¿Estás en desacuerdo? Hay congestión en la red (que se me olvidó en la primera versión). +++El pre-descubrimiento es un punto interesante. Es probable que suceda algo similar internamente: cuando su computadora quiera enviar un paquete destinado a Plutón, le preguntará al remitente interplanetario local antes de siquiera intentarlo. Probablemente enviará los datos al remitente justo antes de la transmisión.