노드의 역할

비트코인 네트워크에서 노드란?
: 라우팅, 블록체인 데이터베이스, 채굴, 지갑 서비스 등 기능의 집합체를 의미한다.
모든 기능을 다 수행 할 필요는 없고, 일부만 수행하는 노드들도 있다.
:모든 노드는 라우팅,
: 모든 노드가 동등한 위치에 있다. 하지만 각 각 역할이 다르다.

노드의 종류

:풀 노드는 완전하고 가장 최신의 블록체인 복사본을 가지고 있다. 풀 노드는 외부 참조 없이도 독자적이고 신뢰할 수 있는 방법을 통해 어떠한 거래도 검증할 수 있다.
:SPV(Simplified Payment Verification) 노드는 라이트 노드 혹은 웨이트 노드라고도 불리운다. 블록체인의 부분집합만으로만 유지되는 노드이다. 이 노드는 단순지불검증(SPV) 방법을 이용해서 거래를 검증한다.
:채굴 노드는 채굴을 진행하는 노드이다. 작업증명(POW) 알고리즘을 푸는 전용 하드웨어를 실행해서 새로운 블록을 생성하기 위해 경쟁한다. 채굴 노드는 풀 노드인 경우도 있고 라이트웨이트 노드로 활동하며 풀 서버에 의존한느 경우도 있다.
:노드의 종류는 보통 해당 노드가 행하는 행동이나 맡은 역할에 따라서 나뉘어진다.
하지만, 역할에 따라 지위가 결정되지는 않고, 노드가 자의적으로 역할을 바꿀 수 있다.

Bitcoin Relay network

:정보 전달 및 네트워크 동기화에 있어 지연시간(latency)을 최소화하기 위하여 고안된 방법
:비트코인 코어 개발자 중 한명인 Matt Corallo라는 개발자에 의해 소개되고 개발 되었음
:2015년에는 안정적으로 운영되는 특정 노드들을 선별하여 AWS에 호스팅 시켜 lataency 감소에 영향을 줌
곧이어, 2016년에 FIBRE(Fast Internet Bitcoin Relay Engine)를 개발하여 이전 버전을 대체함
:FIBRE는 UPD 기반 릴레이 네트워크이며, compact block optimization으로 데이터 공유량을 줄이고 이를 기반으로 network latency 역시 낮춤
:Bitcoin Relay netwokr는 bitcoin p2p network의 대체재가 아닌 보완재에 가까움

네트워크 검색

검색방법

  • 위 그림에서 일어나는 것을 handshake라고 부른다.
  • 새로운 노드가 네트워크에서 정상적으로 작동하기 위해서는 최소한 1개의 다른 노드와 연결이 되어야 한다.
  • 다른 노드를 찾기 위해서 검색하는데 상요하는 방법이 handshake이다.
  • handshake를 하고 난 후, 노드로서 정상적인 작동을 시작한다.

Handshaking

  • 핸드셰이킹은 정보기술과 전기통신 및 관련분야에서 채널에 대한 정상적인 통신이 시작되기 전에 2개의 실체 간에 확립된 통신 채널의 변수를 동적으로 설정하는 자동화된 협상 과정이다.

  • 채널의 물리적인 확립이 잇따르며, 정상적인 정보 전송 이전에 이루어진다.

  • 이웃 노드가 연결 요청을 승인할 경우 그에 대한 답으로 verack로 응답한다.

    verack(version + acknowledgement)

  • 이웃 노드는 클라이언트 목록에 기록된 종자노드를 이용하여 신속하게 네트워크 내 다른 노드를 검색한다.

    종자노드
    :종자노드는 오랫동안 안정적으로 작동하는 노드들의 리스트이다.
    :dnseed로 조정한다(1이면 사용)
    :시드 노드르 사용해서(-seednode) 이웃과 연결되었으면 자신의 ip address를 이웃에게 전송한다.
    :이웃은 그 메세지를 그들의 이웃에게 메세지를 전송한다. 새롭게 연결된 노드는 getter를 통해서 이웃들의 ip주소 목록을받는다.
    :일련의 과정을 거친후 다른 노드도 나를 검색 할 수 있게 된다.

인벤토리 교환하기

정보교환

  • getblocks를 통해 서로 갖고 있는 가장 마지막 블록 확인
  • 더 긴 체인을 보유한 노드가 inv라는 메세지를 보냄(inv에는 공유 받아야 할 첫 500개 블록의 해시 정보가 있음)
  • NodeB는 받아야 할 노드(NodeA)가 어디에서부터 받아야하는지 인식 후 그 번호로부터 500개를 보냄
  • NodeA는 getdata라는 메세지를 보내고 이에 응답으로 block에 대한 정보를 보냄

동기화 절차

  1. version메시지로 시작
    :노드의 현재 블록체인 높이(블록의 갯수)를 알 수 있는 Bestheight를 담고 있다.
  2. version으로 이웃노드와 자신의 블록 개수 비교 가능
  3. 가장 상부에 있는 블록의 해시를 담고 있는 getblock 메세지를 교환
  4. 길이 비교 후, 더 짧은 체인을 보유한 노드를 파악
  5. inv(인벤토리) 메세지를 이용해서 해시를 공유, (요청노드가) 첫 500개의 블록을 확인한다.
  6. 해당 블록을 갖고 있지 않은 노드(요청노드)는 일련의 getdata메세지를 전송하여 이웃 노드에게 블록의 데이터를 요구한다.
  7. inv메세지에 있는 해시값을 이용해서 수신받은 블록 데이터가 정확한지 확인하여 블록체인을 만든다.

SPV(Simplified Payment Verificaion)

spv 노드의 특징
:spv 노드는 블록 헤더만을 다운로드 받는 노드
:거래에 대한 정보가 없다는 것은 UTXO 기반 거래의 결과를 직접 검증(verify)하지 못한다는것 -> 풀노드의 도움을 받아야 한다.
:Full node의 경우에는 직접 본인이 보유한 데이터를 기반으로 검증할 수 있음
:SPV노드는 이와 다르게 경로를 기반으로 거래를 검증한다.
이를 위해 Full node에게 정보를 요청하고 받은 path로 검증

0개의 댓글