메시지 헤더 (Message Header)

고급블록체인수정일

메시지 헤더(message header)는 비트코인 P2P 네트워크에서 노드끼리 주고받는 모든 메시지의 앞부분에 붙는 24바이트 고정 구조입니다. 네트워크 매직 값, 명령 이름, 페이로드 크기, 체크섬의 네 필드로 이루어져 있으며, 수신 노드는 이 헤더를 읽고 뒤따르는 데이터가 무엇인지, 얼마나 긴지, 손상되지 않았는지를 판단합니다.

자세히 알아보기

네 필드는 다음과 같습니다.

  • 스타트 스트링(매직 값, 4바이트): 어떤 네트워크의 메시지인지 나타냅니다. 메인넷은 0xF9 0xBE 0xB4 0xD9이며, 테스트넷·레그테스트는 다른 값을 씁니다. 실수로 다른 네트워크 노드와 통신하는 것을 막고, 데이터 스트림에서 메시지 경계를 찾는 데도 쓰입니다.
  • 명령 이름(12바이트): version, verack, inv, getdata, tx, block, headers 같은 메시지 종류를 ASCII 문자열로 적고, 남는 공간은 0x00으로 채웁니다.
  • 페이로드 크기(4바이트): 뒤에 오는 데이터의 바이트 수를 리틀 엔디언 부호 없는 정수로 나타냅니다.
  • 체크섬(4바이트): 페이로드를 SHA-256으로 두 번 해시한 값의 앞 4바이트입니다. 값이 맞지 않으면 메시지는 버려집니다.

이 체크섬은 전송 오류를 걸러내는 용도일 뿐, 메시지를 누가 보냈는지 인증하거나 내용을 숨기지는 않습니다. 이 구조의 메시지는 평문으로 전송되어 중간에서 관찰될 수 있었고, 이를 개선하기 위해 BIP324(v2 P2P 전송)는 노드 간 연결을 암호화하고 헤더 구조도 바꾸었습니다. 최신 Bitcoin Core는 이를 지원하며, 상대 노드가 지원하지 않으면 기존(v1) 방식으로 통신합니다.

블록체인·암호화폐에서는

새 트랜잭션은 inv → getdata → tx 순서의 메시지로, 새 블록은 inv·headers·block(또는 compact block) 메시지로 전파되며, 모든 메시지가 이 헤더로 시작합니다. 비트코인에서 갈라진 라이트코인 등도 같은 형식을 쓰되 고유한 매직 값을 사용합니다. 블록 헤더(80바이트)와는 다른 개념이므로 혼동하지 않아야 합니다.

쉽게 말하면

택배 상자 겉면의 송장입니다. 어느 나라 택배인지, 내용물 종류, 무게, 파손 확인 표시가 적혀 있어 상자를 열기 전에 처리 방법을 정할 수 있습니다.

예시

verack 메시지는 페이로드가 비어 있으므로 크기 필드가 0이고, 체크섬은 빈 데이터의 이중 SHA-256 앞 4바이트인 0x5D 0xF6 0xE0 0xE2입니다.

이 글은 학습을 위한 일반 정보이며 투자 권유나 법률 자문이 아닙니다. 가상자산은 가격 변동이 크고 원금 손실 위험이 있습니다.