From b5a903a66a13ef6d321a642cf78051436347c3ce Mon Sep 17 00:00:00 2001 From: "Andreas M. Antonopoulos" Date: Sun, 20 Jul 2014 12:30:35 -0500 Subject: [PATCH] handshake and inventory diagrams --- ch06.asciidoc | 8 ++++++++ images/InventorySynchronization.png | Bin 0 -> 19646 bytes images/NetworkHandshake.png | Bin 0 -> 8520 bytes 3 files changed, 8 insertions(+) create mode 100644 images/InventorySynchronization.png create mode 100644 images/NetworkHandshake.png diff --git a/ch06.asciidoc b/ch06.asciidoc index b5730998..47d8e526 100644 --- a/ch06.asciidoc +++ b/ch06.asciidoc @@ -67,6 +67,10 @@ To connect to a known peer, nodes establish a TCP connection, usually to port 83 The peer node responds with +verack+ to acknowledge and establish a connection, and optionally sends its own +version+ message if it wishes to reciprocate the connection and connect back as a peer. +[[network_handshake]] +.The initial handshake between peers +image::images/NetworkHandshake.png["NetworkHandshake"] + How does a new node find peers? While there are no special nodes in bitcoin, there are some long running stable nodes that are listed in the client as _seed nodes_. While a new node does not have to connect with the seed nodes, it can use them to quickly discover other nodes in the network. In the Bitcoin Core client, the option to use the seed nodes is controlled by the option switch +-dnsseed+, which is set to 1, to use the seed nodes, by default. Alternatively, a bootstrapping node that knows nothing of the network must be given the IP address of at least one bitcoin node after which it can establish connections through further introductions. The command line argument +-seednode+ can be used to connect to one node just for introductions, using it as a DNS seed. After the initial seed node is used to form introductions, the client will disconnect from it and use the newly discovered peers. Once one or more connections is established, the new node will send an +addr+ message containing its own IP address, to its neighbors. The neighbors will in turn forward the +addr+ message to their neighbors, ensuring that the newly connected node becomes well known and better connected. Additionally, the newly connected node can send +getaddr+ to the neighbors asking them to return a list of IP addresses of other peers. That way, a node can find peers to connect to and advertise its existence on the network for other nodes to find it. On a node running the Bitcoin Core client, you can list the peer connections with the command +getpeerinfo+: @@ -137,6 +141,10 @@ Let's assume for example that a node only has the genesis block. It will then re This process of comparing the local blockchain with the peers and retrieving any missing blocks happens any time a node goes offline for any period of time. Whether a node has been offline for a few minutes and is missing a few blocks, or a month and is missing a few thousand blocks, it starts by sending +getblocks+, gets an +inv+ response and starts downloading the missing blocks. +[[inventory_synchronization]] +.Node synchronizing the blockchain by retrieving blocks from a peer +image::images/InventorySynchronization.png["InventorySynchronization"] + === Simple Payment Verification Nodes === Bloom Filters diff --git a/images/InventorySynchronization.png b/images/InventorySynchronization.png new file mode 100644 index 0000000000000000000000000000000000000000..c17af95fa2144a4d9a0e89f3c33484c394ff6e73 GIT binary patch literal 19646 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 literal 0 HcmV?d00001 diff --git a/images/NetworkHandshake.png b/images/NetworkHandshake.png new file mode 100644 index 0000000000000000000000000000000000000000..c43c73841fcc0ba36e3e9b9685272f6c0db33e12 GIT binary patch literal 8520 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