A rede bitcoin principal, executando o protocolo P2P bitcoin, consistem entre 7.000 e 10.000 nodos ativos rodando várias versões do cliente bitcoin de referência (Bitcoin Core) e algumas centenas de nodos rodando várias outras implementações do protoclo P2P bitcoin, como o BitconJ, Libbitcoin e btcd.
Uma pequena porcentagem dos nodos na rede bitcoin P2P também são nodos mineradores, competindo em um processo de mineração, validando transações e criando novos blocos. Várias grandes companhias participam da rede bitcoin ao rodas clientes de nodo completos no cliente Bitcoin Core, com cópias completas da blockchain e um nodo da rede, mas sem funções de mineração ou de carteira.
PROTOCOLO BITCOIN
Esses nodos atuam como roteadores de borda da rede, permitindo que vários outros serviços (exchanges, carteiras, exploradores de bloco, processamento de pagamentos a comerciantes) sejam construídos em seu topo.
A rede bitcoin estendida inclui a rede executando o protocolo P2P bitcoin, descrita anteriormente, assim como nodos executando protocolos especializados.
Ligados a essa rede P2P bitcoin principal existem vários servidores pool e gateways de protocolo que conectam nodos executando outros protocolos. Esses nodos usando outros protocolos são em sua maioria nodos de pool de mineração (ver [ch8]) e clientes de carteira leves (lightweight), que não carregam uma cópia completa de blockchain.
A rede bitcoin estendida mostrando vários tipos de nodos, gateways e protocolos demonstra a rede bitcoin estendida com os vários tipos de nodos, servidores gateway, roteadores edge e clientes de carteira, além dos vários protocolos que eles usam para conectar-se uns com os outros.
Descoberta da Rede
Quando um novo nodo é ligado, ele deve descobrir outros nodos bitoins na rede para que possa participar. Para iniciar esse processo, um nodo novo deve descobrir pelo menos um nodo existente na rede para conectar-se a ele. A localização geográfica dos outros nodos é irrelevante; a topologia da rede bitcoin não é definida geograficamente.
Logo, qualquer nodo bitcoin existente pode ser selecionado aleatoriamente. Para se conectar a um ponto conhecido, os nodos estabelecem uma conexão TCP, geralmente na porta 8333 (a porta geralmente conhecida como uma das usadas pelo bitcoin), ou a uma porta alternativa caso tenha sido fornecida.
Ao estabelecer a conexão, o nodo iniciará um "aperto de mão" (ver O aperto de mãos inicial entre os pontos) ao transmitir uma mensagem de versão, que contém basicamente informações de identificação, incluindo:
PROTOCOL_VERSION
Uma constante que define a versão do protocolo P2P do bitcoin através da qual o cliente se "comunica" (ex: 70002)
nLocalServices
Uma lista dos serviços locais suportados pelo nodo, atualmente apenas NODE_NETWORK
nTime
A hora atual
addrYou
O endereço IP do nodo remoto da maneira que é visto por esse nodo
addrMe
O endereço IP do nodo local, da maneira que é descoberto pelo nodo local
subver Uma sub-versão mostrando o tipo de software sendo executado nesse nodo (ex: "/Satoshi:0.9.2.1/")+
BestHeight
A altura dos blocos da blockchain deste nodo
(Veja AQUI um exemplo da mensagem de rede version.)
O nodo ponto responde com verack para reconhecer e estabelecer uma conexão, e opcionalmente envia sua própria mensagem versão caso ele desejar estabelecer uma conexão recíproca e se conectar como um ponto.
Como um nodo novo encontra seus pontos (peers)? O primeiro método é solicitar o DNS usando várias 7 "sementes (seeds) de DNS," que são servidores DNS que fornecem uma lista de endereços IP dos nodos bitcoin.
Algumas dessas sementes DNS fornecem uma lista estática de endereços IPs de nodos bitcoin de escuta. Algumas dessas sementes DNS são implementações customizadas de BIND (Berkeley Internet Name Daemon) que retornam um conjunto aleatório a partir de uma lista de endereços de nodo bitcoin coletada por um crawler ou um nodo bitcoin de longa-execução.
O cliente Bitcoin Core contém os nomes de cinco sementes DNS diferentes. A diversidade de donos e a diversidade de implementação das diferentes sementes DNS oferece um alto nível de confiabilidade para o processo de bootstrapping inicial.
No cliente Bitcoin Core, a opção para usar as sementes DNS é controlada pela opção switch -dnsseed (definida como 1 por padrão, para usar a semente DNS). De maneira alternativa, um nodo bootstrapping que não saiba nada da rede deve receber o endereço IP de pelo menos um nodo bitcoin, a partir do qual ele poderá estabelecer conexões através de novas introduções.
O argumento de linha de comando -seednode pode ser usado para conectar a um nodo somente para introduções, utilizando-o como uma semente (seed). Após o nodo semente inicial ser usado para formar as introduções, o cliente irá se desconectar dele e usará os novos pontos recémdescobertos.
FONTE - Esse é um trecho do livro 'Mastering Bitcoin'
EmoticonEmoticon