네트워크 매직 (Network Magic)
네트워크 매직(network magic, magic bytes)은 비트코인 P2P 프로토콜의 모든 메시지 맨 앞에 붙는 고정된 4바이트 값으로, 메시지의 시작점과 그 메시지가 어느 네트워크(메인넷·테스트넷 등)용인지 알려 줍니다. 비트코인 문서에서는 '시작 문자열(start string)'이라고도 부릅니다. 이름의 'magic'은 마법이 아니라 프로그래밍에서 파일·데이터 형식을 식별하는 '매직 넘버'를 뜻합니다.
자세히 알아보기
비트코인 노드는 TCP 연결로 메시지를 연속해서 주고받습니다. 각 메시지는 '네트워크 매직(4바이트) + 명령 이름(12바이트) + 페이로드 길이(4바이트) + 체크섬(4바이트) + 페이로드' 구조의 헤더로 시작합니다. 수신 노드는 매직 값을 보고 메시지 경계를 찾고, 값이 자기 네트워크와 다르면 그 메시지를 버립니다.
네트워크마다 매직 값이 다르기 때문에, 메인넷 노드가 실수로 테스트넷 노드에 연결되더라도 서로의 메시지를 처리하지 않습니다. 비트코인 메인넷의 값은 0xF9BEB4D9(바이트 순서 f9 be b4 d9)이며, 테스트넷·시그넷·레그테스트는 각각 다른 값을 씁니다. 이 바이트들은 일반 텍스트에 잘 나타나지 않도록 선택되었습니다. 블록 데이터 파일(blk*.dat)에서도 각 블록 앞에 같은 매직 값이 기록됩니다.
네트워크 매직은 보안 장치가 아닙니다. 값은 공개되어 있으므로 인증이나 위조 방지 기능은 없고, 오직 식별과 메시지 구분 용도입니다. 메시지 무결성은 헤더의 체크섬과 상위 검증 규칙이 담당합니다.
개발자가 매직 값을 직접 다룰 일은 많지 않지만, 패킷 분석 도구로 노드 통신을 살펴보거나 블록 데이터 파일을 직접 파싱할 때는 이 4바이트를 기준으로 메시지와 블록의 경계를 찾습니다. 새 체인을 포크해 만들 때 매직 값을 바꾸지 않으면 원래 체인 노드와 연결이 섞이는 문제가 생깁니다.
블록체인·암호화폐에서는
비트코인에서 갈라져 나온 라이트코인, 비트코인 캐시 등 포크 체인도 각자 고유한 매직 값을 정해 서로의 네트워크와 섞이지 않게 합니다. 이더리움 계열은 같은 목적을 체인 ID와 네트워크 ID, 핸드셰이크 정보로 해결합니다.
이처럼 매직 값은 네트워크를 구분하는 첫 번째 관문일 뿐이며, 노드는 이어서 버전 메시지 교환(핸드셰이크)으로 상대 노드의 프로토콜 버전과 지원 기능을 확인합니다.
쉽게 말하면
무전기 대화를 시작할 때 쓰는 정해진 호출 부호처럼, "지금부터 비트코인 메인넷 메시지가 시작된다"고 알리는 표식입니다.
이 글은 학습을 위한 일반 정보이며 투자 권유나 법률 자문이 아닙니다. 가상자산은 가격 변동이 크고 원금 손실 위험이 있습니다.