Saltar al contenido
buybitcoinsmart

Glosario / Nodos y software

Bytes mágicos de red

También se conoce como Magic bytes o Start string.

¿Qué son los bytes mágicos de red?
Los bytes mágicos de red son el prefijo de cuatro bytes que abre cada mensaje de la red de bitcoin, e indican en qué red está el remitente antes de que se lea nada más.

Cuatro bytes impiden que las redes paralelas de bitcoin hablen entre sí por accidente. La mainnet usa f9beb4d9 y la regtest usa fabfb5da, y un nodo que lee un valor inesperado descarta el mensaje y, por lo general, también la conexión. La comprobación detecta errores de configuración, no atacantes, porque cualquiera puede enviar los cuatro bytes correctos.

Cómo funciona

Los bytes mágicos ocupan los bytes cero a tres de un mensaje y se comprueban antes de que el nodo reserve memoria para cualquier cosa que venga después.

Bitcoin Core lleva escrito en el código un valor por cadena. El de la mainnet es 0xf9beb4d9. El de la testnet3, 0x0b110907. El de la testnet4, añadida junto con BIP94 en Bitcoin Core 28.0, es 0x1c163f28. El de la regtest, 0xfabfb5da. La signet es el caso interesante: en lugar de una constante, sus cuatro bytes se derivan calculando el hash del script de desafío que define quién puede firmar los bloques de esa signet, así que la signet pública predeterminada y una privada que se ponga en marcha para hacer pruebas se niegan automáticamente a hablar entre sí.

Los valores no se eligieron para que quedaran bonitos. Son secuencias de bytes que difícilmente aparecen en los datos corrientes de un flujo, así que un cliente que lee un flujo TCP dañado o desincronizado puede avanzar buscando hasta volver a encontrar el patrón y reanudar desde ese punto en lugar de descartarlo todo.

Los mismos cuatro bytes se escriben en el disco. Dentro de los archivos blk00000.dat que contienen los bloques en bruto, cada bloque almacenado va precedido de los bytes mágicos de su red y de una longitud de cuatro bytes. Esa delimitación es lo que permite a un nodo recorrer un archivo de bloques que no terminó de escribir, localizar el límite entre registros y descartar solo la cola truncada en lugar del archivo entero.

Dónde aparece

Los bytes mágicos aparecen siempre que se inspecciona el tráfico de bitcoin en lugar de simplemente usarlo.

Abra una captura de paquetes en el puerto 8333 y cada trama de la conversación empezará por f9 be b4 d9. Los analizadores de protocolos se basan precisamente en esa firma para etiquetar el tráfico. Todos los proyectos que bifurcaron el código cambiaron los cuatro bytes como uno de sus primeros actos, y por eso las bifurcaciones no pueden conectarse entre sí aunque sus negociaciones iniciales (handshakes) sean por lo demás idénticas.

Para un usuario corriente aparecen una sola vez, en forma de silencio poco útil. Conecte una billetera configurada para la testnet a un nodo de la mainnet y no obtendrá ningún error, ningún aviso de rechazo, ninguna conexión: el nodo lee cuatro bytes que no reconoce, descarta el mensaje y acaba desconectando al par. Confirmar que ambos extremos están en la misma red es lo primero que hay que comprobar cuando un nodo y una billetera se niegan a verse.

Bytes mágicos de red frente a encabezado de mensaje

Los bytes mágicos de red son un campo; el encabezado de mensaje es el conjunto de los cuatro. Un encabezado de mensaje ocupa 24 bytes, formados por los bytes mágicos, luego un nombre de comando de doce bytes en ASCII, luego la longitud de la carga útil, de cuatro bytes, y luego una suma de comprobación de cuatro bytes. Los bytes mágicos responden a qué red, el comando a qué tipo de mensaje y la longitud a cuánto más hay que leer. La gente usa los dos nombres indistintamente cuando se refiere al encabezado de mensaje, lo que se vuelve francamente confuso en cuanto se cuentan desplazamientos de bytes en un volcado hexadecimal.

No confundir con

Preguntas frecuentes

¿Cuáles son los bytes mágicos de red de bitcoin?

La mainnet usa 0xf9beb4d9, la testnet3 usa 0x0b110907, la testnet4 usa 0x1c163f28 y la regtest usa 0xfabfb5da. La signet no tiene un valor fijo: sus cuatro bytes se derivan de un hash del script de desafío que define quién puede firmar los bloques de esa signet.

¿Por qué mi billetera falla en silencio al conectarse a mi nodo?

A menudo, porque los dos están en redes distintas. Un nodo que lee unos bytes mágicos de red inesperados descarta el mensaje sin enviar ningún error, así que una billetera de la testnet conectada a un nodo de la mainnet produce silencio en lugar de una advertencia.

Términos relacionados

Más en la sección Nodos y software

Leer esta página en inglés