Mensagens de rede P2P

Como os nós se encontram e espalham blocos e transações.

O Bitcoin não tem servidor central. Nós falam diretamente uns com os outros por um protocolo peer-to-peer simples, por padrão na porta TCP 8333.

O quadro da mensagem

No protocolo original (v1), cada mensagem começa com um cabeçalho: 4 bytes «mágicos» que identificam a rede (F9 BE B4 D9 na mainnet), um nome de comando de 12 bytes, um comprimento de carga e um checksum de 4 bytes. O tráfego é sem criptografia.

v2: transporte criptografado

BIP324 adiciona um transporte criptografado. O Bitcoin Core o apoia e o ativou por padrão desde a versão 27.0. Não autentica peers, mas torna a espionagem passiva e a adulteração bem mais difíceis.

O handshake

Dois nós trocam mensagens version (versão do software, serviços oferecidos, melhor altura) e confirmam com verack. Mensagens de recurso como sendheaders, sendcmpct, wtxidrelay e sendaddrv2 são enviadas em torno do handshake.

Espalhar dados

  • inv anuncia «tenho esta transação ou bloco».
  • getdata pede, e tx ou block entrega.
  • headers e getheaders trocam cabeçalhos de bloco, até 2.000 de uma vez.
  • cmpctblock, getblocktxn e blocktxn carregam blocos compactos (BIP152).
  • feefilter diz a um peer para não enviar transações abaixo de uma feerate.
  • ping/pong verificam se a conexão está viva.

Encontrar peers

Um nó novo primeiro pede a seeds DNS, geridos por membros conhecidos da comunidade, endereços. Depois aprende mais por mensagens addr e addrv2. O addrv2 do BIP155 pode carregar endereços Tor v3, I2P e CJDNS.

Resistindo a ataques

O Bitcoin Core faz por padrão 8 conexões de saída de relay completo e 2 só de relay de bloco. Escolhe endereços de grupos de rede diferentes para que um atacante não possa facilmente cercar um nó (um «ataque eclipse»). Peers que enviam dados inválidos são desconectados.

Conclusão

A camada P2P só move dados. Cada nó ainda checa cada bloco e transação contra as regras de consenso por si mesmo.