Solicitud de bloques

He estado pensando en esto por un tiempo y parece que no puedo entender parte de la red.

Supongamos que soy un nodo que ha estado fuera de línea durante 5 meses y quiero recuperar los nuevos bloques. Cuando transmito el mensaje getblocks, lo ven diferentes nodos, ¿responden todos mis compañeros o algunos responden y los demás lo ignoran debido a las otras respuestas? Y si todos responden, ¿mi nodo elegiría de cuál/es desea obtener los datos, o obtendría los datos de todos ellos? Si obtiene los datos de todos ellos, ¿no ralentizaría mucho el sistema y crearía mucho más tráfico en la red?

Respuestas (1)

Un nodo no sabe acerca de los otros nodos a los que está conectado uno de sus pares. Responderán con lo que su nodo les solicite, incluso si esto termina siendo bloques duplicados.

Debido a que las conexiones de red son flujos directos, su nodo sabe exactamente lo que ha enviado y recibido de cada uno de sus pares. Por lo tanto, su nodo elegirá los pares de los que desea descargar bloques y les enviará solicitudes específicas para esos bloques. Dado que Bitcoin Core utiliza la primera sincronización de encabezados, no es necesario enviar simplemente un mensaje getblocks; en su lugar, puede usar mensajes getdata para solicitar bloques específicos y distribuir la descarga entre varios pares.

En versiones anteriores de Bitcoin Core, elegiría un nodo para sincronizar y descargar todos los bloques solo desde ese nodo. Sin embargo, este comportamiento ya no se realiza, aunque sigue siendo parte del protocolo y todavía se puede realizar.

Entonces, ¿básicamente obtiene las respuestas de todos los otros nodos y luego las procesa en una cadena para sí mismo? ¿Eso no causaría mucho tráfico?
No, no genera mucho tráfico. No hay respuestas duplicadas de cada nodo porque su nodo garantiza que no haya duplicados al no solicitar los mismos datos de diferentes nodos.