⛓️ Blockchain Learning Path GitHub

02 · Sistemas distribuidos y redes P2P

Nivel: Inicial-Intermedio · ⏱️ Duración estimada: 120 min · Fuente: Introduction to Reliable and Secure Distributed Programming (Cachin, Guerraoui, Rodrigues) y Distributed Systems (Tanenbaum, van Steen) ⬅️ Currículo · 📚 Bibliografía 🧭 ⬅️ Anterior: 01 · Criptografía aplicada · 📚 Índice · ➡️ Siguiente: 03 · Consenso 📖 Glosario de términos · 🌱 ¿Nuevo en esto? Empieza aquí


🎯 Objetivos

📚 Resultados de aprendizaje

Al finalizar, el estudiante podrá:

  1. Definir seguridad (safety) y vivacidad (liveness) y dar un ejemplo de cada una.
  2. Explicar la compensación del teorema CAP ante una partición de red.
  3. Justificar por qué el resultado FLP limita el consenso determinista en redes asíncronas.
  4. Simular el comportamiento de una red de cinco nodos ante fallos y desórdenes.
  5. Comparar finalidad probabilística y económica con casos concretos.

🗺️ Temas

# Tema Por qué importa
1 Latencia y asincronía Los mensajes tardan y no llegan en orden; el diseño debe tolerarlo.
2 Particiones de red La red puede dividirse; CAP obliga a elegir consistencia o disponibilidad.
3 Replicación y relojes Sin reloj global, ordenar eventos requiere relojes lógicos.
4 Tolerancia bizantina Los nodos pueden mentir, no solo caerse.
5 Mempool y gossip Las transacciones se difunden por propagación entre pares.
6 Resistencia Sybil Sin costo por identidad, un atacante crea nodos falsos ilimitados.
7 Finalidad Determina cuándo una transacción se considera irreversible.

🧠 Modelo mental

Imagina una red de corresponsales que se envían cartas por correo postal sin un reloj compartido: las cartas se cruzan, algunas se pierden, otras llegan en desorden y alguno podría enviar versiones contradictorias a distintos destinatarios. Para ponerse de acuerdo sobre "qué pasó y en qué orden" no basta con esperar; hacen falta reglas que funcionen aunque haya cartas perdidas (particiones) y aunque algún corresponsal mienta (fallo bizantino). Esta imagen explica por qué el acuerdo distribuido es difícil incluso sin adversarios.

El límite de la analogía es que los corresponsales humanos pueden llamarse por teléfono para desempatar; en un sistema abierto no existe ese canal privilegiado ni una autoridad central. Además, "descentralizado" no significa ausencia de gobierno: siempre hay reglas de protocolo, incentivos y procesos sociales que gobiernan el sistema, aunque no haya un administrador único.

🧩 Esquema visual

Propagación por gossip en una red de ocho nodos: cada nodo reenvía a sus pares, pero el enlace caído entre los nodos 4 y 5 parte la red en dos mitades que dejan de verse.

flowchart LR
    subgraph GA["Partición A"]
        N1["Nodo 1"] --- N2["Nodo 2"]
        N1 --- N3["Nodo 3"]
        N2 --- N4["Nodo 4"]
        N3 --- N4
    end
    subgraph GB["Partición B"]
        N5["Nodo 5"] --- N6["Nodo 6"]
        N5 --- N7["Nodo 7"]
        N6 --- N8["Nodo 8"]
        N7 --- N8
    end
    N4 -.-|"Enlace caído: partición"| N5

El triángulo CAP: las tres propiedades deseables y la elección forzada cuando la partición ocurre de verdad.

flowchart TD
    C["Consistencia: todos leen el mismo valor"] --- A["Disponibilidad: toda petición recibe respuesta"]
    A --- P["Tolerancia a particiones: la red puede dividirse"]
    P --- C
    P --> D["Durante una partición real hay que elegir"]
    D --> CP["CP: rechazar peticiones para no divergir"]
    D --> AP["AP: responder siempre y reconciliar después"]

📖 Conceptos y definiciones

🔬 Profundización

¿Qué elige una blockchain en términos CAP?

Una blockchain pública de tipo Nakamoto elige, en la práctica, disponibilidad con consistencia eventual: durante una partición, cada mitad de la red sigue produciendo bloques sobre su propia vista, y al reunificarse la regla de elección de cadena descarta una de las ramas — eso es un reorg. Los nodos que consideraban confirmadas las transacciones de la rama perdedora ven cómo vuelven al mempool. Por eso la finalidad de Bitcoin es probabilística: más profundidad, menos probabilidad de reversión, pero nunca cero.

