Pregunta

Me he dado cuenta de que varias preguntas que hice en el pasado, como esta realmente se reducen a una pregunta más fundamental.

¿Hay patrones de diseño bien conocidos para las comunicaciones de red y en virtud de su naturaleza, protocolo de construcción / análisis? Una búsqueda en Google no ha revelado mucho.

Tenga en cuenta que no estoy en busca de soluciones para cualquier problema dado, estoy en busca de patrones de diseño documentados que se ocupan de las comunicaciones de red y sus protocolos.

EDIT:

Por favor, no sugieren diversos detalles de implementación o hablar de protocolos específicos a menos que esté ligada a un patrón de diseño. el diseño del protocolo no es el problema, que es el patrón de diseño para crear o analizar protocolos que estoy buscando, por no hablar de los patrones de comunicación propios.

Edit2:

Me resulta difícil creer que nadie ha llegado con algunos patrones comunes para la comunicación de red. Sí, lo sé "depende", pero se puede decir lo mismo de cualquier proyecto, sin embargo, hay un montón de modelos que cubren las ideas generales.

¿Fue útil?

Solución

Yo diría que la cadena de patrón de responsabilidad podría ser útil para enviar / recibir datos desde / hacia la red.

Se construye una serie de comandos para enviar al servidor desde el cliente. Cada comando se procesa a través de la cadena de responsabilidad, con datos añadidos para manejar correctamente el comando.

El envío de datos, la cadena podría parecer que

Command   --> Wrap some       --> Encrypt --> Send data
to send       data around 
              the command 
              (source, extra 
              information if 
              needed)

En recibir datos, la cadena podría ser similar, pero al revés

Receive Data  -->  Decrypt --> Unwrap extra data --> Execute command

Puede comprobar este artículo para obtener más información sobre la cadena de responsabilidad. http://www.vincehuston.org/dp/chain.html

Otros consejos

Esta es una pregunta muy amplia y su tratamiento requiere probablemente un libro bastante denso.

No sé de cualquiera de tales recursos a mí mismo, pero permite pensar en esto y considerar cuáles serían las dimensiones de un espacio de patrones de comunicación de red:

modalidad conexión: {basado en la conexión, la conexión-less}

modalidad interacción: {síncrono, asíncrono}

conversación complejidad: {-respuesta del comando, de diálogo}

formulario de mensaje: {freeform-stream, bloque semi-estructurada, bloque completamente estructurada} ..?

Un buen lugar para empezar es tomar el TCP / familia de protocolos IP, correlacionarlos con el espacio por encima y echar un vistazo a la aplicación (s) de uno o más ejemplares que ocupan una posición única en el protocolo anterior -características espacio de patrones. El código fuente de sus favoritas * nix OS sería un buen lugar para buscar.

implementaciones del analizador probablemente se dividen en dos grandes categorías: {procesamiento de comandos de conmutación de estado finito-máquina}.

La primera es (obviamente) el más simple de los dos y es probable que la implementación inicial (a menos que usted ha hecho este tipo de cosas antes).

Este último es (probablemente) más robusto y eficiente (en términos de loc), y permitiría la adopción de cambios a un protocolo (si aún está sujeta a cambio de diseño).

(Las instalaciones subyacentes (virtual) de redes del sistema operativo (por supuesto) también influyen en gran medida la aplicación JVM Tome, por ejemplo:.. NIO selección procesamiento de canal basada funcionaría muy bien con una FSM)

Espero que ayude.

Yo recomiendo:. Abstraer el protocolo de red / s

En primer lugar decidir cuáles son las funciones, los módulos y las API entre ellos. A continuación, decidir qué protocolo son los datos que va a montar toda la red.

A continuación encapsular cuidadosamente todos los problemas de la red en su propia capa para que más tarde puede aplicar el cifrado, la compresión, añadir el transporte HTTP (para pasar los firewalls) o lo que sea que desee añadir más tarde en una forma ortogonal a la funcionalidad.

aceptador de patrón / conector: http: //www.cs.wustl. edu / ~ Schmidt / PDF / Acceptor.pdf

Cadena de la base de filtros en Gof Cadena de responsabiliy, se utiliza en una gran cantidad de pila de red / marco.

Las máquinas de estado para la codificación / decodificación. PDU

No sé acerca de los patrones de diseño, pero la investigación de los protocolos existentes es probablemente un buen punto de partida, especialmente los "modernos" los que se han normalizado.

BitTorrent es un protocolo descentralizado altamente popular que tiene un número de extensiones.

OpenSSH es otro buen candidato; que soporta la negociación característica, múltiples tipos de cifrado, y los canales de / Muxing.

protocolos VoIP son buenas para aplicaciones de transmisión: RTP y H.323

protocolos de enrutamiento de red están bien:. BGP (y extensiones), LDP, VRRP / CARP

No sé acerca de los patrones, como por ejemplo, pero hay algunos puntos de selección "obvios". En primer lugar, ¿desea utilizar ASN.1 o no (esto influye mucho)? En segundo lugar, ¿desea un protocolo legible por humanos o de uno binario? En tercer lugar, ¿desea cualquier aspecto de seguridad en su protocolo?

No es que contestar "querer usar ASN.1" obligará teh respuesta a un buen número de las cuestiones de diseño de protocolo.

No han pasado por este fondo, pero supongo este es bueno doc:

Además, este parece un buen libro:

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top