关于节点IP配置问题

管理员组 夜小白 1月前 97

问题:

如果我要加入一个EOS网络并且要参与出块,那么我的config.ini中p2p-peer-address配置了目前出块节点的p2p-listen-endpoint地址中的至少一个,此时我还是无法出块,必须在目前出块节点中至少一个config.ini中添加我的p2p-listen-endpoint才可以。这个和ETH的P2P貌似不太一样,麻烦大佬解释一下这个原理,谢谢!

还没有人收藏过本帖~
最新回复 (10)
  • 管理员组 缘雨 1月前
    0 引用 2
    围观,同问
  • 管理员组 Surou 1月前
    0 引用 3
    此处为错误回答,请看下面回复

    ~~ p2p-peer-address 地址是说 从哪个节点同步数据过来,主动拉取。也就是你节点p2p-peer-address加别的BP,可以同步别人的新块,别人的BP也要加你的p2p-peer-address 也就你的p2p-listen-endpoint,等你出块时,你的块要被别的BP同步 ~~
  • 管理员组 夜小白 1月前
    0 引用 4
    那可以理解为数据传输是单向的?而被连接者只有消息获取而已
  • 管理员组 缘雨 1月前
    0 引用 5
    我之前的理解为:(在eos中)p2p双向,在配置文件里加了表示主动连接,别人加了我的p2p,就是被动连接
  • 管理员组 夜小白 1月前
    0 引用 6
    缘雨 我之前的理解为:(在eos中)p2p双向,在配置文件里加了表示主动连接,别人加了我的p2p,就是被动连接
    我同事说以太坊是这样的,具体我没研究
  • 管理员组 夜小白 1月前
    0 引用 7
    surou p2p-peer-address 地址是说 从哪个节点同步数据过来,主动拉取。也就是你节点p2p-peer-address加别的BP,可以同步别人的新块,别人的BP也要加你的p2p-peer-addr ...
    以太坊P2P是不是双向的,我同事说是,我没研究,确认下到底是P2P本来就是双向,EOS修改了,还是说P2P本来就是单向的
  • 管理员组 Surou 1月前
    0 引用 8

    经过测试,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

    https://github.com/EOSIO/eos/blob/5082391c60b0fa5e68157c385cd402bf25aea934/plugins/net_plugin/net_plugin.cpp#L1847

    服务端listen

    https://github.com/EOSIO/eos/blob/5082391c60b0fa5e68157c385cd402bf25aea934/plugins/net_plugin/net_plugin.cpp#L1901

    p2p-peer-address 为connect 使用 p2p-listen-endpoint为 listen使用 p2p-server-address 同上,并且优先覆盖

    https://github.com/EOSIO/eos/blob/5082391c60b0fa5e68157c385cd402bf25aea934/plugins/net_plugin/net_plugin.cpp#L2995

    只要同时有一个连接存在,则能正常工作。 比如节点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相同,导致无法通过。

    先粗略写下,不清楚再补充把

  • 管理员组 夜小白 1月前
    0 引用 9
    surou 经过测试,EOS的节点连接都走 P2P为双向,不存在单独的处理方式 主要代码在net_plugin插件中 https://github.com/EOSIO/eos/blob/master/ ...
    明白了,谢谢老大
  • 管理员组 Surou 1月前
    0 引用 10
    前端的代码高亮和格式化,真头疼,得尽快看看
  • 管理员组 夜小白 1月前
    0 引用 11
    surou 前端的代码高亮和格式化,真头疼,得尽快看看
    你指的是 咱们论坛的发帖格式吗?在哪里看 我有几个小时时间我来试试
返回