Caso real verificable: el 25 de mayo de 2022, la Beacon Chain de Ethereum sufrió un reorg de 7 bloques — siete bloques ya propuestos fueron descartados de la cadena canónica. No hubo ataque: fue una consecuencia de la propagación desigual entre clientes actualizados y no actualizados en la implementación del boost del fork choice. La lección de sistemas distribuidos es doble: (1) incluso sin adversarios, la latencia y la heterogeneidad de clientes bastan para producir divergencias temporales; (2) el protocolo se diseña para que esas divergencias se resuelvan solas — la capa de finalidad (checkpoints de Casper FFG, módulo 03) marca el punto tras el cual un reorg ya no es una molestia sino una catástrofe económica. Análisis técnico: https://barnabe.substack.com/p/pos-ethereum-reorg.

Modelos de sincronía y por qué FLP no condena el consenso

El resultado FLP (Fischer, Lynch y Paterson, 1985) prueba que en un sistema asíncrono puro — sin ninguna cota en los retrasos de mensajes — no existe un algoritmo determinista que garantice consenso si un solo proceso puede fallar. Suena letal, pero se aplica a un modelo extremo. Los tres modelos habituales:

Modelo Supuesto sobre los retrasos Consecuencia práctica
Síncrono Existe una cota conocida para todo retraso Protocolos simples, pero el supuesto es irreal en Internet
Parcialmente síncrono La cota existe pero se desconoce, o rige solo tras un instante GST El estándar de diseño real: PBFT, Tendermint y Gasper operan aquí
Asíncrono Ningún límite en los retrasos Aplica FLP: imposibilidad de consenso determinista

Las salidas de la trampa FLP son tres, y todas se usan: sincronía parcial (esperar timeouts y reintentar rondas, como PBFT), aleatorización (el sorteo del líder en PoW y PoS rompe la simetría que FLP explota) y relajar la garantía (aceptar finalidad probabilística en vez de acuerdo instantáneo). FLP dice que no puedes tener siempre terminación garantizada en el peor caso adversarial; no dice que el consenso falle en las redes reales, donde los periodos de buen comportamiento abundan.

Resistencia Sybil: qué recurso encarece las identidades

Crear una identidad en una red P2P abierta es gratis; por eso el voto "un nodo, un voto" es inviable. Cada mecanismo anti-Sybil ancla el peso del voto a un recurso costoso:

Mecanismo Recurso escaso Costo de ataque Límite práctico
Proof of Work Cómputo y energía Adquirir u alquilar más hash que la red honesta, de forma sostenida Hardware y electricidad tienen mercados observables; el costo es externo y recurrente
Proof of Stake Capital bloqueado en el protocolo Comprar y arriesgar una fracción grande del stake, expuesta a slashing El propio ataque destruye el valor del capital atacante; costo interno
Identidad (PoA, consorcios) Autorización verificada fuera de cadena Corromper o suplantar a los miembros autorizados No sirve para redes abiertas; reintroduce una autoridad de admisión

La conclusión conecta con el módulo 03: el mecanismo de consenso no "elige al mejor", solo hace que fingir ser muchos resulte más caro que el beneficio esperado del ataque.

CAP con un ejemplo que se puede seguir a mano

CAP suena abstracto hasta que se ve el instante de la decisión. Dos centros de datos, uno en Santiago y otro en Madrid, replican el mismo saldo: 100 €. Se corta el enlace entre ambos y siguen recibiendo peticiones.

Llega una retirada de 80 € a cada lado, casi a la vez. Los dos caminos posibles:

Opción CP (priorizar consistencia): cada centro se pregunta si puede confirmar con la mitad de la red incomunicada. La respuesta es no.

Santiago → "no puedo confirmar" → el cliente no puede sacar dinero
Madrid   → "no puedo confirmar" → el cliente no puede sacar dinero
Saldo al reconectar: 100 €. Correcto, pero el servicio estuvo caído.

Opción AP (priorizar disponibilidad): cada centro responde con lo que sabe.

Santiago → entrega 80 € → apunta saldo 20 €
Madrid   → entrega 80 € → apunta saldo 20 €
Al reconectar: se entregaron 160 € de una cuenta que tenía 100.

Ese descubierto de 60 € no es un bug del código: es el precio explícito de haber elegido responder durante la partición. Alguien lo asumirá —el banco, el comercio o el cliente—, y esa decisión se toma en el diseño, no en el incidente.

