Explora Cardano: 3. Red Cardano: b. Descripción del diseño del protocolo de red
Transmission Control Protocols (TCP) y Internet Protocols (IP) forman un conjunto de protocolos desplegados universalmente en la red. TCP/IP permite un canal de comunicación bidireccional fiable entre sistemas en Internet.
La entrega ordenada de los protocolos de comunicación del nodo Cardano está garantizada por el protocolo TCP/IP.
Los sistemas operativos limitan el número de conexiones simultáneas. Por defecto, Linux, por ejemplo, puede abrir 1.024 conexiones por proceso, mientras que macOS limita este número a 256. Para evitar el uso excesivo de recursos y permitir medios fiables para el establecimiento de conexiones, Cardano utiliza un multiplexor.
Gestión de conexiones
La capa de red se encarga de una serie de tareas específicas, además del intercambio de información sobre bloques y transacciones que requiere el protocolo Ouroboros.
Por lo general, la aplicación de la gestión de las conexiones incluye la realización de las siguientes tareas:
- abrir un socket y/o adquirir recursos del sistema operativo
- negociar la versión del protocolo con el miniprotocolo handshake
- la generación del thread que ejecuta el multiplexor (que puede ser instruido para iniciar/detener varios mini-protocolos)
- descubrir y clasificar las excepciones lanzadas por los miniprotocolos o el propio multiplexor
- cierre de la conexión en caso de error
- gestionar una solicitud de desconexión por parte del par
- desactivar los threads que ejecutan los miniprotocolos
- cerrar un socket
Multiplexado
La capa de multiplexación actúa como un cruce central entre los miniprotocolos y el canal de red. Ejecuta varios mini-protocolos en paralelo en un solo canal - conexión TCP, por ejemplo.
La figura 1 refleja cómo fluyen los datos entre dos nodos, cada uno de los cuales ejecuta tres miniprotocolos utilizando un multiplexor (MUX) y un desmultiplexor (DEMUX).
Figura 1. Flujo de datos entre los nodos mediante multiplexación
Los datos transmitidos entre los nodos pasan por el MUX/DEMUX de los mismos. Hay un emparejamiento fijo de instancias del miniprotocolo, lo que significa que cada instancia sólo se comunica con su instancia dual (un lado iniciador y otro respondedor).
La implementación del miniprotocolo también se encarga de la serialización y la deserialización de sus mensajes. Los miniprotocolos escriben trozos de bytes al MUX y leen trozos de bytes del DEMUX. El MUX lee los datos de los miniprotocolos, los divide en segmentos, añade una cabecera de segmento y transmite los segmentos al DEMUX de su par. El DEMUX utiliza las cabeceras de los segmentos para reensamblar los flujos de bytes para los miniprotocolos de su lado. El propio protocolo de multiplexación (véase la nota siguiente) es completamente agnóstico a la estructura de los datos multiplexados.
Nota: Este no es un uso genérico, sino especializado, de la multiplexación. Los miniprotocolos individuales tienen restricciones estrictas sobre los mensajes no reconocidos que pueden estar en vuelo. El diseño evita las condiciones en las que el uso de TCP general sobre multiplexación TCP crea un rendimiento caótico.
Segmentos de datos del protocolo de multiplexación
Los segmentos de datos de multiplexación incluyen los siguientes detalles:
- Hora de transmisión - una marca de tiempo basada en los 32 bits inferiores del reloj monotónico del emisor con una resolución de un microsegundo.
- ID del miniprotocolo - el ID único del miniprotocolo.
- Longitud de la carga útil - el tamaño de la carga útil del segmento en bytes. La longitud máxima de la carga útil soportada por el formato de cable de multiplexación es 216 - 1. Ten en cuenta que una instancia del protocolo puede elegir un límite menor para el tamaño de los segmentos que transmite.
- Modo - el bit único M (el modo) se utiliza para distinguir las instancias duales de un miniprotocolo. El modo se pone a 0 en los segmentos del iniciador (el lado que tiene inicialmente la agencia), y se pone a 1 en los segmentos del respondedor.
Protocolos de comunicación de los nodos de Cardano
Cardano utiliza protocolos de comunicación entre procesos (IPC) para permitir el intercambio de bloques y transacciones entre nodos, y para permitir que las aplicaciones locales interactúen con la blockchain a través del nodo.
Visión general del IPC de nodo a nodo
El protocolo Node-to-Node (NtN) transfiere transacciones entre nodos completos. NtN incluye tres miniprotocolos (chain-sync, block-fetch y tx-submission), que se multiplexan en un único canal TCP mediante un paquete network-mux.
El siguiente diagrama representa el flujo operativo de la NtN:
La NtN sigue una estrategia basada en el pull, en la que el nodo iniciador consulta si hay nuevas transacciones y el nodo respondedor responde con las transacciones si las hay. Este protocolo se adapta perfectamente a un entorno sin confianza en el que ambas partes necesitan estar protegidas contra los ataques de consumo de recursos de la otra parte.
Explicación de los miniprotocolos NtN
Una breve explicación de los miniprotocolos NtN:
- chain-sync: protocolo que permite a un nodo reconstruir la cadena de un nodo anterior
- block-fetch: un protocolo que permite a un nodo descargar cuerpos de bloque de varios pares
- tx-submission: un protocolo que permite el envío de transacciones. La implementación de este protocolo se basa en un miniprotocolo genérico, con una peculiaridad: los papeles del iniciador y del respondedor se invierten. El servidor es el iniciador que solicita nuevas transacciones, y el cliente es el respondedor que responde con las transacciones. Esta inversión de roles se diseñó así por razones técnicas.
Para garantizar un servicio de red óptimo, el equipo también ha implementado un protocolo adicional:
- keep-alive: un protocolo que garantiza la conexión continua entre nodos y minimiza los fallos de rendimiento.
Visión general del IPC de nodo a cliente
Node-to-Client (NtC) es una conexión entre un nodo completo y un cliente que consume datos pero no participa en el protocolo de Ouroboros (un monedero, por ejemplo).
El propósito del protocolo NtC IPC es permitir que las aplicaciones locales interactúen con la blockchain a través del nodo. Esto incluye aplicaciones como backends de monederos o exploradores de blockchain. El protocolo NtC permite a estas aplicaciones acceder a los datos brutos de la cadena y consultar el estado actual del libro mayor, y también ofrece la posibilidad de enviar nuevas transacciones al sistema.
El protocolo NtC utiliza el mismo diseño que el protocolo Node-to-Node (NtN), pero con un conjunto diferente de miniprotocolos, y utilizando tuberías locales en lugar de conexiones TCP. Como tal, es una interfaz de nivel relativamente bajo y estrecho que expone sólo lo que el nodo puede proporcionar de forma nativa. Por ejemplo, el nodo proporciona acceso a todos los datos brutos de la cadena, pero no ofrece una forma de consultar los datos de la cadena. El trabajo de proporcionar servicios de datos y APIs de nivel superior más convenientes se delega a clientes dedicados, como cardano-db-sync y el backend del monedero.
Mini-protocolos NtC
El protocolo NtC consta de tres miniprotocolos:
- chain-sync - utilizado para seguir la cadena y obtener bloques
- local-tx-submission - utilizado para la presentación de transacciones
- local-state-query - utilizado para consultar el estado del libro mayor
La versión NtC de chain-sync utiliza bloques completos, en lugar de sólo cabeceras de bloque. Por eso no se necesita un protocolo de obtención de bloques independiente. El protocolo local-tx-submission es como el protocolo NtN tx-submission pero más simple, y devuelve los detalles de los fallos de validación de las transacciones. El protocolo local-state-query proporciona acceso de consulta al estado actual del libro mayor, que contiene muchos datos interesantes que no se reflejan directamente en la cadena.
Cómo funciona NtC
En NtC, el nodo ejecuta únicamente el lado productor del protocolo de chain-sync, y el cliente ejecuta únicamente el lado consumidor.
Esta tabla muestra los miniprotocolos habilitados para la comunicación NtC:
Encuentra una copia oficial de este documento aquí:
https://docs.cardano.org/explore-cardano/cardano-network/networking-protocol
Más traducciones de Cardano en: Cardano For The World