在区块链节点中,P2P Port、RPC Port 和 JSON-RPC Port 的作用

1. P2P Port(Peer-to-Peer Port)

  • 作用:用于节点之间的直接通信,构成区块链网络的基础。

    • 同步区块和交易数据。

    • 广播新交易或区块到全网。

    • 发现并连接其他节点(如通过种子节点)。

  • 协议:通常使用自定义的二进制协议(如比特币的Bitcoin P2P或以太坊的DevP2P)。

  • 安全性:需防止恶意节点(如DDoS攻击),可能通过防火墙或白名单限制。

  • 示例

    • 比特币默认端口:8333(主网)或 18333(测试网)。

    • 以太坊默认端口:30303


2. RPC Port(Remote Procedure Call Port)

  • 作用:提供本地或远程的进程间通信(IPC),允许外部程序调用节点功能。

    • 查询区块链数据(如余额、区块高度)。

    • 提交交易到网络。

    • 管理节点(如重启、修改配置)。

  • 协议:通常基于HTTP/HTTPS或WebSocket。

  • 安全性:需严格限制访问(如绑定到127.0.0.1),避免暴露敏感操作。

  • 示例

    • 比特币核心默认RPC端口:8332(主网)或 18332(测试网)。

    • Geth(以太坊)默认RPC端口:8545


3. JSON-RPC Port

  • 作用:是RPC的一种具体实现,使用JSON格式传输数据,便于开发者集成。

    • 与智能合约交互(如以太坊的eth_call)。

    • 部署DApp前端(通过MetaMask等钱包)。

    • 提供标准化API(如遵循JSON-RPC 2.0规范)。

  • 协议:基于HTTP/WebSocket,数据格式为JSON。

  • 示例

    • 以太坊客户端(Geth/Parity)默认JSON-RPC端口:8545(HTTP)或 8546(WebSocket)。


关键区别总结

端口类型 通信对象 主要用途 典型协议 安全建议
P2P Port 其他区块链节点 网络同步、数据广播 自定义二进制协议 防火墙过滤、禁止公开暴露
RPC Port 本地/远程客户端 查询数据、提交交易 HTTP/WebSocket 绑定到本地IP、启用身份验证
JSON-RPC 开发者/DApp 智能合约交互、API调用 JSON over HTTP/WS 限制访问、使用HTTPS/WS加密

实际应用场景

  • P2P端口:矿工节点必须开放P2P端口以接收最新区块。

  • RPC端口:交易所用本地程序通过RPC查询用户存款。

  • JSON-RPC:网页钱包通过http://localhost:8545调用Geth的API。


注意事项

  • 端口冲突:同一机器运行多个节点时需修改默认端口。

  • 云服务部署:在AWS/Azure等平台需配置安全组规则开放端口。

  • 测试网:测试网(如Ropsten、Rinkeby)通常使用不同的端口号。

理解这些端口的差异能帮助您更安全地配置和维护区块链节点。


参考网文

FISCO BCOS 2.0的网络包括

  • P2P端口、
  • RPC端口、
  • Channel端口。

在区块链节点中,P2P Port、RPC Port 和 JSON-RPC Port 的作用_第1张图片

 

1. P2P端口

P2P端口,用于区块链节点之间的互联,包括机构内的多个节点,以及多机构间节点和节点的互联。

如果其他节点在机构外,那么这个连接要监听公网地址,或者监听内网,且由连接公网的网关(如nginx)转发网络连接。

节点之间的连接会由联盟链的准入机制控制,节点之间连接依赖节点证书验证,以排除未经许可的危险连接。

这个链路上的数据通过SSL方式加密,采用高强度密钥,可以有效的保护通信安全。

2. Channel端口

Channel端口,控制台和客户端SDK连接Channel端口,互相之间要通过证书认证,只有经过认证的客户端才能向节点发起请求,通信数据也是采用SSL方式加密。

Channel端口使用了TCP的长连接,用心跳包检测和保持存活,通信效率较高,支持AMOP协议的点对点通信,功能相当灵活强大。

Channel端口应只监听内网IP地址,供机构内其他的应用服务器通过SDK连接,不应监听外网地址或接受公网的连接,以免发生不必要的安全的问题,也不要只监听本地地址(127.0.0.1或localhost),否则其他应用服务器将无法连接到节点上。

3. RPC端口

RPC是客户端与区块链系统交互的一套协议和接口,用户通过RPC接口可查询区块链相关信息(如块高、区块、节点连接等)和发送交易。

RPC端口接受JSON-RPC格式的请求,格式比较直观清晰,采用CURL、JavaScript、Python、Go等语言都可以组装JSON格式的请求,发送到节点来处理。

当然发送交易时,要在客户端实现交易签名。

要注意的是,RPC连接没有做证书验证,且网络传输默认是明文的,安全性相对不高,建议只监听内网端口,用于监控、运营管理,状态查询等内部的工作流程上。

目前监控脚本,区块链浏览器连接的是RPC端口。

配置文件

FISCO BCOS 2.0一个典型网络配置如下所示,可以看到RPC和Channel端口共用一个IP,P2P连接单独监听一个IP,即一个区块链节点使用2个IP和3个端口。

[rpc]listen_ip=127.0.0.1channel_listen_port=20200jsonrpc_listen_port=8545[p2p]listen_ip=0.0.0.0listen_port=30300

几种计算机的典型网络地址

1.特殊地址:0.0.0.0,表示监听本机所有的地址,包括本地、内网、公网(如有)地址,也就是全面放开,来者不拒。除非为了方便且确信安全,一般不应监听这个地址。

2.本机地址:127.0.0.1(有的配置可以写成localhost),只有同在本机上的其他进程才能连接到这个地址,其他机器一律连不过来。FISCO BCOS有的示例脚本为了安全和简易起见,默认写的是这个地址,包括build_chain脚本默认配置等。用户有时会发现其他机器运行客户端程序连不过来,大概率是这个原因,或者也可以检查下网络策略是否开通了互联,建议可以用系统的 telnet 【ip】【port】命令来先快速检测下是否能联通。

3、内网地址:通常192.168.xxx.xxx, 172.xxx.xxx.xxx,10.xxx.xxx.xxx开头的地址是内网地址,如监听这个地址,则只有同一局域网的其他机器可以访问它。

4、外网地址:暴露在互联网上的公网地址,或者可以从机构外部网络访问的地址,总之是外部服务器能连接的就是外部地址。

在不同的网络拓扑上,可能牵涉这样的情况:服务器虽然可以访问外网,但是是由网关、路由器、NAT转发的,这时就需要了解具体的网络结构,进行配置了。

如监听一个内网地址,把这个内网地址和监听的端口配置到转发器上,同样也可以接收来自外网的连接。

在网络安全方面,需要仔细的设计网络安全组策略,IP和端口黑白名单,精确的进行双向的连接控制。包括不限于以下策略:

1、设置外部IP白名单,只有这些外部IP(一般是建立了联盟的其他机构)能连接过来;

2、设置IP黑名单,拒绝某些特定IP的连接,而不用等它连接到节点才进行准入控制判断;

3、控制RPC端口,(如8545端口)只对本机开放,其他内网外网服务器都连不到这个端口;

4、控制Channel端口,只对某一个内网网段或某几个IP开放,把自己的应用部署到开放的网段或IP对应的服务器上,内网其他应用不能访问区块链节点;

5但凡有外网端口,建议设置防DDoS的措施,避免频繁连接、海量并发连接攻击。

节点工作解析

在区块链节点中,P2P Port、RPC Port 和 JSON-RPC Port 的作用_第2张图片

你可能感兴趣的:(区块链,p2p,rpc)