블록체인에서의 노드를 얘기해보자
라우팅 ,블록체인 데이터베이스 ,채굴 ,지갑 서비스 등 기능의 집합체를 의미한다 .
나도 노드 가 될수있다. 우리가 말하는 노드는 블록체인 데이터베이스를 갖고있는 풀노드이다 .
모든 기능을 수행하는것이 아닌 일부만 수행하는 노드들도 있다는것이다.
모든 노드는 라우팅,거래와 블록을 검증하고 전파하는 기능 , 이웃과의 연결 유지 기능을 기본적으로 가지고있다.
모든 노드는 동등한 위치에 있다 .
노드에는 위에서 말했듯이 여러가지의 노드들이 존재한다

레퍼런스 클라이언트 - 마이닝과 지갑정보 블록체인 네트워킹
풀블록 체인 노드 - 블록체인 동기화와 네트워킹
솔로마이너 - 체인과 마이닝,네트워킹
마이닝풀 - 여러명이 넌스값을 바꿔가며 마이닝
= 100의 넌스가 있으면 10명이서 10의 넌스를 가지고 작업을 간소화
보통은 라이트웨이트 (spv)월렛 월렛과 네트워킹
SPV(Sipmlified Payment Verification) Stratum wallet
-> 단순 지불 검증 방법 특정 거래내역만 가능
혼자서는 검증절차를 거치기 힘듬 풀노드의 도움을 받아야한다.
비트코인은 인터넷에서 p2p 네트워크 아키텍쳐 구조를 이루고있다 .
비트코인 네트워크는 비트코인 p2p 프로토콜을 실행하는 노드의 집합
채굴기능을 가지고 있는 노드와 블록체인을 가지고 있는 노드 SPV월렛을
연결하는 프로토콜로 Stratum 프로토콜이 사용된다 .
기존 http 통신방식은 p2p 네트워크에 적합하지 않고 취약하기 떄문에
새로운 대안으로 나온 프로토콜이다.
NTP 프로토콜에 서버다 네트워크로 연결되어있는 컴퓨터들끼리 UTC 시각을 동기화에
타임서버를 정해 따로 네트워킹 하는것

그림과 같은 방법을 Handshake 방법이라고 한다
그림과같이 채널 노드A와 노드B 간에 정상적인 통신이 시작되기 전에 2개의 실체간에 확립된
통신채널의 변수를 동적으로 설정하는 자동화된 협상 과정이다 .
이것은 정상적인 정보 전송 이전에 이루어진다 .
이웃노드가 연결 요청을 승인할 경우 대답으로 verack으로 응답한다 ack은 acknowledge의
줄임말이라고 한다 .
연결요청이 승인이 된경우 이웃노드는 클라이언트 목록에 기록된 종자노드를 이용하여 신속하게
네트워크 내 다른 노드를 검색한다.
종자 노드는 오랫동안 안정적으로 작동하는 노드들의 리스트이다.

종자노드를 사용해서 이웃과 연결되었으면 자신의 ip address를 전송해
이웃노드는 그메시지를 주변 이웃노드에게 전송한다 새롭게 연결된 노드는 getaddr를 통해서
이웃들의 ip주소 목록을 받는다.
그 일련의 과정이후 다른 노드들도 나를 검색할 수 있게 된다.
get blocks를 통해 서로 갖고있는 최신 블록을 확인

더 긴체인을 보유한 노드가 NODE B 가 INV 메시지를 보냄 INV안에는 공유받아야할
첫 500개의 블록해시 정보를 담고있음
어떤 범위내의 블록해시 정보를 받아야 하는지 500개의 블록해시정보를 B가 A에게 보내고
A는 확인 절차를 거친 이후 필요한 블록해시정보를 A가 B에게 전달후
B는 응답으로 A가 필요한 block 정보를 보냄
SPV 노드는 풀노드에 비해 규모가 작다고 보면됨
저장공간을 많이 차지하는 거래정보가 있는 블록바디 부분은 없이 헤더정보를 가지고있음
거래 정보가 없다는것은 UTXO 기반 거래의 결과를 직접 검증하지 못한다는것임
그래서 풀노드에게 헤더에 머클해시를 검증할수있는 Path를 받아 검증을 거쳐야한다

그림에서 보는것처럼 빨간색점은 풀노드에게서 받아온 Merkle path임
헤더에 담고있는 머클해시를 알고있는 SPV노드는
검증을 거치려고 하는 특정 거래정보와 Merkle path 를 이용해
최종적인 머클해시와 대조해야하는 작업을 수행해야한다.
이렇게 노드들의 종류와 노드들의 규모 노드들간의 네트워킹 방식
그리그 노드들간의 협력 방식을 알아보았다