Skip to content

Update 07_p2p_net_node_sync.md #16

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 29 additions & 0 deletions CN/07_p2p_net_node_sync.md
Original file line number Diff line number Diff line change
@@ -1 +1,30 @@
# How the Geth Nodes communicate with other Ethereum Nodes

## RLPX
### RLPx(Recursive Length Prefix)是以太坊网络协议的一种实现,它用于在点对点网络中传输数据。RLPx 建立在 TCP/IP 协议之上,并提供了一个安全、加密和压缩的传输层,用于在以太坊节点之间传输消息和交换数据。
#### 以下是握手的基本流程
1. 发起方生成随机数和ECDH随机密钥对:发起方生成一个随机数(initNonce)和一个ECDH随机密钥对(h.randomPrivKey)。

2. 发起方构造认证请求消息:发起方根据ECDH随机密钥对和自己的静态密钥对计算出一个签名,然后构造一个认证请求消息(authMsgV4),其中包含签名、发起方的公钥和随机数。

3. 发起方加密认证请求消息并发送:发起方使用接收方的公钥将认证请求消息加密,并发送给接收方。

4. 接收方解密收到的认证请求消息:接收方收到加密的认证请求消息后,使用自己的私钥对其进行解密。

5. 接收方验证发起方签名并提取信息:接收方验证收到的发起方签名,如果签名有效,接收方提取发起方的公钥(h.remote)和随机数(h.initNonce)。

6. 接收方生成随机数和ECDH随机密钥对:接收方生成一个随机数(respNonce)和一个ECDH随机密钥对(h.randomPrivKey)。

7. 接收方构造认证响应消息:接收方构造一个认证响应消息(authRespV4),其中包含接收方的随机数和ECDH随机公钥。

8. 接收方加密认证响应消息并发送:接收方使用发起方的公钥将认证响应消息加密,并发送给发起方。

9. 发起方解密收到的认证响应消息:发起方收到加密的认证响应消息后,使用自己的私钥对其进行解密。

10. 计算共享密钥:发起方和接收方分别使用自己的ECDH随机私钥和对方的ECDH随机公钥计算出相同的共享密钥。

11. 计算AES密钥、MAC密钥和进出口MAC哈希:发起方和接收方使用共享密钥计算出各自的AES密钥、MAC密钥以及进出口的MAC哈希。

12. 建立安全通信通道:握手完成,发起方和接收方之间建立了安全的加密通信通道。之后的通信将使用共享密钥进行加密和解密。

13. 在整个握手过程中,Diffie-Hellman(DH)密钥交换算法用于确保发起方和接收方能够安全地协商出共享密钥。通信过程中,所有的数据包都使用共享密钥进行加密和解