2017-02-03 3 views
3

Есть ли у Apache Thrift какие-либо встроенные проверки целостности данных? Гарантирует ли это, что данные всегда остаются неизменными? Я отправляю большое количество двоичных данных по сервису Thrift, и я не уверен, что мне нужно выполнить любую дополнительную проверку целостности, например контрольную сумму MD5.Обеспечивает ли Apache Thrift целостность данных?

+0

Thrift построен поверх обычных сетевых уровней (TCP), который имеет такой контроль. Чтобы сказать правду, иногда я реализую CRC на уровне «моего уровня», но мотивация - ловить логические ошибки. –

+0

"* Thrift строит поверх обычных сетевых слоев *" - Thrift не ограничивается TCP. Некоторые люди используют его с системами шины сообщений или сериализуют дату в файлы. Вероятно, правильный вопрос в этом вопросе, но не как общее утверждение. – JensG

ответ

2

Нет, нет такой вещи, как встроенное обнаружение ошибок. Эта задача предоставляется разработчику и/или другим частям стека связи.

Первый вопрос, который задал бы вопрос, был бы простым CRC32, или если вам нужны более сильные инструменты, например, некоторые SHA. Верхний конец, вероятно, будет полноценной криптографической инфраструктурой для подписи сообщений и проверки подлинности с помощью асимметричных ключей.

Для каждого из этих случаев использования имеются хорошие библиотеки. Как правильно указали другие, если транспорт зависит от TCP и, возможно, даже от TLS/SSL, который один может быть достаточным. Просто не нужно снова изобретать это колесо. И, как указано выше, если действительно необходимо, задача может быть легко делегирована specialized, custom transport implementation как «многоуровневый транспорт», как это делает TFramedTransport.

2

Уровни Apache Thrift: explained here. Это разумное предположение, что ошибки могут произойти только в транспортном слое. Если вы используете транспортные интерфейсы TCP или HTTP (который основан на TCP), данные будут передаваться без изменений, так как это TCP works.

Примечание: Я предполагаю, что вас не беспокоит безопасность вашего канала связи. Если вы это сделаете, ни TCP, ни контрольные суммы не будут защищать вас от изменения вредоносных данных. В такой ситуации вам нужен безопасный коммуникационный туннель, такой как SSL/TLS. См.: Thrift/SSL.

+0

«* данные будут переданы без изменений *», если вы не столкнетесь с атакой MITM. Затем данные по-прежнему остаются неизменными в терминах TCP, однако конечный результат может все еще быть не таким, каким вы хотите. Только один пример, когда предположения могут нарушаться. – JensG

+0

@JensG Хорошая точка. * Только один пример, когда предположения могут нарушаться. * Есть ли другие? – cubuspl42

+0

Если мы подумаем достаточно долго, мы придумаем некоторые из них. ;-) – JensG

Смежные вопросы