검수요청.png검수요청.png

"중계노드"의 두 판 사이의 차이

위키원
이동: 둘러보기, 검색
(1계층 - 물리 계층(Physical))
(블록 브로드캐스팅(Block Broadcasting))
52번째 줄: 52번째 줄:
 
광부가 새로운 [[블록]]을 발견하면 다음 방법의 하나를 사용하여 새로운 [[블록]]을 [[피어]]에 [[브로드 캐스팅]]한다.
 
광부가 새로운 [[블록]]을 발견하면 다음 방법의 하나를 사용하여 새로운 [[블록]]을 [[피어]]에 [[브로드 캐스팅]]한다.
  
* 요청하지 않은 블록 푸시 : 광부는 새로운 블록을 가진 전체 노드 피어들에 블록 메시지를 보낸다. 광부는 표준 릴레이 방법을 합리적으로 우회할 수 있다. 피어가 이미 방금 발견된 블록을 갖고 있지 않다는 것을 알고 있기 때문이다.
+
;요청하지 않은 블록 푸시  
* 표준 블록 릴레이 : 표준 릴레이 노드로 작동하는 광부는 새로운 블록을 참조하는 인벤토리로 각 피어 (전체 노드 및 SPV 모두)에 inv 메시지를 전송한다. 가장 일반적인 응답은 다음과 같다.
+
광부는 새로운 블록을 가진 전체 노드 피어들에 블록 메시지를 보낸다. 광부는 표준 릴레이 방법을 합리적으로 우회할 수 있다. 피어가 발견된 블록을 갖고 있지 않다는 것을 알고 있기 때문이다.
# 블록을 원하는 각 블록 우선 (BF) 피어는 전체 블록을 요청하는 getdata 메시지로 응답한다.
 
# 블록을 원하는 각 헤더 우선 (first-first (HF)) [[피어]]는 최상의 헤더 [[체인]]에서 가장 높은 헤더의 헤더 [[해시]]를 포함하는 getheaders 메시지로 응답하고 일부 헤더는 포크 감지를 허용하는 최상의 헤더 체인으로 되돌아간다. 이 메시지 바로 뒤에 전체 블록을 요청하는 getdata 메시지가 온다. 먼저 헤더를 요청하면 헤더 우선 피어는 아래의 하위 섹션에서 설명한 대로 고아 블록을 거부 할 수 있다.
 
# 블록을 원하는 각 SPV(Simplified Payment Verification) 클라이언트는 일반적으로 머클 블록을 요청하는 getdata 메시지로 응답한다.
 
  
광부는 블록 메시지, 헤더 메시지의 하나 이상의 [[헤더]] 또는 [[머클 블록]]과 SPK 클라이언트의 [[블룸 필터]]를 기준으로 한 트랜잭션을 머클블록 메시지에 이어 0개 이상의 tx 메시지로 전송하여 각 요청에 적절히 응답한다.
+
;표준 블록 릴레이
 +
표준 릴레이 노드로 작동하는 광부는 새로운 블록을 참조하는 인벤토리로 각 피어 (전체 노드 및 SPV 모두)에 inv 메시지를 전송한다. 가장 일반적인 응답은 다음과 같다.<br>
 +
* 1. 블록을 원하는 각 블록 우선(BF) 피어는 전체 블록을 요청하는 getdata 메시지로 응답한다.<br>
 +
* 2. 블록을 원하는 각 헤더 우선 (first-first (HF)) [[피어]]는 최상의 헤더 [[체인]]에서 가장 높은 헤더의 헤더 [[해시]]를 포함하는 getheaders 메시지로 응답하고 일부 헤더는 포크 감지를 허용하는 최상의 헤더 체인으로 되돌아간다. 이 메시지 바로 뒤에 전체 블록을 요청하는 getdata 메시지가 온다. 먼저 헤더를 요청하면 헤더 우선 피어는 아래의 하위 섹션에서 설명한 대로 고아 블록을 거부 할 수 있다.
 +
* 3. 블록을 원하는 각 SPV(Simplified Payment Verification) 클라이언트는 일반적으로 머클 블록을 요청하는 getdata 메시지로 응답한다. 광부는 블록 메시지, 헤더 메시지의 하나 이상의 [[헤더]] 또는 [[머클 블록]]과 SPK 클라이언트의 [[블룸 필터]]를 기준으로 한 트랜잭션을 머클블록 메시지에 이어 0개 이상의 tx 메시지로 전송하여 각 요청에 적절히 응답한다.
  