Aquí es donde encaja una blockchain pública: elige CP. Durante una partición no confirma nada de forma definitiva, y de ahí sale la recomendación de esperar confirmaciones. Cuando alguien dice "la transacción tarda", en realidad está describiendo el precio de no permitir jamás un doble gasto.

💡 En una frase: en una partición no eliges entre bueno y malo, sino entre negarte a responder o arriesgarte a contradecirte. No hay tercera opción, y elegir por omisión es elegir igual.

🎓 Si ya dominas esto — las precisiones que suelen faltar
  • CAP está mal enunciado en su versión popular. No se eligen dos de tres: la P no es opcional en una red real, así que la elección solo aparece durante una partición. Brewer lo matizó doce años después y el modelo PACELC lo completa: si hay partición (P) eliges entre A y C, y si no la hay (E, "else") eliges entre latencia (L) y consistencia (C). La segunda mitad describe el día a día, que es el 99,9 % del tiempo.
  • FLP es un resultado más fuerte y menos citado. Dice que en un sistema asíncrono ningún algoritmo determinista garantiza consenso si un solo proceso puede fallar. Los sistemas reales lo esquivan añadiendo supuestos: temporizadores (sincronía parcial) o aleatoriedad. Bitcoin usa lo segundo: la lotería del PoW es lo que rompe la simetría que FLP demuestra irrompible de forma determinista.
  • "Eventualmente consistente" no dice cuándo. Sin una cota temporal es una promesa sin contenido operativo. Los CRDT convierten la reconciliación en algo automático y sin conflictos, pero solo para operaciones conmutativas: "sumar 5" se puede reconciliar, "poner el saldo a 20" no.
  • La finalidad económica de Ethereum es una cota, no una certeza. Revertir un bloque finalizado exige que se destruya al menos un tercio del ETH depositado. Eso hace la reversión ruinosa, no imposible — y por eso se habla de finalidad económica y no absoluta.

🧪 Laboratorio guiado

🧪 Estas prácticas están catalogadas y resueltas paso a paso en el catálogo de laboratorios.

Este módulo es un ejercicio de diseño y simulación en papel; no requiere código específico. Puedes usar pnpm test para correr las pruebas del repositorio si tu diseño incluye un componente verificable.

  1. Dibuja una red de cinco nodos conectados como pares (P2P) e indica sus canales.
  2. Simula un nodo desconectado: describe cómo el resto continúa y cómo se reincorpora luego.
  3. Simula dos mensajes válidos que llegan en distinto orden en diferentes nodos y anota el conflicto.
  4. Simula un nodo malicioso que envía información contradictoria a distintos pares.
  5. Simula una partición temporal que divide la red en dos mitades y su posterior reunificación.
  6. Para cada escenario registra qué propiedades priorizas en una tabla:
Escenario           | Safety | Liveness | Finalidad | Disponibilidad
--------------------|--------|----------|-----------|---------------
Nodo desconectado   | ...    | ...      | ...       | ...
Desorden de mensajes| ...    | ...      | ...       | ...
Nodo malicioso      | ...    | ...      | ...       | ...
Partición temporal  | ...    | ...      | ...       | ...

📝 Reto verificable

Entrega el diseño de la red de cinco nodos con los cuatro escenarios simulados y la tabla de propiedades priorizadas por escenario.

Criterio de aceptación: en el escenario de partición de red identificas explícitamente la compensación del teorema CAP (elegir consistencia o disponibilidad) y justificas cuál propiedad sacrificas y por qué.

⚠️ Errores frecuentes

Síntoma Causa y cómo comprobarlo
Suponer entrega ordenada y confiable Ignoras la asincronía; revisa qué pasa si un mensaje llega tarde o nunca.
Creer que se puede tener CAP completo Confundes el enunciado; comprueba qué cedes durante una partición.
Igualar fallo por caída con fallo bizantino Un nodo caído no miente; un bizantino sí. Distingue el modelo de fallo.
Confiar en relojes del sistema para ordenar Sin reloj global hay deriva; usa relojes lógicos o el orden del protocolo.
Pensar que descentralizado es sin gobierno Siempre hay reglas e incentivos; identifica quién decide los cambios.

🛡️ Seguridad y ética

🔗 Referencias

✅ Criterio de dominio


🧭 Navegación

⬅️ Módulo 01 · Criptografía aplicada · 📚 Índice del currículo · ➡️ Módulo 03 · Consenso


🧠 Autoevaluación del módulo

Responde sin volver atrás. Cada opción incorrecta corresponde a un error frecuente documentado en este mismo módulo: si fallas, la explicación te dice qué releer.