# 메시지 헤더 (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입니다.

---
출처: https://achivx.kr/glossary/message-header-%EB%A9%94%EC%8B%9C%EC%A7%80-%ED%97%A4%EB%8D%94/ · ACHIVX 용어 사전 · 수정일 2026-10-20
