P2P 네트워크

박정호·2022년 1월 14일
0

P2P 네트워크에 대해 글을 써보려 한다.

여타 다른 개념과 다르지 않게 이미지화를 잘 시키면 개념을 익히는데 도움이 많이 된다.

P2P의 이미지는 peer, node, computer, or extra... 의 어떠한 것 두 개의 1대1 만남이 가장 적절하지 않을까 생각한다.

그 이후로 개념을 하나씩 문어발을 펼쳐본다.

동등성,

그렇다면

퓨어 에서

비구조화

구조화가 id 있는 퓨어

p2p 네트워크에 따른 블록체인의 동작

1. 블록체인을 구성하는 P2P 네트워크에서 하나의 노드가 거래 데이터를 보낸다. 거래는 아직 성립되지 않았다 2. 이 거래(트랜잭션)은 모든 노드에 브로드캐스트된다. 3. 모든 노드가 마이닝을 실시해 조건에 많는 해시값을 발견한 노드가 생기면 기존 블록체인에 새로운 블록을 추가한다. 이것이 POW이다 4. 그 노드는 새로운 블록을 다시 모두에게 브로드캐스트한다 5. 블록을 받은 노드들은 검증을 거치고, 문제없다면 해당 블록을 자신에게 추가하고 업데이트한다. 여기서 51%가 나오거나 할듯 6. 이러면 거래가 성립된다.

좀 더 구체적으로
비트코인에서 노드들이 연결하는 방법은 다음과 같다
비트코인 코어에 처음 입장을 하면
1. DNS 검색
2. 클라이언트 소프트웨어에 사전에 하드코딩 된 노드 목록
3. 명령줄에서 지정한 IP 주소
순으로 네트워크의 노드 목록을 취득한다.
이 과정 후에 인식된 노드 목록을 각 클라이언트 내부 데이터베이스에 보존해 놓는다(세션 개념인 것 같다)

이더리움은
1. 첫 시작 노드는 사전에 하드코딩된 부트스트랩 노드를 참조해 연결하고,
2. 그 이후 노드들은 디스커버리 프로토콜을 사용한다.

하이퍼렛져 패브릭은
1. 시작점을 지정하고 그 노드에 대한 디스커버리 프로토콜을 발행해 참가자를 받아온다
2. 검증된 이용자는 자신 제외한 모든 검증 이용자와 네트워크를 구축하고
3. 비검증 이용자는 연결이 허용된 가장 가까운 검증 이용자에게 연결한다

데이터(블록) 송수신에서
비트코인은 정보를 송신할 때 그 해시값을 메세지로 상대방에게 보내주고, 수신할 때는 getdata 메세지를 보내 정보의 본체를 요청한다.

이더리움은 블록체인의 데이터가 아닌 해시값을 모든 노드가 공유하는 공간에 체인으로 저장해논다
워크 풀이라 하는데 이게 멤풀인가?
이 워크 풀에서 나의 노드에서 부족한 데이터를 찾고, 해시를 이용해 블록을 요청하거나 획득한다

하이퍼렛져 패브릭은 노드간 통신에 gRPC를 이용하여 양방향 스트림 기반 메세징을 한다. 직렬화된 프로토콜 버퍼를 사용한다. 모두 구글 기술이래
올 ㅋ

블록체인 기술도 과제가 있다
1. 안정성이다. 특정 네트워크 토폴로지를 유지하는 구조를 갖추지 않은 블록체인은 비교적 잘 끊킨다. 질의 내용 변조나 이클립스 공격에 대한 대응도 필요하다.
2. 노드의 신뢰성과 브로드캐스트 등의 확실성이다. 장시간 들어와있는 노드는 신뢰가 가겠지만, 왔다갔다 하는 애는 의심이 간다. 이를 판단하는 방법도 다양하다. 아직 정론화가 안됐나바
브로드캐스트에 대해서는 블록체인 네트워크 전체에서 동기화가 가능한지, 수신 확인은 어떻게 할 것인지도 아직 모른다
3. p2p는 클라-서버 처럼 모든 클라이언트에 한꺼번에 같은 정보를 공유할 수 없다. p2p네트워크에서 메세지의 전송은 순차적으로 이루어지기 때문에 실시간 처리가 요구된다면 적용이 어렵다

전자 서명에서
전자 서명은 전자 데이터의 타당성을 증명하는 것이다.
블록체인에서는
하나의 트랜잭션에 하나의 전자 서명이 들어간다. 그리도 전자 서명을 검증하기 위한 공개키도 같이 포함된다.
그렇기 때문에 비트코인 네트워크 참가자는 과거 블록체인상에서 수행된 모든 트랜잭션을 순차 검증할 수 있다.
다음을 확인할 수 있다
1. 제3자가 트랜잭션을 위조, 변조했는지
2. 제3자가 도용해 트랜잭션을 했는지
트랜잭션을 발행하려면 공개키와 비밀키가 필요하다.
이 때 타원 곡선 알고리즘을 사용한다
정리해서 전자서명은 둘만의 거래에 제3자가 끼었는지 확인하는 거네

트랜잭션을 좀더 풀어 쓰면
비트코인이라면 정호가 영희에게 100BTC를 송금함. 시발 제발좀
블록체인 기반 기술로 구현한 스마트 계약이라면 계약 조건이 맞을 때 집행할 계약 내용이 되는 것이다.
보낸 사람만 알고있는 비밀키로 암호문을 생성하기 때문에 생성자체가 서명의 권한을 가진다.
검증은 공개키로 누구나 가능하다

블록체인에서 전자서명은

정호가 거래를 하려고 비밀키 공개키를 만들었어,
정호의 거래에 정호의 공개키를 넣어놔
그리고 정호의 거래를 비밀키로 전자서명 해 다음 거래에 서명을 넣어
연결성을 주기 위함인 것 같고, 그리고 트랜잭션도 남들이 다 보장을 해야 하는 거잖아
남들이 전자서명에 공개키를 집어넣어 값이 맞는지 확인하는데 이를 아까 위에서 말한 거에 연결을 시켜야해

profile
개발하기

0개의 댓글