В Bitcoin Core MAX_SIZE
максимальный допустимый размер полезной нагрузки сообщения P2P определяется как 32 МБ. Реально ли, что одноранговый узел отправляет полезную нагрузку сообщения, близкую к 32 МБ? Каков максимальный, но все же реалистичный размер полезной нагрузки сообщения?
Поскольку запрос на вытягивание Bitcoin Core 5843 , входящие сообщения, размер которых превышает MAX_PROTOCOL_MESSAGE_LENGTH, отклоняются. Эта константа изначально была установлена на 2 МБ, но позже (в рамках изменений segwit) была увеличена до 4 МБ.
Его цель — защита памяти от DoS. Злоумышленник, которому удается открыть много соединений с узлом-жертвой, может, например, начать отправлять сообщения размером 32 МБ (MAX_SIZE для всех сериализованных объектов), но никогда не отправлять последний байт. Эти сообщения размером чуть менее 32 МБ должны храниться в памяти до тех пор, пока не прибудет последний байт, прежде чем их обрабатывать. Ограничение максимального допустимого размера сообщения значительно снижает воздействие такой атаки.
Антуан Пуансо
mempool
сообщение может быть близко к этому, когда-peerbloomfilters
установлено, но оно ограничено,MAX_INV_SZ
поэтому этого не будет. С нетерпением жду ответа!0xb10c
mempool
сообщение (запрашивающее неподтвержденные транзакции) не имеет полезной нагрузки. Узел должен отвечать INV наmempool
сообщение. См. также: developer.bitcoin.org/reference/p2p_networking.html#mempool . Результирующий INV может иметь до 50_000 записей по 4+32 байта каждая. 36 байт * 50_000 = 1,8 МБ.Антуан Пуансо
mempool
.Эндрю Чоу