Nivel 5

Protocolo P2P

Cómo los nodos se encuentran, comunican y mantienen consenso sin coordinación central.

Arquitectura de la red

Bitcoin es una red peer-to-peer (P2P): los nodos se conectan directamente entre sí sin servidores centrales. No hay jerarquía. Cada nodo es igual a los demás.

Cuando ejecutas un nodo Bitcoin, te conectas a otros nodos (peers), recibes y envías transacciones, descargas y verificas bloques, y contribuyes a la propagación de información.

Descubrimiento de peers

¿Cómo encuentra tu nodo otros nodos para conectarse?

DNS seeds

Bitcoin Core tiene hardcoded varios "DNS seeds": dominios que responden con direcciones IP de nodos activos.

Al iniciar por primera vez, el nodo consulta estos DNS seeds y obtiene una lista inicial de peers.

Mensaje addr

Una vez conectado, los nodos intercambian direcciones de otros nodos que conocen mediante mensajes addr. Tu nodo guarda estas direcciones para futuras conexiones.

Conexiones manuales

También puedes añadir peers manualmente con addnode si conoces direcciones específicas.

El handshake inicial

Cuando tu nodo se conecta a un peer:

  1. version: Envía información sobre tu nodo (versión del software, altura del blockchain, servicios que ofreces)
  1. verack: El peer responde con su propia información y un acknowledgment
  1. Negociación: Ambos determinan qué features soportan mutuamente

Después del handshake, los nodos pueden intercambiar transacciones, bloques y otra información.

Mensajes principales del protocolo

Inventario y solicitud

  • inv (inventory): "Tengo estos items (transacciones o bloques)"
  • getdata: "Envíame estos items específicos"
  • notfound: "No tengo lo que pediste"

Transacciones

  • tx: Una transacción completa
  • mempool: Solicita el inventario de la mempool del peer

Bloques

  • block: Un bloque completo
  • headers: Solo los headers (para sincronización inicial rápida)
  • getheaders: Solicita headers a partir de cierto punto
  • getblocks: Solicita inventario de bloques

Sincronización

  • sendheaders: Pide que el peer anuncie bloques nuevos con headers directamente
  • sendcmpct: Negocia el uso de compact blocks

Propagación de transacciones

Cuando creas una transacción:

  1. Tu wallet la envía a tu nodo (o al nodo al que está conectada)
  2. Tu nodo verifica la transacción
  3. Si es válida, la añade a su mempool
  4. Anuncia la transacción a sus peers con inv
  5. Los peers interesados la solicitan con getdata
  6. Les envías la transacción con tx
  7. Ellos verifican, añaden a su mempool, y propagan a sus peers

En segundos, una transacción válida se propaga a toda la red.

Propagación de bloques

Similar a las transacciones, pero más crítico en tiempo:

  1. Un minero encuentra un bloque válido
  2. Lo anuncia a sus peers
  3. Los peers lo solicitan, verifican, y propagan
  4. Cada nodo actualiza su vista del blockchain

La velocidad de propagación importa: mientras un bloque se propaga, otro minero podría encontrar un bloque competidor (stale block/orphan).

Compact blocks (BIP 152)

Problema: los bloques pueden ser grandes (1-2 MB). Transmitirlos completos es lento.

Solución: compact blocks. En vez del bloque completo:

  1. El minero envía un "compact block": header + IDs cortos de las transacciones
  2. El receptor ya tiene la mayoría de transacciones en su mempool
  3. Solo solicita las transacciones que no tiene
  4. Reconstruye el bloque localmente

Esto reduce drásticamente el ancho de banda y acelera la propagación.

Ataques de red

Eclipse attack

Un atacante controla todos los peers de tu nodo. Puede:

  • Mostrarte una blockchain falsa
  • Ocultarte transacciones o bloques
  • Hacer que creas que tus transacciones se confirmaron cuando no

Mitigación:

  • Conectar a muchos peers diversos
  • Usar Tor para dificultar el targeting
  • Conexiones manuales a nodos de confianza

Sybil attack

Un atacante crea muchos nodos falsos para dominar la red.

Mitigación:

  • No confiar en métricas que dependan del número de nodos
  • El consenso de Bitcoin no depende de "votos" de nodos sino de proof-of-work

DoS attacks

Enviar mensajes malformados o excesivos para consumir recursos del nodo.

Mitigación:

  • Límites de tasa en mensajes
  • Banning de peers que se comportan mal
  • Validación estricta antes de propagar

Tor y privacidad de red

Tu IP es visible para los peers a los que te conectas. Para mayor privacidad:

  • Bitcoin Core soporta conexiones vía Tor
  • Puedes configurar tu nodo para anunciar una dirección .onion
  • Las conexiones Tor añaden latencia pero mejoran la privacidad
Evolución continua

El protocolo P2P de Bitcoin ha evolucionado significativamente desde 2009. Cada mejora busca hacer la red más eficiente y resistente sin comprometer la descentralización. BIP 152 (compact blocks), Erlay (propuesta para reducir ancho de banda de inventario), y otras mejoras continúan desarrollándose.

Puente al nivel 6

Has llegado al núcleo técnico de Bitcoin: criptografía, scripts, transacciones, bloques, protocolo. Ahora la pregunta es: ¿por qué todo esto importa? El nivel 6 explora la filosofía detrás del protocolo y cómo contribuir a su futuro.