Análisis del Modelo de Red de Bitcoin – Introducción a la red P2P de Bitcoin

in #stem-espanol7 years ago (edited)

Dentro de los elementos claves que garantizan el buen funcionamiento de distintos sistemas informáticos y electrónicos en general, se puede inferir que las arquitecturas de sus redes, más específicamente su análisis en detalle, nos brindara una vista más clara y organizada de los protocolos que subyacen en sus distintos niveles; precisamente, se hace necesario develar el modelo bajo el cual opera la Red de Bitcoin debido a sus múltiples aplicaciones, las cuales pueden ser replicadas y ejecutadas en diversos entornos del sector tecnológico.

La finalidad de este texto es brindar al lector una compresión más asertiva de los elementos que componen la Red Bitcoin, de igual manera se exploraran los protocolos que ejecutan las estaciones o “nodos” para establecer el flujo de datos y demás temas inherentes a la comunicación entre pares.

Fuente

Principalmente y en su aspecto más trivial, Bitcoin se categoriza como una red “entre pares” o P2P lo cual significa que la participación de cada estación (ordenador) dentro de todo este conjunto será equivalente para cada elemento, es decir no existirá un nivel de jerarquía superior ni inferior por tanto se asume que la red es “plana”, todos serán vistos por igual, invalidando así la existencia de un servidor central, así mismo, la aportación de los servicios hacia la red estará distribuida entre los participantes que ejecuten el protocolo Bitcoin.

Al igual que una orquesta sinfónica en la que cada músico  sabe qué hacer y como lo hará en perfecta armonía con el resto de ejecutantes, la red Bitcoin cuenta con nodos que realizan tareas específicas, sin embargo pese al concepto anclado de “red plana” puede que los roles definidos para cada nodo en un determinado momento sean variables; cada estación cumple ineludiblemente el establecimiento de conexiones enrutables que permiten fijar la participación  y su  propio flujo de datos en la red , de igual forma las funcionalidades comprenden la retransmisión de las transacciones, descubrimiento de nuevas conexiones entre pares, etc. En esencia la red consta de nodos que ejecutan el protocolo P2P de Bitcoin, sin embargo más adelante veremos que esta concepción se extiende a un más.

Los nodos comprenden pilas de servicios que dotan a la red, estos se definen como: almacenamiento de base de datos de la cadena de bloques, minado, enrutamiento y monederos; un nodo capaz de ejecutar todas estas prestaciones se considera un “Nodo Completo”, estos a su vez deben tener una copia actualizada de la cadena de bloques para poder validar transacciones de forma independiente , sin embargo esto comprende un uso elevado en disco pues el crecimiento de la cadena es exponencial, por tanto existe otro tipo de nodos que no llevan esta copia actualizada y validan a través de lo que se denomina Verificación de Pago Simplificado (SPV) comúnmente usado en los nodos ligeros; por otra parte los nodos mineros se encargan de resolver el algoritmo de prueba de trabajo concluyendo en el “minado” de nuevos bloques, acción que es realizada a través de equipos especializados que determinan con fuerza bruta los hashes validos que concatenan un bloque con el anterior ; equipos menos potentes pueden ejecutar Bitcoin sin ningún problema , como es el caso de los teléfonos inteligentes que gracias al servicio de SPV pueden convertirse en un nodo ligero , bastante practico para las carteras de usuarios. 

Como habíamos establecido anteriormente, los nodos presentan funcionalidades básicas, (almacenamiento de la cadena de bloques, minería, monedero, enrutamiento), sin embargo el software que articula dichas estaciones puede ser modificado para que solo ejecute una, dos o todas las prestaciones, esto es muy típico pues a lo mejor un nodo que su función principal es servir de cartera no tiene por qué ser un minero, y así podríamos establecer múltiples relaciones. Si analizamos más en detalle, la red Bitcoin es un concepto que se extiende más allá de la superposición de diferentes nodos, de forma exógena a la arquitectura como tal, conviven muchos más protocolos como STRATUM el cual es utilizado por los mineros y carteras de peso ligero convirtiendo así a la red en algo más complejo.

Podríamos establecer una taxonomía (recordemos la jerarquía no existe y los pares siguen siendo iguales entre si) que agrupe los nodos en función de sus servicios:

Tabla N° 1  Tipos de Nodos en función de sus Roles -- Fuente "Mastering Bitcoin" ; Adaptación propia

Como se puede apreciar, existen nodos que corren su propia versión personalizada del cliente original Bitcoin Core (cumpliendo con el protocolo p2p de Bitcoin), estos a su vez heredan el comportamiento de un “router de frontera” pues facilita que otros servicios como los exploradores de bloque, exchangers ,pools de minería y carteras interactúen con las propiedades intrínsecas de la red.     

Inicio y establecimiento de la Comunicación  