* '''다이렉트 헤더 발표 (Direct Headers Announcement)'''
+
;다이렉트 헤더 발표 (Direct Headers Announcement)
: 중계 노드는 새로운 블록의 전체 헤더를 포함하는 헤더 메시지를 즉시 전송함으로써 invheader에 의해 따라오는 inv 메시지의 왕복 오버헤드를 건너뛸 수 있다. 이 메시지를 수신한 HF [[피어]]는 헤더 첫 번째 IBD 동안 블록 헤더를 부분적으로 검증한 다음 헤더가 유효하면 getdata 메시지로 전체 블록 내용을 요청한다. 그 후, 중계 노드는 블록 또는 머클블록 메시지의 전체 또는 필터링 된 블록 데이터로 getdata 요청에 응답한다. HF 노드는 접속 핸드 세이크 중에 특별한 센드헤더(sendheaders) 메시지를 전송함으로써 inv 공지 대신에 헤더를 수신하는 것을 선호한다고 신호할 수 있다. 블록 방송을 위한 이 프로토콜은 BIP 130에서 제안되었으며 버전 0.12 이후 Bitcoin Core에서 구현되었다.
+
* 중계 노드는 새로운 블록의 전체 헤더를 포함하는 헤더 메시지를 즉시 전송함으로써 invheader에 의해 따라오는 inv 메시지의 왕복 오버헤드를 건너뛸 수 있다. 이 메시지를 수신한 HF [[피어]]는 헤더 첫 번째 IBD 동안 블록 헤더를 부분적으로 검증한 다음 헤더가 유효하면 getdata 메시지로 전체 블록 내용을 요청한다. 그 후, 중계 노드는 블록 또는 머클블록 메시지의 전체 또는 필터링 된 블록 데이터로 getdata 요청에 응답한다. HF 노드는 접속 핸드 세이크 중에 특별한 센드헤더(sendheaders) 메시지를 전송함으로써 inv 공지 대신에 헤더를 수신하는 것을 선호한다고 신호할 수 있다. 블록 방송을 위한 이 프로토콜은 BIP 130에서 제안되었으며 버전 0.12 이후 Bitcoin Core에서 구현되었다.
: 기본적으로 [[비트코인 코어]](Bitcoin Core)는 센드헤더로 신호를 보낸 모든 동료에게 직접 헤더 발표를 사용하여 블록을 브로드 캐스트하고 그렇지 않은 모든 피어에 대해 표준 블록 릴레이를 사용한다. 비트코인 코어는 위에 설명된 방법의 하나를 사용하여 전송된 블록을 허용한다. 전체 노드는 수신된 블록의 유효성을 검사한 다음 위에서 설명한 표준 블록 릴레이 방법을 사용하여 피어에이를 보급한다.
+
* 기본적으로 [[비트코인 코어]](Bitcoin Core)는 센드헤더로 신호를 보낸 모든 동료에게 직접 헤더 발표를 사용하여 블록을 브로드 캐스트하고 그렇지 않은 모든 피어에 대해 표준 블록 릴레이를 사용한다. 비트코인 코어는 위에 설명된 방법의 하나를 사용하여 전송된 블록을 허용한다. 전체 노드는 수신된 블록의 유효성을 검사한 다음 위에서 설명한 표준 블록 릴레이 방법을 사용하여 피어에이를 보급한다.
  
 
{| class="wikitable" width=1100 style="color:balck; height:250px; text-align:left; background-color:#F8F9FA; margin:15px 15px 15px 30px; "
 
{| class="wikitable" width=1100 style="color:balck; height:250px; text-align:left; background-color:#F8F9FA; margin:15px 15px 15px 30px; "

2019년 9월 26일 (목) 15:36 판

중계노드(Intermediate Node)란 종단노드(End Node)와 종단노드 사이에서 패킷 중계를 해주는 노드이다.

개요

중계노드는 인접하지 않은 노드(Node)에 메시지를 라우팅할 수 있다. 예를 들어, 3대의 컴퓨터가 직렬 A-C로 연결되어 있다면, A에서 C로 전송된 데이터는 B를 통해 라우팅 될 수 있다.[1] 또한, 종단노드 사이에 패킷 중계를 해주는 노드를 말한다. 여기서 노드는 네트워크에 연결된 장치(device)를 의미한다. 네트워크에 연결된 컴퓨터를 포함하여 네트워크 프린터와 같은 주변기기, 라우터, 스위치, 허브와 같은 통신 장비를 포함한다. 종단노드는 통신의 양 끝단에 해당하는 노드로 최초 송신 노드(최초 출발지)와 최종 수신 노드(최종 목적지)를 말한다.[2]

OSI 7계층

OSI 모델은 1970년대에 등장한 2가지 별도 모형을 1983년에 합쳐 1984년에 처음 공개됐다. OSI 모형을 설명할 때 대부분 맨 위 7계층부터 시작해 맨 아래 1계층까지 내려온다. 각 계층과 이들의 의미하는 바는 다음과 같다.

7계층 - 응용 계층(Application)

디핑 소스 비유를 확장하면 응용 계층은 가장 위에 있다. 사용자에게 보이는 부분이다. OSI 모형에서는 최종 사용자에게 가장 가까운 계층이다. 7층에서 작동하는 응용프로그램은 사용자와 직접적으로 상호작용한다. 구글 크롬(Google Chrome), 파이어폭스(Firefox), 사파리(Safari) 등 웹 브라우저와 스카이프(Skype), 아웃룩(Outlook), 오피스(Office) 등의 응용 프로그램이 대표적이다.

6계층 - 표현 계층(Presentation)

표현 계층은 응용 계층의 데이터 표현에서 독립적인 부분을 나타낸다. 일반적으로 응용프로그램 형식을 준비 또는 네트워크 형식으로 변환하거나 네트워크 형식을 응용프로그램 형식으로 변환하는 것을 나타낸다. 다시 말해 이 계층은 응용프로그램이나 네트워크를 위해 데이터를 표현하는 것이다. 대표적인 예로는 데이터를 안전하게 전송하기 위해 암호화, 복호화하는 것인데, 이 작업이 바로 6계층에서 처리된다.

5계층 - 세션 계층(Session)

2대의 기기, 컴퓨터 또는 서버 간에 대화가 필요하면 세션(session)을 만들어야 하는데 이 작업이 여기서 처리된다. 이 계층에는 설정, 조율(예: 시스템의 응답 대기 기간), 세션 마지막에 응용프로그램 간의 종료 등의 기능이 필요하다.

4계층 - 전송 계층(Transport)

전송 계층은 최종 시스템 및 호스트 간의 데이터 전송 조율을 담당한다. 보낼 데이터의 용량과 속도, 목적지 등을 처리한다. 전송 계층의 대표 프로토콜은 전송 제어 프로토콜(TCP)과 사용자 데이터그램 프로토콜(UDP)이 있다. 전송 제어 프로토콜은 인터넷 프로토콜(IP) 위에 구축되는데 흔히 TCP/IP로 알려져 있다. 기기의 IP 주소가 여기서 작동한다. 사용자 데이터그램 프로토콜은 유니버설 데이터그램 프로토콜(Universal Datagram Protocol)이라고 부르기도 하며, 전송 제어 프로토콜과 함께 데이터그램으로 알려진 단문 메시지를 교환하기 위해서 사용된다.[3]

  • 분할(Segmentation)과 재조합(Reassembly) : 조건에 따라서 원본 데이터를 전송 가능한 세그먼트 단위로 분할해서 전송하면 목적지에서는 분할된 세그먼트들을 재조합해서 원본 데이터를 얻는 것이다.
  • 연결 제어(Connection Control) : 연결지향 전송 제어 프로토콜과 비 연결지향 사용자 데이터그램 프로토콜이 있다.
  • 흐름 제어(Flow Control) : 데이터 링크 계층의 흐름 제어와 같이 수신자가 받을 수 있는 만큼만 송신하는 것이다. 데이터 링크 계층과 다른 점은 인접 노드 간 데이터 전송이 아닌 종단 간 데이터 전송을 하는 것이다.
  • 오류 제어(Error Control) : 종단 간 전송 오류 발생 시 오류 교정을 하는 것이다.

3계층 - 네트워크 계층(Network)

네트워크 계층은 종단노드간의 라우팅을 담당하는 계층이다. 처음 송신한 노드부터 데이터를 받은 최종 수신 노드까지 전달되는 경로를 만들어준다. 라우팅(Routing)은 라우팅 알고리즘에 의해 목적지까지 도달하는 최적의 경로를 찾아주고 패킷을 교환하는 기능을 제공한다. 네트워킹 전문가 대부분이 관심을 두고 좋아하는 라우터 기능 대부분이 여기 네트워크 계층에 자리 잡는다. 보스턴에 있는 컴퓨터가 캘리포니아에 있는 서버에 연결하려고 할 때 그 경로는 수백만 가지다. 네트워크 계층의 데이터 전송 단위(PDU)는 패킷(Packet)이며, 주요 장비로는 라우터(Router)와 L3 스위치(L3 Switch)가 있다. 대표 프로토콜은 인터넷 프로토콜(IP), IPX(Internetwork Packet Exchange)가 있다.[4]

2계층 - 데이터 링크 계층(Data Link)

데이터 링크 계층은 (두 개의 직접 연결된 노드 사이의) 인접 노드 간 신뢰성 있는 데이터 전송을 제공하며 물리 계층의 오류 수정도 처리한다. 여기에는 2개의 부계층도 존재한다. 하나는 매체 접근 제어(MAC) 계층이고 다른 하나는 논리적 연결 제어(LLC) 계층이다. 네트워킹 세계에서 대부분 스위치는 2계층에서 작동한다. 데이터 링크 계층의 데이터 전송단위는 프레임(Frame)이며, 대표적인 프로토콜로는 이더넷(Ethernet), 토큰링(TokenRing) 등이 있다.

  • 흐름 제어 : 송신 노드가 수신 노드에 데이터를 보낼 때, 처리속도를 제어해서 보내는 것을 말한다. 이 흐름 제어는 수신 노드가 응답을 하는 것으로 두 가지 방식을 통해 제어할 수 있다.

1. 정지 및 대기 : 송신 노드가 데이터를 보내면 수신 노드가 잘 받았다고 ACK 응답을 보낸 후, 다음 데이터를 전송하는 것이다.
2. 슬라이딩 윈도우 : 송신 노드가 수신 노드로부터 응답받기 전에 수신 노드가 받을 수 있는 만큼 전부 데이터를 전송하는 것이다.

  • 오류제어 : 데이터 전송 중에 여러 가지 원인으로 손실, 오류가 발생했을 때 이를 해결하는 제어 방식이다.

1. 후진 오류 수정방식 : 송신 노드가 데이터를 보낼 때, 오류 여부를 수신 노드가 확인 후 재요청을 하는 방식이다. 여기서 재요청 하는 것을 ARQ(Automatic Repeat Request)라고 한다.
2. 전진 오류 수정방식 : 송신 노드가 데이터를 보낼 때 오류 발생 시 수정을 할 수 있는 부가 정보를 함께 보내는 방식이다.

  • 회선제어 : 회선 구성방식에 따라 점대점(Point to Point)방식과 다중점(Multipoint) 방식이 있고, 전송 방식에 따라 단방향(simplex), 반이중(half-duplex), 전이중(full-duplex)이 있다.

1계층 - 물리 계층(Physical)

OSI 디핑 소스의 밑바닥에는 물리 계층이 있다. 시스템의 전기적, 물리적 표현을 나타낸다. 케이블 종류, (802.11 무선 시스템에서와 같은) 무선 주파수 링크는 물론 핀 배치, 전압, 물리 요건 등이 포함된다. 네트워킹 문제가 발생하면 많은 네트워크 전문가가 물리 계층으로 바로 가서 모든 케이블이 제대로 연결돼 있는지, 라우터나 스위치 또는 컴퓨터에서 전원 플러그가 빠지지 않았는지 확인한다. 물리 계층의 데이터 전송 단위는 비트(bit) 또는 신호이며, 물리 계층 장비로는 허브(Hub) 중 더미 허브(Dummy Hub)가 있다. 더미 허브는 연결된 모든 노드에 신호를 보내는 일만 할 수 있는 허브이다.[5][6]

비트코인

블록 브로드캐스팅(Block Broadcasting)

광부가 새로운 블록을 발견하면 다음 방법의 하나를 사용하여 새로운 블록피어브로드 캐스팅한다.

요청하지 않은 블록 푸시

광부는 새로운 블록을 가진 전체 노드 피어들에 블록 메시지를 보낸다. 광부는 표준 릴레이 방법을 합리적으로 우회할 수 있다. 피어가 발견된 블록을 갖고 있지 않다는 것을 알고 있기 때문이다.

표준 블록 릴레이

표준 릴레이 노드로 작동하는 광부는 새로운 블록을 참조하는 인벤토리로 각 피어 (전체 노드 및 SPV 모두)에 inv 메시지를 전송한다. 가장 일반적인 응답은 다음과 같다.

  • 1. 블록을 원하는 각 블록 우선(BF) 피어는 전체 블록을 요청하는 getdata 메시지로 응답한다.
  • 2. 블록을 원하는 각 헤더 우선 (first-first (HF)) 피어는 최상의 헤더 체인에서 가장 높은 헤더의 헤더 해시를 포함하는 getheaders 메시지로 응답하고 일부 헤더는 포크 감지를 허용하는 최상의 헤더 체인으로 되돌아간다. 이 메시지 바로 뒤에 전체 블록을 요청하는 getdata 메시지가 온다. 먼저 헤더를 요청하면 헤더 우선 피어는 아래의 하위 섹션에서 설명한 대로 고아 블록을 거부 할 수 있다.
  • 3. 블록을 원하는 각 SPV(Simplified Payment Verification) 클라이언트는 일반적으로 머클 블록을 요청하는 getdata 메시지로 응답한다. 광부는 블록 메시지, 헤더 메시지의 하나 이상의 헤더 또는 머클 블록과 SPK 클라이언트의 블룸 필터를 기준으로 한 트랜잭션을 머클블록 메시지에 이어 0개 이상의 tx 메시지로 전송하여 각 요청에 적절히 응답한다.
다이렉트 헤더 발표 (Direct Headers Announcement)
  • 중계 노드는 새로운 블록의 전체 헤더를 포함하는 헤더 메시지를 즉시 전송함으로써 invheader에 의해 따라오는 inv 메시지의 왕복 오버헤드를 건너뛸 수 있다. 이 메시지를 수신한 HF 피어는 헤더 첫 번째 IBD 동안 블록 헤더를 부분적으로 검증한 다음 헤더가 유효하면 getdata 메시지로 전체 블록 내용을 요청한다. 그 후, 중계 노드는 블록 또는 머클블록 메시지의 전체 또는 필터링 된 블록 데이터로 getdata 요청에 응답한다. HF 노드는 접속 핸드 세이크 중에 특별한 센드헤더(sendheaders) 메시지를 전송함으로써 inv 공지 대신에 헤더를 수신하는 것을 선호한다고 신호할 수 있다. 블록 방송을 위한 이 프로토콜은 BIP 130에서 제안되었으며 버전 0.12 이후 Bitcoin Core에서 구현되었다.
  • 기본적으로 비트코인 코어(Bitcoin Core)는 센드헤더로 신호를 보낸 모든 동료에게 직접 헤더 발표를 사용하여 블록을 브로드 캐스트하고 그렇지 않은 모든 피어에 대해 표준 블록 릴레이를 사용한다. 비트코인 코어는 위에 설명된 방법의 하나를 사용하여 전송된 블록을 허용한다. 전체 노드는 수신된 블록의 유효성을 검사한 다음 위에서 설명한 표준 블록 릴레이 방법을 사용하여 피어에이를 보급한다.
메시지 inv getdata getheaders headers
From → To Relay → Any BF → Relay HF → Relay Relay → HF
페이로드 새 블록의 인벤토리 새 블록의 인벤토리 HF 노드의 BHC(Best Header Chain)에서 하나 이상의 헤더 해시 HF 노드의 BHC를 릴레이 노드의 BHC에 연결하는 최대 2,000개의 헤더
메시지 블록 머클블록 tx
From → To Relay → BF / HF Relay → SPV Relay → SPV
페이로드 직렬화된 형식의 새 블록 머클 블록으로 필터링 된 새 블록 블룸 필터와 일치하는 새 블록의 트랜잭션을 직렬화한다.

[7]

각주

  1. intermediate node routing〉, 《PC magazine》
  2. I can do IT, 〈노드 / 호스트 / 종단 노드 / 중계 노드〉, 《워드프레스 블로그》, 2019-05-15
  3. 사용자 데이터그램 프로토콜〉, 《위키백과》
  4. JooDa, 〈(네트워크) 네트워크 기본2〉, 《네이버 블로그》, 2016-05-05
  5. Keith Shaw, 〈네트워크의 기본 'OSI 7계층'··· 한번에 이해하고 외우는 방법〉, 《CIO 코리아》, 2017-12-06
  6. JooDa, 〈(네트워크) 네트워크 기본1〉, 《네이버 블로그》, 2016-05-03
  7. WikiDocs, 〈7-06. 블록 브로드캐스팅(Block Broadcasting)〉, 《위키독스》, 2018-02-04

참고자료

같이 보기


  검수요청.png검수요청.png 이 중계노드 문서는 블록체인 기술에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.