Каков максимальный реалистичный размер полезной нагрузки сообщения P2P?

В Bitcoin Core MAX_SIZEмаксимальный допустимый размер полезной нагрузки сообщения P2P определяется как 32 МБ. Реально ли, что одноранговый узел отправляет полезную нагрузку сообщения, близкую к 32 МБ? Каков максимальный, но все же реалистичный размер полезной нагрузки сообщения?

Интересный вопрос. Я подумал, может быть, mempoolсообщение может быть близко к этому, когда -peerbloomfiltersустановлено, но оно ограничено, MAX_INV_SZпоэтому этого не будет. С нетерпением жду ответа!
Насколько мне известно, mempoolсообщение (запрашивающее неподтвержденные транзакции) не имеет полезной нагрузки. Узел должен отвечать INV на mempoolсообщение. См. также: developer.bitcoin.org/reference/p2p_networking.html#mempool . Результирующий INV может иметь до 50_000 записей по 4+32 байта каждая. 36 байт * 50_000 = 1,8 МБ.
Да, я имел в виду размер INV, возвращаемый при отправке сообщения mempool.
Я наблюдал, как узел 0.5.0 пытался отправить сообщение размером, по-моему, 6 МБ. IIRC это было сообщение заголовков, и это была значительная часть блокчейна. Также есть более низкий максимум 4 МБ, см. MAX_PROTOCOL_MESSAGE_LENGTH.

Ответы (1)

Поскольку запрос на вытягивание Bitcoin Core 5843 , входящие сообщения, размер которых превышает MAX_PROTOCOL_MESSAGE_LENGTH, отклоняются. Эта константа изначально была установлена ​​на 2 МБ, но позже (в рамках изменений segwit) была увеличена до 4 МБ.

Его цель — защита памяти от DoS. Злоумышленник, которому удается открыть много соединений с узлом-жертвой, может, например, начать отправлять сообщения размером 32 МБ (MAX_SIZE для всех сериализованных объектов), но никогда не отправлять последний байт. Эти сообщения размером чуть менее 32 МБ должны храниться в памяти до тех пор, пока не прибудет последний байт, прежде чем их обрабатывать. Ограничение максимального допустимого размера сообщения значительно снижает воздействие такой атаки.