메인 콘텐츠로 건너뛰기

목적 및 범위

이 문서는 노드 발견, 피어 연결 관리, 블록체인 동기화, 메시지 전파를 처리하는 StableNet의 피어 투 피어 네트워킹 하위 시스템에 대한 개요를 제공합니다.
네트워킹 레이어는 Ethereum의 DevP2P 프로토콜 스택을 기반으로 구축되며, 블록 및 트랜잭션 교환을 위한 eth 프로토콜을 구현합니다.
특정 네트워킹 컴포넌트에 대한 자세한 내용은 다음을 참조하세요: 트랜잭션 전파 세부사항은 Transaction Lifecycle을 참조하세요.
블록 생성 및 브로드캐스팅은 Block Production and Mining을 참조하세요.

네트워킹 아키텍처 개요

StableNet의 네트워킹 레이어는 네트워크 연결을 유지하고 블록체인 상태를 동기화하기 위해 함께 작동하는 네 가지 주요 하위 시스템으로 구성됩니다.

P2P 서버

p2p.Server는 네트워킹 스택의 기반으로, 모든 피어 연결의 라이프사이클을 관리합니다.
피어 발견, 연결 설정, 프로토콜 협상, 정상적인 연결 해제를 조정합니다.
서버는 서로 다른 피어 카테고리를 유지합니다:
  • 동적 피어: DHT 메커니즘을 통해 발견되며 연결 제한의 대상이 됩니다
  • 정적 피어: 연결 해제 시 항상 재연결되는 사전 구성된 노드
  • 신뢰 피어: MaxPeers 제한을 우회하고 우선 처리를 받는 노드
주요 컴포넌트:
ComponentTypePurpose
Server.localnode*enode.LocalNode로컬 노드의 ENR 레코드 및 신원
Server.ntab*discover.UDPv4Discovery v4 테이블
Server.DiscV5*discover.UDPv5Discovery v5 테이블
Server.dialsched*dialScheduler아웃바운드 연결 시도 조정
Server.peersmap[enode.ID]*Peer현재 연결된 피어 집합
서버는 다음을 처리하는 메인 이벤트 루프를 운영합니다:
  • 피어 연결 설정 단계 관리
  • 피어 연결 해제 처리
  • 신뢰 피어 목록 동적 갱신
  • 스레드 안전한 피어 집합 접근 보장

피어 발견

StableNet은 동시에 작동할 수 있는 여러 피어 발견 메커니즘을 지원합니다:
MechanismProtocolUse Case
Discovery v4UDP / Kademlia DHT퍼블릭 네트워크 기본 발견
Discovery v5UDP / Topic 기반고급 발견 및 토픽 필터링
DNS DiscoveryDNS TXT부트스트랩 및 알려진 노드
Static Nodes구성 파일영구 피어 관계
Trusted Nodes구성 파일우선 처리 피어
발견 서비스는 후보 피어를 dialScheduler에 전달하며 다음 정책을 적용합니다:
  • 인바운드/아웃바운드 비율 유지
  • 중복 다이얼 방지
  • 실패 연결에 대한 지수 백오프
  • 신뢰 피어에 대한 제한 완화

Fork ID 검증

전체 피어 관계를 설정하기 전에 노드는 fork ID(EIP-2124)를 교환하여 체인 호환성을 검증합니다.
fork ID는 제네시스 해시와 향후 포크 블록 번호를 기반으로 계산됩니다:
ForkID = CRC32(genesisHash + fork1Block + fork2Block + ...)
호환되지 않는 fork ID를 가진 피어는 핸드셰이크 단계에서 거부되어 네트워크 분할을 방지합니다.

체인 동기화

체인 동기화 하위 시스템은 피어로부터 블록체인 데이터를 다운로드하고 검증합니다.
이 시스템은 여러 컴포넌트가 협력하여 동작합니다.
다이어그램: 동기화 컴포넌트 상호 작용

동기화 모드

StableNet은 노드 상태에 따라 다음 동기화 모드를 지원합니다:
ModeDescriptionUse Case
FullSync모든 블록 다운로드 및 실행아카이브 노드
SnapSync상태 스냅샷 + 최신 블록빠른 초기 동기화
LightSync헤더 및 요청 기반 데이터제한적 클라이언트

다운로더

다운로더는 다음 작업을 수행합니다:
  • 공통 조상 블록 탐색
  • 스켈레톤 체인 구성
  • 병렬 데이터 다운로드
  • 메모리 기반 큐 제한
  • 검증 후 체인 삽입

프로토콜 핸들러

프로토콜 핸들러는 P2P 레이어와 블록체인 로직을 연결하며 메시지를 라우팅합니다. 다이어그램: 프로토콜 핸들러 메시지 흐름

프로토콜 버전 관리

StableNet은 eth/68 프로토콜을 구현합니다.
핸드셰이크 중 프로토콜 버전과 체인 정보가 교환됩니다:
Handshake {
    ProtocolVersion: 68
    NetworkID: <chain ID>
    TD: <total difficulty>
    Head: <head block hash>
    Genesis: <genesis hash>
    ForkID: <fork identifier>
}
피어는 동일한 제네시스 해시와 호환되는 fork ID를 가져야 연결됩니다.

메시지 처리

요청/응답 메시지:
  • GetBlockHeaders / BlockHeaders
  • GetBlockBodies / BlockBodies
  • GetReceipts / Receipts
  • GetPooledTransactions / PooledTransactions
브로드캐스트 메시지:
  • NewBlock
  • NewBlockHashes
  • Transactions
  • NewPooledTransactionHashes
스마트 전파 전략을 사용하여 대역폭과 전파 속도를 균형 있게 유지합니다.

피어 관리

각 피어는 다음 라이프사이클을 거칩니다:
  1. 발견
  2. 다이얼링
  3. 암호화 핸드셰이크
  4. 프로토콜 핸드셰이크
  5. 등록
  6. 메시지 교환
  7. 연결 해제
P2P 레이어는 전송과 암호화를, eth 레이어는 블록체인 로직을 담당합니다.

피어 평판

다운로더는 피어 성능을 지속적으로 추적합니다:
  • 헤더 처리 용량
  • 본문 처리 용량
  • 영수증 처리 용량
  • 왕복 지연 시간
이 평판 정보는 동기화 요청 시 피어 선택에 사용됩니다.

네트워크 보안

네트워킹 레이어는 다음 보안 메커니즘을 포함합니다:
MechanismPurpose
연결 수 제한리소스 고갈 방지
인바운드 제한연결 스팸 방어
Fork ID 검증체인 분리 방지
평판 기반 제거악성 피어 차단
메시지 크기 제한메모리 공격 방지
요청 수 제한I/O 및 대역폭 보호
피어는 프로토콜 위반, 과도한 리소스 사용, 호환성 문제 등으로 제거될 수 있습니다.