Graben in der Debug-Nachricht: „socket recv flood control disconnect (x bytes) “

Beim Laufen stelle ich folgendes ein bitcoind -debug -server -detachdb -printtodebugger -printtoconsole

Austestungsprotokoll

socket recv flood control disconnect (5018020 bytes)
disconnecting node 82.41.255.68:8333

Frage

Welche Client-Aktionen würden dazu führen, dass dieser Eintrag angezeigt wird?

Welche Einstellungen (Client- oder Serverseite) sind verfügbar, um dies für eine höhere oder niedrigere Kapazität anzupassen?

Welche Nebenwirkungen gibt es bei der Anpassung dieser Kapazität (Semaphore-Lockups, DB-Konflikte usw.)

Antworten (1)

Im Bitcoin-Protokoll wird jeder Nachricht ein Nachrichtenkopf vorangestellt, der unter anderem die Nachrichtenlänge (genauer gesagt die Payload-Länge) enthält. Das Längenfeld ist eine vorzeichenlose Ganzzahl mit einer Länge von 4 Byte (oder 32 Bit). Daher ist es völlig in Ordnung, Payloads der Länge 2^32 Bytes = 4 GB anzugeben.

Da Sie nicht 4 GB herunterladen möchten, nur um herauszufinden, dass es sich um einen Fehler in der Implementierung der anderen Seite handelt oder der Peer versucht, Sie absichtlich mit Junk zu füttern, hat der Mainline-Client eine willkürliche Begrenzung der Größe der akzeptierten Nachrichten hinzugefügt.

Laut net.h liegt diese Grenze bei 5'000'000 Byte oder etwas weniger als 5 Megabyte. Die Nachricht, die den Fehler und die anschließende Trennung verursacht hat, liegt nur geringfügig über dieser Grenze. Vielleicht könntest du nachsehen, welcher Peer oder noch besser welche Client-Version den Fehler verursacht hat, damit wir die Entwickler darüber informieren können.