Como en toda red, cada elemento que se suma, debe realizar un proceso de inicialización  indicando a si a las otras partes su participación dentro del conjunto. Puesto que Bitcoin corresponde a un modelo abierto y descentralizado no existe limitación alguna para el acceso, con el simple hecho de cumplir con el protocolo y enlazarnos a un par ya estaremos formando parte de la red. En primera instancia, un nodo que desee conectarse a la red , realiza una serie de consultas DNS a través de servidores predispuestos que almacenan “semillas” las cuales son contenedoras de direcciones IP de nodos activos en la red Bitcoin, que por lo general son puntos estables que continuamente están en modo de escucha ; por defecto el cliente original (Bitcoin core) trae anclado consigo 6 semillas DNS, las cuales podemos visualizar directamente en el archivo de chainparams.cpp (línea 112) del código fuente Bitcoin Core.  Una vez el nodo haya obtenido un candidato valido para establecer conexión, se da inicio a una comunicación del tipo TCP entre los pares , mayormente se enmarca en el puerto 8333, en este instante el nodo “nuevo” envía mensajes de versión los cuales comprenden información básica de identificación, más específicamente este mensaje se compone de la siguiente manera:  

Tabla N° 2  Estructura del mensaje VERSION -- Fuente "Mastering Bitcoin" ; Adaptación propia

El otro nodo responde con un mensaje  VERACK haciendo constar que ha recibido la comunicación y de forma instantánea envía su propio mensaje de versión evidenciando así la compatibilidad entre protocolos, cabe destacar que la comunicación no seguirá adelante hasta que ambos nodos hayan intercambiado su versión. Este proceso se denomina “handshsake” o apretón de manos. Un nodo que recién se inicia a la red debe asegurarse de establecer múltiples presentaciones entre unos cuantos pares para que su conexión hacia la red este respaldada por redundancia (múltiples vías) y así mismo ir descubriendo nuevos nodos a medida que sus antiguas conexiones van caducando; el nodo siempre retiene o se acuerda de la interacción más reciente que ha tenido, si este por algún motivo se desconecta y vuelve a iniciar sesión tratara de buscar el par con que estableció actividad más reciente, si en el peor de los casos ninguno de sus pares están operativos al momento de su reincido , procede nuevamente con un apretón de manos con otros nodos.


Imagen 1: Iniciando el "Apretón de Manos" -- Fuente "Mastering Bitcoin" ; Adaptación Personal

Una vez que los pares estén debidamente “comunicados” el primer nodo (el recién llegado) envía el mensaje addr el cual contiene las direcciones de sus vecinos, asimismo este solicita a sus nuevas conexiones las direcciones IP de otros nodos (cocidas por los nodos remotos) mediante el mensajes de petición  getaddr, todo esto con el fin de mantener diferentes vías de comunicación en la red y dar a conocer a el conjunto la presencia de un nuevo integrante. Esto lo podemos asociar con la vida cotidiana, imaginen que el nodo “nuevo” es un recién llegado a un vecindario, lo primero que hace esta persona es establecer una comunicación entre uno o más vecinos de manera tal que les da a entender que ahora formara parte del recinto, seguidamente los vecinos confirman este hecho y proceden a divulgar la llegada de esta nueva persona a otros vecinos.

Imagen 2: Estableciendo rutas con nodos remotos -- Fuente "Mastering Bitcoin" ; Adaptación Personal

Para concluir, los nodos están en comunicación permanente, el tiempo de espera para descartar un nodo que no retransmite mensajes de respuesta es de 90 minutos, por tanto vemos que la red en si es un organismo dinámico que de forma autónoma regula sus necesidades y problemas, concretamente es una malla con propiedades bastantes flexibles de crecimiento y decrecimiento respecto a sus pares. Hemos podidos explorador de una forma bastante practica los elementos que interactúan en la de red de Bitcoin así como el funcionamiento básico de la comunicación inicial entre los nodos, en una próxima entrega seguiré detallando el desarrollo de la arquitectura de red de Bitcoin.     

Referencias

Elogios a 'Mastering Bitcoin'

http://openaccess.uoc.edu/webapps/o2/bitstream/10609/64826/6/jperezdiaTFG0617memoria.pdf https://www.certsi.es/sites/default/files/contenidos/estudios/doc/int_bitcoin.pdf https://www.oroyfinanzas.com/2014/12/tipos-nodos-en-red-bitcoin/ https://itsriodejaneiro.gitbooks.io/bitcoin-para-programadores/content/rede-p2p.html https://en.bitcoin.it/wiki/Network
Sort:  

Me ha gustado tu post, está muy completo te felicito. Ojalá los de stem-espanol lo vean y te den un buen empujón!
Un saludo.

Muchas gracias, he tratado de llevar el contenido a un nivel que sea lo mas digerible para la comunidad en general, sabemos que los cimientos de estas tecnologías es un engranaje complejo , sin embargo pienso que todos pueden entender los aspectos técnicos mas básicos