Bitcon1O1

Red Peer to Peer (P2P)

2022/10/24

Red punto a punto P2P

La red punto a punto (peer to peer) P2P de Bitcoin, esta diseñada para ser abierta y descentralizada. Es abierta porque no existe autenticación para participar en ella, cualquiera puede conectarse y empezar a intercambiar mensajes. Los nodos que participan en la red son pares el uno del otro, no existen servidores y no hay jerarquías en la red. Una vez conectados los mensajes pueden fluir en cualquiera de los sentidos. Esta red existe principalmente para transmitir tres piezas fundamentales del inventario de Bitcoin. Los bloques y las transacciones que estos contienen, las transacciones aún no confirmadas y las direcciones de red a las que los nodos pueden conectarse. Todos los nodos, a menos que se configuren de forma especial, validan y propagan transacciones y bloques, así mismo descubren y gestionan conexiones hacia otros pares y aceptan conexiones de otros nodos. Todo nodo, por default intentará establecer 8 conexiones salientes hacia otros nodos, 2 conexiones salientes pero solo de transmisión de bloques, y recibirá conexiones entrantes, si así se configura, hasta por 125 conexiones en total.

Red punto a punto P2P

Red punto a punto P2P

Descubrimiento de la red

Cuando un nodo se inicia por primera vez, tiene que buscar a que otros nodos puede conectarse, a este paso se le denomina descubrimiento de la red. Lo primero que hace un nodo nuevo es solicitarle una lista de posibles direcciones a un DNS Seeder, si no le es posible obtener direcciones de estos seeders (existen 6 seeders distintos), entonces existe una lista fija de 600 direcciones IP a las que se puede conectar el nodo. Al iniciar este proceso el nodo debe descubrir al menos un nodo en la red al cuál conectarse. Una vez establecida la comunicación, el nodo iniciará un proceso de “handshake”.

Secuencia handshake

Secuencia handshake

Una vez establecida la comunicación, el nuevo nodo A, envía un mensaje ADDR con su información de conexión, cada nuevo nodo que desea aceptar conexiones de entrada crea un mensaje ADDR con su información de conexión y la envía de forma no solicitada a sus pares. Algunos de estos pares a su vez enviarán un mensaje similar a sus pares, también de forma no solicitada, y así sucesivamente, lo que permitirá un proceso descentralizado de descubrimiento de pares. El nuevo nodo también puede enviar un mensaje GETADDR para solicitar nuevas direcciones a las que puede conectarse potencialmente. El nodo, en respuesta, enviará una serie de mensajes ADDR con la lista de las direcciones que conoce, tal como se muestra en la siguiente figura.

Propagación direcciones

Propagación direcciones

Cada nodo administra una tabla de direcciones nuevas y otra tabla de direcciones utilizadas. La tabla de direcciones nueva almacena las nuevas direcciones que se obtienen del protocolo de descubrimiento. La tabla de direcciones utilizada contiene direcciones a las que el nodo ha podido conectarse alguna vez. Una conexión “feeler” se establece como la conexión de salida número nueve, una vez que las 8 conexiones de salida se han establecido, y su propósito es probar de forma regular las direcciones de la tabla de direcciones nuevas, para ver si en realidad son nodos válidos a los cuales conectarse. Esencialmente, la conexión “feeler” limpia la basura de la tabla de direcciones nuevas y llena la tabla de direcciones utilizadas con direcciones válidas.

La lógica de la red punto a punto de Bitcoin es compleja para evitar distintos tipos de ataque, como podría ser el ataque de eclipse, en donde una serie de nodos atacantes podrían buscar aislar a un nodo, para tratar de hacer una transacción de gasto doble, o en caso de que el nodo atacado fuese un minero, podrían intentar hacerle perder recursos minando en una copia de la cadena obsoleta. Para evitar este tipo de ataque es fundamental que el nodo se conecte, por lo menos, a un nodo honesto que no ha sido comprometido por el atacante, de esta forma el nodo honesto se encargará de continuar conectando al nodo a mas nodos honestos que le brinden información verídica y fresca. La mejor defensa de una red punto a punto es contar con diversidad en la redundancia de sus conexiones. Por la naturaleza de la red Bitcoin existe una tensión natural entre mantener conexiones de largo plazo, que han sido probadas como confiables, y la privacidad que pueden brindar nuevas conexiones recurrentes, que ayudan a obscurecer la identidad de un nodo.