중계노드
중계노드(Intermediate Node)란 종단노드와 종단노드 사이에서 패킷 중계를 해주는 노드이다.
개요
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)이다. TCP는 인터넷 프로토콜(IP) 위에 구축되는데 흔히 TCP/IP로 알려져 있다. 기기의 IP 주소가 여기서 작동한다.
- 3계층 : 네트워크 계층(Network)
- 네트워킹 전문가 대부분이 관심을 두고 좋아하는 라우터 기능 대부분이 여기 네트워크 계층에 자리잡는다. 가장 기본적으로 볼 때 이 계층은 다른 여러 라우터를 통한 라우팅을 비롯한 패킷 전달을 담당한다. 보스턴에 있는 컴퓨터가 캘리포니아에 있는 서버에 연결하려고 할 때 그 경로는 수백 만 가지다. 이 계층의 라우터가 이 작업을 효율적으로 처리한다.
- 2계층 : 데이터 링크 계층(Data Link)
- 데이터 링크 계층은 (두 개의 직접 연결된 노드 사이의) 인접 노드 간 신뢰성있는 데이터 전송을 제공하며 물리 계층의 오류 수정도 처리한다. 여기에는 2개의 부계층도 존재한다. 하나는 매체 접근 제어(MAC) 계층이고 다른 하나는 논리적 연결 제어(LLC) 계층이다. 네트워킹 세계에서 대부분 스위치는 2계층에서 작동한다. 데이터 링크 계층의 데이터 전송단위는 프레임(Frame)이며, 대표적인 프로토콜로는 이더넷(Ethernet), 토큰링(TokenRing) 등이 있다.
- 흐름제어(Flow Control) : 송신노드가 수신노드에 데이터를 전달할 때, 처리속도를 고려해서 이를 넘어서지 않을 정도로 컨트롤해서 보내는 것을 말한다. 이 흐름제어는 수신노드가 응답을 하는 것으로 두 가지 방식을 통해 제어할 수 있다.
- 정지 및 대기(Stop and Wait) : 송신노드가 데이터를 보내면 수신노드가 잘 받았다고 ACK 응답을 보낸 후, 다음 데이터를 전송하는 것이다.
- 슬라이딩 윈도우(Sliding Window) : 송신노드가 수신노드로부터 응답받기 전에 수신노드가 받을 수 있는 만큼 전부 데이터를 전송하는 것이다.
- 오류제어(Error Control) : 데이터 전송 중에 여러가지 원인으로 손실, 오류가 발생했을 때 이를 해결하는 제어 방식이다.
- 후진 오류 수정방식(Backward Error Correction) : 송신노드가 데이터를 전달할 때, 오류가 있는지 없는지를 체크할 수 있는 값을 같이 보내면, 수신노드가 확인을 하고 오류가 있으면 재요청을 하는 방식이다. 여기서 재요청하는 것을 ARQ(Automatic Repeat Request)라고 한다.
- 전진 오류 수정방식(Forward Error Correction) : 송신노드가 데이터를 보낼 때 오류 발생 시 수정을 할 수 있는 부가 정보를 함께 보내는 방식이다.
- 회선제어(Line Control) : 회선구성방식에 따라 점대점(Point to Point)방식과 다중점(Multipoint)방식이 있고, 전송 방식에 따라 단방향(simplex), 반이중(half-duplex), 전이중(full-duplex)이 있다.
- 1계층 : 물리 계층(Physical)
- OSI 디핑 소스의 밑바닥에는 물리 계층이 있다. 시스템의 전기적, 물리적 표현을 나타낸다. 케이블 종류, (802.11 무선 시스템에서와 같은) 무선 주파수 링크는 물론 핀 배치, 전압, 물리 요건 등이 포함된다. 네트워킹 문제가 발생하면 많은 네트워크 전문가가 물리 계층으로 바로 가서 모든 케이블이 제대로 연결돼 있는지, 라우터나 스위치 또는 컴퓨터에서 전원 플러그가 빠지지 않았는지 확인한다. 물리 계층의 데이터 전송 단위(Data Unit)는 bit 또는 signal이며, 물리 계층 장비로는 허브(Hub) 중 더미 허브(Dummy Hub)가 있다. 더미허브는 연결된 모든 노드에게 신호를 보내는 일만 할 수 있는 허브이다.[1][2]
비트코인
블록 브로드캐스팅(Block Broadcasting)
광부가 새로운 블록을 발견하면 다음 방법 중 하나를 사용하여 새로운 블록을 피어에게 브로드 캐스팅한다.
- 요청하지 않은 블록 푸시 : 광부는 새로운 블록을 가진 전체 노드 피어들에게 블록 메시지를 보낸다. 광부는 표준 릴레이 방법을 합리적으로 우회할 수 있다. 피어가 이미 방금 발견 된 블록을 갖고 있지 않다는 것을 알고 있기 때문이다.
- 표준 블록 릴레이 : 표준 릴레이 노드로 작동하는 광부는 새로운 블록을 참조하는 인벤토리로 각 피어 (전체 노드 및 SPV 모두)에 inv 메시지를 전송한다. 가장 일반적인 응답은 다음과 같다.
- 블록을 원하는 각 블록 우선 (BF) 피어는 전체 블록을 요청하는 getdata 메시지로 응답한다.
- 블록을 원하는 각 헤더 우선 (first-first (HF)) 피어는 최상의 헤더 체인에서 가장 높은 헤더의 헤더 해시를 포함하는 getheaders 메시지로 응답하고 일부 헤더는 포크 감지를 허용하는 최상의 헤더 체인으로 되돌아간다. 이 메시지 바로 뒤에 전체 블록을 요청하는 getdata 메시지가 온다. 먼저 헤더를 요청하면 헤더 우선 피어는 아래의 하위 섹션에서 설명한대로 고아 블록을 거부 할 수 있다.
- 블록을 원하는 각 SPV(Simplified Payment Verification) 클라이언트는 일반적으로 머클 블록을 요청하는 getdata 메시지로 응답한다.
광부는 블록 메시지, 헤더 메시지의 하나 이상의 헤더 또는 머클 블록과 SPK 클라이언트의 블룸 필터를 기준으로 한 트랜잭션을 머클블록 메시지에 이어 0개 이상의 tx 메시지로 전송하여 각 요청에 적절히 응답한다.
- 다이렉트 헤더 발표 (Direct Headers Announcement)
- 중계 노드는 새로운 블록의 전체 헤더를 포함하는 header 메시지를 즉시 전송함으로써 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 | |
페이로드 | 직렬화 된 형식의 새 블록 | 머클 블록으로 필터링 된 새 블록 | 블룸 필터와 일치하는 새 블록의 트랜잭션을 직렬화한다. |
각주
- ↑ Keith Shaw, 〈네트워크의 기본 'OSI 7계층'··· 한번에 이해하고 외우는 방법〉, 《CIO 코리아》, 2017-12-06
- ↑ JooDa, 〈(네트워크) 네트워크 기본1〉, 《네이버 블로그》, 2016-05-03
- ↑ WikiDocs, 〈7-06. 블록 브로드캐스팅(Block Broadcasting)〉, 《위키독스》, 2018-02-04
참고자료
- 깡냉스, 〈(정보보안기사) 네트워크(OSI 7계층)〉, 《티스토리》, 2018-05-09
- Keith Shaw, 〈네트워크의 기본 'OSI 7계층'··· 한번에 이해하고 외우는 방법〉, 《CIO 코리아》, 2017-12-06
- JooDa, 〈(네트워크) 네트워크 기본1〉, 《네이버 블로그》, 2016-05-03
- WikiDocs, 〈7-06. 블록 브로드캐스팅(Block Broadcasting)〉, 《위키독스》, 2018-02-04
같이 보기