목적 및 범위
이 문서는 노드 발견, 피어 연결 관리, 블록체인 동기화, 메시지 전파를 처리하는 StableNet의 피어 투 피어 네트워킹 하위 시스템에 대한 개요를 제공합니다.네트워킹 레이어는 Ethereum의 DevP2P 프로토콜 스택을 기반으로 구축되며, 블록 및 트랜잭션 교환을 위한 eth 프로토콜을 구현합니다. 특정 네트워킹 컴포넌트에 대한 자세한 내용은 다음을 참조하세요:
- 연결 라이프사이클 및 피어 추적: P2P Server and Peer Management
- 노드 발견 메커니즘 및 피어 호환성: Discovery and Fork ID
- 블록체인 다운로드 및 동기화 전략: Chain Synchronization
- 메시지 라우팅 및 프로토콜 버전 관리: Protocol Handlers
블록 생성 및 브로드캐스팅은 Block Production and Mining을 참조하세요.
네트워킹 아키텍처 개요
StableNet의 네트워킹 레이어는 네트워크 연결을 유지하고 블록체인 상태를 동기화하기 위해 함께 작동하는 네 가지 주요 하위 시스템으로 구성됩니다.P2P 서버
p2p.Server는 네트워킹 스택의 기반으로, 모든 피어 연결의 라이프사이클을 관리합니다.피어 발견, 연결 설정, 프로토콜 협상, 정상적인 연결 해제를 조정합니다. 서버는 서로 다른 피어 카테고리를 유지합니다:
- 동적 피어: DHT 메커니즘을 통해 발견되며 연결 제한의 대상이 됩니다
- 정적 피어: 연결 해제 시 항상 재연결되는 사전 구성된 노드
- 신뢰 피어: MaxPeers 제한을 우회하고 우선 처리를 받는 노드
| Component | Type | Purpose |
|---|---|---|
Server.localnode | *enode.LocalNode | 로컬 노드의 ENR 레코드 및 신원 |
Server.ntab | *discover.UDPv4 | Discovery v4 테이블 |
Server.DiscV5 | *discover.UDPv5 | Discovery v5 테이블 |
Server.dialsched | *dialScheduler | 아웃바운드 연결 시도 조정 |
Server.peers | map[enode.ID]*Peer | 현재 연결된 피어 집합 |
- 피어 연결 설정 단계 관리
- 피어 연결 해제 처리
- 신뢰 피어 목록 동적 갱신
- 스레드 안전한 피어 집합 접근 보장
피어 발견
StableNet은 동시에 작동할 수 있는 여러 피어 발견 메커니즘을 지원합니다:| Mechanism | Protocol | Use Case |
|---|---|---|
| Discovery v4 | UDP / Kademlia DHT | 퍼블릭 네트워크 기본 발견 |
| Discovery v5 | UDP / Topic 기반 | 고급 발견 및 토픽 필터링 |
| DNS Discovery | DNS TXT | 부트스트랩 및 알려진 노드 |
| Static Nodes | 구성 파일 | 영구 피어 관계 |
| Trusted Nodes | 구성 파일 | 우선 처리 피어 |
dialScheduler에 전달하며 다음 정책을 적용합니다:
- 인바운드/아웃바운드 비율 유지
- 중복 다이얼 방지
- 실패 연결에 대한 지수 백오프
- 신뢰 피어에 대한 제한 완화
Fork ID 검증
전체 피어 관계를 설정하기 전에 노드는 fork ID(EIP-2124)를 교환하여 체인 호환성을 검증합니다.fork ID는 제네시스 해시와 향후 포크 블록 번호를 기반으로 계산됩니다:
체인 동기화
체인 동기화 하위 시스템은 피어로부터 블록체인 데이터를 다운로드하고 검증합니다.이 시스템은 여러 컴포넌트가 협력하여 동작합니다. 다이어그램: 동기화 컴포넌트 상호 작용
동기화 모드
StableNet은 노드 상태에 따라 다음 동기화 모드를 지원합니다:| Mode | Description | Use Case |
|---|---|---|
| FullSync | 모든 블록 다운로드 및 실행 | 아카이브 노드 |
| SnapSync | 상태 스냅샷 + 최신 블록 | 빠른 초기 동기화 |
| LightSync | 헤더 및 요청 기반 데이터 | 제한적 클라이언트 |
다운로더
다운로더는 다음 작업을 수행합니다:- 공통 조상 블록 탐색
- 스켈레톤 체인 구성
- 병렬 데이터 다운로드
- 메모리 기반 큐 제한
- 검증 후 체인 삽입
프로토콜 핸들러
프로토콜 핸들러는 P2P 레이어와 블록체인 로직을 연결하며 메시지를 라우팅합니다. 다이어그램: 프로토콜 핸들러 메시지 흐름프로토콜 버전 관리
StableNet은 eth/68 프로토콜을 구현합니다.핸드셰이크 중 프로토콜 버전과 체인 정보가 교환됩니다:
메시지 처리
요청/응답 메시지:- GetBlockHeaders / BlockHeaders
- GetBlockBodies / BlockBodies
- GetReceipts / Receipts
- GetPooledTransactions / PooledTransactions
- NewBlock
- NewBlockHashes
- Transactions
- NewPooledTransactionHashes
피어 관리
각 피어는 다음 라이프사이클을 거칩니다:- 발견
- 다이얼링
- 암호화 핸드셰이크
- 프로토콜 핸드셰이크
- 등록
- 메시지 교환
- 연결 해제
피어 평판
다운로더는 피어 성능을 지속적으로 추적합니다:- 헤더 처리 용량
- 본문 처리 용량
- 영수증 처리 용량
- 왕복 지연 시간
네트워크 보안
네트워킹 레이어는 다음 보안 메커니즘을 포함합니다:| Mechanism | Purpose |
|---|---|
| 연결 수 제한 | 리소스 고갈 방지 |
| 인바운드 제한 | 연결 스팸 방어 |
| Fork ID 검증 | 체인 분리 방지 |
| 평판 기반 제거 | 악성 피어 차단 |
| 메시지 크기 제한 | 메모리 공격 방지 |
| 요청 수 제한 | I/O 및 대역폭 보호 |

