Cómo construir un protocolo de software

No se crea un protocolo de software, en primer lugar.

Un protocolo es una especificación , es un contrato que especifica cómo las diferentes partes interactúan para lograr algún objetivo. Es un conjunto de interfaces que describen estados de comunicación, transiciones y solicitudes o mensajes intercambiados entre las partes. Por lo general, puede estar orientado a la conexión o al paquete.

Las implementaciones de protocolo se construyen, de acuerdo con la especificación, utilizando un lenguaje de programación.

Antes de diseñar un nuevo protocolo, pregúntese cuál es la necesidad, si ya existe un protocolo que resuelva esa necesidad, quién lo adoptará, etc.

Los protocolos de software definen la estructura de un diálogo entre sistemas informáticos. Requiere definir estados de comunicación y la estructura de los mensajes. Debe identificar todas las formas posibles que puede tomar una conversación y tener en cuenta también los eventos inesperados y las excepciones. Debe tener en cuenta la seguridad , la vulnerabilidad a los ataques, las fallas del sistema, la congestión del tráfico de red, la escalabilidad y el rendimiento … etc.

No es una tarea para tontos.

Prerrequisitos

Supongo que alguien que intenta diseñar un protocolo de software, debe tener un título en CS y estar familiarizado con protocolos de software como TCP, UDP, SNMP, ICMP, HTTP, SS7, SIP, XMPP, ALOHA, etc. También debe conocer el diseño de software y modelado (UML) para dibujar diagramas de estado, diagramas de interacción, diagramas de flujo … y formatos de representación de datos (por ejemplo, ASCII / UTF, IEEE 754, formatos de audio, formatos de video, conceptos como big-endian, little-endian y cosas por el estilo) , tal vez también la corrección de errores (como los códigos de Hamming), la seguridad de los datos (SSL, PKI, Kerberos, etc.) y tal vez algunos antecedentes sobre la teoría de la información (por ejemplo , el teorema de Shannon-Hartley )

Pasos

  1. Describa el propósito y el contexto (entorno), partes interesadas, etc.
  2. Defina la capa conceptual y qué capas subyacentes admiten el nuevo protocolo.
  3. Identificar las partes comunicantes y sus roles.
  4. Definir estados de comunicación.
  5. Definir transiciones de estado y acciones (comportamientos).
  6. Definir formatos de mensajes.
  7. Identifique todas las formas en que puede salir mal, validaciones, mecanismos a prueba de fallas, etc.
  8. Seguridad
  9. Revise, obtenga comentarios externos, refine, refine, refine …
  10. Construir una implementación de referencia

Antes de comenzar, piense en el entorno, ¿en qué capa está este protocolo? Consulte las capas OSI para obtener un marco conceptual: físico, enlace, red, transporte, sesión, presentación, aplicación. Identifique las capas inferiores que admitirán su protocolo (por ejemplo, ¿sobre HTTP (S), sobre TCP o sobre UDP?). Describa el entorno (¿está abierto, como Internet, o está cerrado, como una red de área local? ¿Qué restricciones tenemos? Etc.)

Primero identifique las partes de la conversación, defina los casos de uso, defina los estados y las transiciones, identifique los estados iniciales y los estados finales.

Defina el formato del mensaje y cómo manejarlo el receptor.

La parte receptora no debe asumir que el remitente es una parte de buena voluntad, debo insistir en que los sistemas abiertos son propensos a las partes maliciosas (piratas informáticos, redes de bots, etc.) y la complejidad de los protocolos se debe especialmente a los mecanismos de control y protección, teniendo en cuenta los casos raros (¡el caso típico suele ser el más simple!) como ataques DoS, Man-in-the-Middle, concurrencia (condiciones de carrera, etc.). Un buen ejemplo de esto es cómo TCP controla la velocidad de la transmisión de tal manera que Internet se mantiene estable, al aumentar la velocidad muy gradualmente.

Con todo esto, terminará con un montón de especificaciones de interfaz, como el IETF RFC (Solicitudes de comentarios).

Después de tener todas las especificaciones y definiciones de interfaz, “solo” necesita construirlo para una plataforma específica y probar que todos los escenarios descritos en el papeleo como se esperaba, y luego tiene una “implementación de referencia” de su nuevo protocolo .

Pero todo depende de qué va a resolver ese protocolo …

Para los lectores interesados, recomendaré un clásico: “Computer Networks”, de A. Tanenbaum.