앞서말한것들의 틀이라고생각해보면된다.

 

공통 계층 (=공통으로 사용하는 기능을 포함하고 있다.)


이더리움 P2P 네트워크는

1.마이닝 작업을 수행하는 마이너 노드
2.일반 사용자 노드
로 나뉜다.

 

이 노드들이 이더리움의 P2P 네트워크에 연결


블록체인 데이터의 동기화 방식에 따라
전체노드(전부동기화)와 
라이트노드(일부분 동기화)로 나뉜다

모든 노드가 블록체인의 모든 데이터를 동기화해야 효율적으로 운영된다.

 

단점과 조심해야할 점들


 분산형 구조이다 보니 네트워크 끊김 현상이 자주 발생하고, 프로토콜상의 질의 내용을 변조하거나 다수의 노드를 악의적으로 점령한 뒤 네트워크를 혼란시키는 이클립 스 공격 등 여러 보안상 문제가 발생할 수 있다. 


그래서

NAT(Network Address Translation) 서버를 사용하는 등 시스템 운영 시에 세심한 주의가 필요하다.
 참고로, NAT 서버는 사설 IP 주소를 공인 IP 주소로 변환해 주는 서버다

 

P2P네트워크간 사용하는 인코딩방식과 프로토콜


이더리움은 P2P 네트워크상에서 일반 전송과 애플리케이션 간의 통신을 위해 RLPx라는 암호 화된 피어 간 네트워크 프로토콜을 사용한다

1.RLPx 는 UDP 방식과 TCP 방식 프로토콜등 P2P 네트워크 기능이 포함되어있는 암호화된 피어 간 네트워크 프로토콜(사용자가 손쉽게 쓸수있도록 만들어져있는 인터페이스)이다


2.노드 디스커버리 프로토콜
 
한 노드가 이더리움 네트워크의 일부가 되려면 네트워크상의 다른 노드들과 서로 연결되어야 한다. 모든 노드와 연결될 필요는 없지만, 일부 노드와는 반드시 연결되어야 한다. 

이더리움은 완전 분산 네트워크를 위한 분산 해시테이블인 카데리마(Kadelima) 프로토 콜을 기반으로 네트워크상에 노드를 탐지하는 노드 디스커버리 프로토콜을 개발하였다.

 

노드 탐색 프로토콜

 

 RlPx 노드를 찾는데쓴다


부트스트랩노드를사용하여 네트워크상의 피어노드들을 찾는다.(현재상황에서 어떻게든 노드목록을 유지함)

 

부트스트랩 노드

최근 노드(다른노드)들에 접속하기위해 사용하는 노드


1.부트스트랩 노드는 항상 작동하며,일정 시간 동안 접속했던 노드들의 목록을 유지하고있다.

가령, 지난 24시간 동안 이더리움 네트워크에 접속했던 노드들의 목록처럼
접속시간을 미리정의할수있다.

새로운 피어노드 최초접속

=>부트스트랩 노드에서 접속했던 피어들의 목록을공유받음
=>공유받은 목록의 피어노드들에 연결 후 부트스트랩노드로 연결out

이더리움의 각 노드는 enode라는 URL로 표현된다. enode URL은 타원형 곡선 방식(ECDSA) 을 사용하여 개인 키로 서명한 64바이트 공개 키다. 이 공개키는16진수로 표현된다.

 


UDP 단방향통신의 특징(이쯤에서 짚고넘어가는 네트워크 짤막)

애플리케이션 메시지
전송계층 데이터그램
ip계층 패킷
비연결성이고 데이터그램방식

 

패킷의 종류들

1.Ping은 노드가 온라인 상태인지를 확인하기 위한 패킷입니다. 

연결되어 있는 피어 노드 중 첫 번째 노드에게 자신의 ping을 보내고, ping을 받은 노드는 pong 패킷을 보내서 응답합니다. Pong은 ping에 대한 응답 패킷입니다.

2.findnode는 목표 노드의 주변에 위치한 peer 노드들에게 전달됩니다.

3.findnode 패킷의 수신자는 해당 목표 노드 주변에 위치한 노드들을 알고 있다면 해당 노드들의 목록을 neighbors 패킷에 포함하여 반환합니다. Neighbors는 findnode에 대한 응답 패킷이고, 요청된 목표 노드의 인접한 노드들이 포함되어 있습니다.


과정


인코딩 => 전자서명

=>패킷의 32바이트 이후 위치에 복사

=>해시값을 패킷의
가장 앞부분에 추가한다

 =>인코딩된 패킷 디코딩(ping,pong,findnode,neighbors)

 

결론

공통계층은 포괄적인 의미로 담기위한 단어일뿐 그이상 그이하도아니다.

암호화 된 P2P 통신하기위한 여러가지 도구들을 다같이 싸잡아서 말하는 계층이라고 이해하자.

 

어려운내용들,,!

복사했습니다!