Skip to content

Instantly share code, notes, and snippets.

@shingonu
Created September 17, 2018 11:25
Show Gist options
  • Select an option

  • Save shingonu/2ed28db5129c8dfcdbfd1b9d74cb8070 to your computer and use it in GitHub Desktop.

Select an option

Save shingonu/2ed28db5129c8dfcdbfd1b9d74cb8070 to your computer and use it in GitHub Desktop.

https://github.com/ethereum/devp2p/blob/master/rlpx.md

RLPx는 cryptographic peer-to-peer 네트워크이면서 프로토콜 모음이다. 이는 애플리케이션이 p2p network를 통해 전송 수단 또는 인터페이스를 제공한다.

RLPx의 현재 버전은 Ethereum을 위한 네트워크 레이어를 제공한다.

Transport

목표

  • 하나의 single connection 위에서 여러 protocol
  • 암호화
  • flow control

기밀성을 제공하고 네트워크 중단을 방지하기 위해 인증된 암호화가 사용된다. 이는 노드가 다른 노드에 대해 장기간에 걸친 결정을 내리고 비 로컬 효과를 발생시키는 잘 구성된 네트워크에 특히 중요합니다.

동적 프레이밍 및 흐름 제어를 통해 각 프로토콜에 동일한 양의 대역폭이 할당되도록 한다.

Network Formation

목표

  • 새로운 노드들은 연결되어 있는 노드를 확실하게 찾을 수 있다.
  • 노드는 다른 노드에 균일하게 연결하기에 충분한 네트워크 토폴로지 정보를 가진다.
  • node identifier는 랜덤하다.

RLPx는 Kademlia와 같은 라우팅을 사용한다. 즉 p2p neighbour discovery protocol로서 다른 목적으로 사용된다. RLPx discovery는 512-bit public key를 노드 id로 사용하고 xor metric을 위해 sha3(node-id)를 사용한다. DHT features들은 구현되어있지 않다.

Implementation Overview

Packet들은 동적으로 구성되고, RLP encoded header를 앞에 붙혀서, 암호화되고 인증화된다. Multiplexing은 frame의 header를 통해 성취된다. frame header는 packet의 목적지 프로토콜을 명시한다.

모든 암호화 작업은 secp256k1에 기반으로 이루어지고, 각각의 노드는 static private key를 유지한다. 이 static private key는 session 사이에서 저장되고, 복구된다. private key는 파일이나 데이터베이스 entry를 지워서 오직 수동으로만 reset되는 것을 권한다.

RLPx 구현체는 다음과 같이 구성되어 있다:

  • Node discovery
  • Encrypted Transport
  • Framing
  • Flow Control

Node Discovery

Node: An entity on the network. Peer: Node which is currently connected to host node. NodeId: public key of node

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment