关于节点IP配置问题
问题
如果我要加入一个EOS网络并且要参与出块,那么我的config.ini中p2p-peer-address配置了目前出块节点的p2p-listen-endpoint地址中的至少一个,此时我还是无法出块,必须在目前出块节点中至少一个config.ini中添加我的p2p-listen-endpoint才可以。这个和ETH的P2P貌似不太一样,麻烦大佬解释一下这个原理,谢谢!
解答
经过测试,EOS的节点连接都走 P2P为双向,不存在单独的处理方式
主要代码在net_plugin插件中
https://github.com/EOSIO/eos/blob/master/plugins/net_plugin/net_plugin.cpp
代码分析就不细说了,之前有相关发帖
https://www.bcskill.com/index.php/archives/625.html
https://my.oschina.net/u/4069047/blog/3005068
目前涉及 4个参数
- p2p-server-address
- p2p-listen-endpoint
- p2p-peer-address
- p2p-max-nodes-per-host 限制来自相同IP的P2P连接数
参数讲解参考
https://developers.eos.io/eosio-nodeos/docs/net_plugin
https://techterms.com/definition/p2p
虽然P2P对等网络,最终实现还是socket
客户端connect
服务端listen
p2p-peer-address 为connect 使用
p2p-listen-endpoint为 listen使用
p2p-server-address 同上,并且优先覆盖
只要同时有一个连接存在,则能正常工作。
比如节点A (BP)设置了p2p-listen-endpoint(作为P2P Server),并且开放链接,节点B(同步)只要设置 p2p-peer-address(作为P2P Client) 就可以完成链接。A,B反过来也一样。
但对于P2P既是客户端,也是服务端,所以可以的话,互相加下最稳妥。
小白的主要问题在,他在同一台机器上跑了多个节点,但p2p-max-nodes-per-host用的默认值1,BP节点的p2p-listen-endpoint已经被占用了,然后测试节点再连接,由于IP相同,导致无法通过。
先粗略写下,不清楚再补充把