Network(接続編)
1.ネットワーク接続概要
1.Bitcoin Coreを起動
2.他のノードのIPを求め、DNSシードに接続する
DNSシードはBitcoinノードのIPアドレスリストを提供するDNSサーバです。mainnet/testnet用に複数のシードが存在する
3.DNSシードは新しい接続を受け入れられるフルノードのIPアドレスを返信する
4.ノードはそのアドレスを使ってネットワーク上の他のノードと接続する。
5.この時、Bitcoin Coreはそのノード情報をディスクのDBに保存する
https://gyazo.com/a554d683fcdfb7a85a2ca86bd0cbda36
図1:ネットワーク接続概要
・以降はDB上のノード情報を用いて接続する
・11秒以内にコネクションが確立できなければ再びDNSシードに問合せる
・障害などによってDNSシードにすらアクセスできない場合を考慮しIPアドレスと ポート番号のリストもハードコードされており、DNSシードに60秒以内に応答がない場合はこのIPアドレスへの接続を試みる。
2.ハンドシェイク
ローカルノードとリモートノードがお互いのversionメッセージを取得。
その後のメッセージの送信は両者のバージョンのうち小さい方のバージョンに合わせて行われる。
https://gyazo.com/6496fc2799abd3d0c4ef394265f30135
図2:ハンドシェイク
ハンドシェイクが終了すると他のメッセージを送信できるようになる。
(ex:edderメッセージでネットワーク上のノード情報を取得)