예전 개인적인 흥미로 블록체인 시스템에 대해 공부를 한 적이 있다. 블록체인은 탈중앙화된 P2P 시스템이라는 것은 알겠는데, 그럼 최초로 블록체인 네트워크에 들어가는 노드는 도대체 어떻게 연결되는 것인지 잘 모르겠어서 최근에 따로 알아본 내용을 정리한다.
결론부터
- 블록체인 네트워크의 모든 노드가 전체 거래내역을 가지고 있는 것은 아니다.
- 최초로 블록체인 소프트웨어를 다운로드, 실행하면 전체 거래내역 가진 풀 노드들의 주소 리스트를 얻을 수 있는 DNS시드(DNS서버)가 하드코딩 되어있다.
- 최초 실행 시 하드코딩된 DNS시드에서 받아온 풀 노드들의 IP주소 및 포트 번호를 이용해 메시지를 주고 받아 해당 노드가 활성화되어있음을 확인하고 해당 노드로부터 블록체인 데이터를 다운로드한다.
- 한번 연결된 주소는 디스크의 영구 메모리에 저장하기 때문에 최초 실행 이후부터는 DNS 시드를 통하지 않아도 피어 노드에 연결할 수 있다.
블록체인 네트워크

(사진출처: 미디어 블록체인의 기술 구성 - 플랫폼리스 미디어 블록체인의 기술 (1) )
- 작업 수행 서버와 서버에서 데이터를 가져와 처리하는 클라이언트가 따로 존재하지 않음
- 모든 노드는 서버이자 클라이언트의 역할을 수행
- 노드는 가지고 있는 기능으로 구분 가능
노드의 기능 4가지
1. 지갑 (Wallet)
- 개인 키(private key)와 공개 키(public key) 관리
- 공개 키를 통해 거래에 사용되는 주소 생성
2. 채굴 (Miner)
- 합의 알고리즘에 따라 거래 내용을 담은 블록 생성
- 생성된 블록 메인넷에 연결하고 암호화폐 생성
3. 풀 블록체인(Full Blockchain)
- 최초로 생성된 제네시스 블록부터 가장 최신 블록까지 모든 거래 내역을 담은 완전한 블록체인 복사본을 가진 노드
4. 네트워크 라우팅(network routing)
- P2P 형태로 거래 정보를 송수신하는 통신 기능
기능에 따라 분류한 노드 종류 4가지
1. 코어 (Reference Client)
2. 풀 노드(Full Node)
- 블록체인의 전체 복제본 가지고 있음
- 탈중앙화된 저장소(스토리지)
- 정보활용을 위한 빅데이터 분석기능
- 채굴 노드에 의해 채굴된 블록의 유효성 확인 + 트랜잭션 검증 + 의사결정
- 다른 노드들이 서로를 찾을 수 있도록 돕는 라우팅 연산 수행
3. 개별 채굴자 (Solo Miner)
- 채굴에 특화된 노드
- 합의 알고리즘
- 동작 환경 : ASIC 등 강력하고 특수한 하드웨어 위에서 동작
- 목적 : 새로운 블록 가능한 한 빠르게 채굴
- 채굴 = PoW 퍼즐 풀기 : 즉 작업증명 시스템 사용하는 블록체인에서만 가능
- 지분증명(proof of stake) 블록체인에는 채굴 없음
4. 지갑 (Lightweight wallet), SPV(Simplified Payment Verification)
- 단순 거래 및 유효성 검증만 가능함
- 인증: 탈중앙화된 본인인증 기술
- 인터체인: 이종 암호화폐 교환 기술
- 블록체인 전체 복사본은 없지만 일부 트랜잭션 검증은 가능
- SPV는 풀 노드에서 데이터를 얻어옴
- 하나의 풀 노드에 여러 개의 SPV가 연결될 수 있다.
블록체인에 참여한다고 해서 모든 노드가 전체 블록체인 거래내역을 전부 가지고 있어야 하는 것은 아니라는 것을 알았다. 그럼 최초로 Peer 노드를 찾아 연결하는 방법은 무엇일까?
비트코인 peer 찾기
1. 비트코인 코어란?
- 비트코인의 공식 지갑 클라이언트 소프트웨어
- 개인 PC에 다운로드해서 사용
2. 비트코인 코어에 하드코딩된 DNS시드
- 일부 노드들의 주소를 알고 있는 DNS 서버
- 비트코인 코어 최초 실행 시 시드 중 하나에 연결되어 블록체인 다운로드받을 풀 노드들의 주소가 담긴 리스트 반환
- DNS 시드는 비트코인 커뮤니티 구성원에 의해 유지관리됨
- 동적 DNS 시드 서버: 네트워크 검색해 활성 노드의 IP 주소를 자동으로 가져옴
- 정적 DNS 시드: 수동 업데이트
3. 최초의 활성 peer 노드 ip 알게 된 후
- 코어가 네트워크에 연결되면 피어는 네트워크 상 다른 피어의 IP 주소와 포트번호를 이용해 version 메시지를 보내면 대상 피어도 답신 메시지를 보내 현재 활성화 되어 있음을 알림
- version 메시지:
버전번호
, 블록
, 현재시간
등이 담긴 메시지로 각 노드들이 서로 활성화되어있는지 체크
- 그 후 현재 노드의
addr
주소 정보 등을 교환해 피어와 연결
- 피어 노드에 메시지를 보낸 후 90분이 경과하도록 답신이 오지 않으면 연결이 끊어진 것으로 간주
- 풀 노드와
BestHeight
(각 노드가 가진 블록체인 데이터 길이)를 비교해 긴 것을 다운로드
- 한번 알려진 peer에 대한 정보는 디스크상의 영구 데이터베이스에 보관되어 다음 실행부터는 DNS 시드 없이도 연결이 가능함
블록체인 프로그램을 설치하면 풀 노드들의 주소를 받을 수 있는 DNS시드가 프로그램에 하드코딩되어있다는 것을 알게 되었다.
참고글
미디어 블록체인의 기술 구성 - 플랫폼리스 미디어 블록체인의 기술 (1)
[Go로 구현하는 블록체인] Part 7: 네트워크
비트코인 개발자 가이드 - 7-01 동료의 발견(Peer Discovery)