Glossar / Nodes und Software
Start-String
Auch bekannt als Network Magic.
- Was ist der Start-String?
- Der Start-String ist das Vier-Byte-Präfix am Anfang jeder Nachricht des Bitcoin-Netzwerks und benennt das Netzwerk des Senders, bevor irgendetwas anderes gelesen wird.
Vier Bytes verhindern, dass die parallelen Netzwerke von Bitcoin versehentlich miteinander sprechen. Mainnet nutzt f9beb4d9 und Regtest nutzt fabfb5da, und ein Node, der einen unerwarteten Wert liest, verwirft die Nachricht und meist auch die Verbindung dazu. Die Prüfung erkennt Fehlkonfigurationen statt Angreifer, denn jeder kann die korrekten vier Bytes senden.
So funktioniert es
Der Start-String belegt die Bytes null bis drei einer Nachricht und wird geprüft, bevor der Node Speicher für irgendetwas zuweist, das danach folgt.
Bitcoin Core schreibt einen Wert je Chain fest in den Code. Mainnet ist 0xf9beb4d9. Testnet3 ist 0x0b110907. Testnet4, zusammen mit BIP94 in Bitcoin Core 28.0 hinzugefügt, ist 0x1c163f28. Regtest ist 0xfabfb5da. Signet ist der interessante Fall: Statt einer Konstante werden seine vier Bytes durch das Hashen des Challenge-Skripts abgeleitet, das festlegt, wer die Blöcke dieses Signets signieren darf, sodass das öffentliche Standard-Signet und ein privates, das Sie zum Testen aufsetzen, sich automatisch weigern, miteinander zu sprechen.
Die Werte wurden nicht ausgewählt, um hübsch auszusehen. Es sind Bytefolgen, die in gewöhnlichen Stream-Daten kaum vorkommen, sodass ein Client, der einen beschädigten oder desynchronisierten TCP-Stream liest, vorwärts suchen kann, bis er das Muster wiederfindet, und von dort aus fortsetzen kann, statt alles zu verwerfen.
Dieselben vier Bytes werden auf die Festplatte geschrieben. In den Dateien blk00000.dat, die Rohblöcke enthalten, ist jedem gespeicherten Block der Start-String seines Netzwerks und eine vier Byte lange Längenangabe vorangestellt. Diese Rahmung ermöglicht es einem Node, eine Blockdatei zu durchlaufen, die er nicht fertig geschrieben hat, die Grenze zwischen den Datensätzen zu finden und nur den abgeschnittenen Rest statt der ganzen Datei zu verwerfen.
Wo er auftaucht
Der Start-String erscheint immer dann, wenn Bitcoin-Datenverkehr geprüft und nicht einfach nur genutzt wird.
Öffnen Sie einen Paketmitschnitt an Port 8333, und jeder Frame der Unterhaltung beginnt mit f9 be b4 d9. Protokollanalysatoren richten sich genau nach dieser Signatur, um den Verkehr zu kennzeichnen. Jedes Projekt, das die Codebasis geforkt hat, änderte die vier Bytes als eine seiner ersten Handlungen, weshalb Forks sich nicht gegenseitig verbinden können, obwohl ihre Handshakes ansonsten identisch sind.
Für einen gewöhnlichen Nutzer zeigt er sich einmal, als wenig hilfreiches Schweigen. Richten Sie eine Wallet, die für Testnet konfiguriert ist, auf einen Mainnet-Node, erhalten Sie keinen Fehler, keine Ablehnungsmeldung, keine Verbindung: Der Node liest vier Bytes, die er nicht erkennt, verwirft die Nachricht und trennt schließlich den Peer. Zu bestätigen, dass beide Seiten im selben Netzwerk sind, ist das Erste, was zu prüfen ist, wenn ein Node und eine Wallet sich nicht sehen wollen.
Start-String vs. Nachrichten-Header
Der Start-String ist ein Feld; der Nachrichten-Header umfasst alle vier. Ein Header besteht aus 24 Bytes: dem Start-String, dann einem zwölf Byte langen Befehlsnamen in ASCII, dann einer vier Byte langen Nutzlastlänge und dann einer vier Byte langen Prüfsumme. Der Start-String beantwortet, welches Netzwerk, der Befehl beantwortet, welche Art von Nachricht, die Länge beantwortet, wie viel mehr zu lesen ist. Die beiden Namen werden oft synonym verwendet, wenn der Header gemeint ist, was genau dann aktiv verwirrend wird, wenn Sie Byte-Offsets in einem Hex-Dump zählen.