[英]Does zmq need integrity checks in application layer?
我正在使用 ZMQ 框架構建分布式應用程序,需要確保交換的包的完整性。 我的問題是是否需要在應用層對客戶端和服務器進行完整性檢查。
我在客戶端和服務器端都使用 MD5 hash 實現了校驗和方法。 但是,我懷疑這可能是多余的,因為 zmq 可能已經在后台處理完整性檢查。 我已閱讀ZMQ - 指南並發現關於此事的稀缺信息而不是表明 zmq 已經進行完整性檢查的小參考:
它使用在線路上的簡單框架,完全按照發送時的方式傳遞整個消息。 如果您寫了一條 10k 的消息,您將收到一條 10k 的消息。
我還在包括 SO 在內的論壇中進行了搜索,但找不到任何可以證實該參考的可靠參考。 如果有人可以確認並最好包括一個有用的來源,我將不勝感激。
編輯
我正在尋找“信任文檔”或“實施校驗和”以外的答案,原因有兩個:
我認為需要對似乎是 ZMQ 的關鍵賣點之一的內容進行清晰且易於查找的參考。
正在設計的系統必須很快,這樣就不會在冗余操作上浪費時間。
查看我閱讀的文檔,因為 ZeroMO 的全部目的是可靠傳輸。
我會說這取決於你最擔心的是什么。
ZMQ 建立在 tcp 和其他協議之上,而這些又依賴於 IP、Ethe.net 等底層事物。 當您開始深入到網絡堆棧的這些物理層時,內置完整性檢查可為上面的層提供可靠的服務(包括 ZMQ 等應用程序庫)。 因此,在一般情況下,您不需要進行自己的完整性檢查,因為這已經為您處理好了。 據我所知,ZMQ 沒有做任何額外的事情——它只是假設 underlying.network 堆棧總是正確、完整地傳送字節。
然而,這種底層完整性檢查並不能保證消除所有位錯誤,它們只是將位錯誤率提高到大多數應用程序不關心的某個非常好的水平(例如 10^12 中的 1)並且可能永遠不會遇到問題。 添加補充校驗和將推動 .net 成為 r。 達到更安全的水平。
如果您擔心惡意第三方對 zmtp 協議本身的一些主動攻擊,那么您可能希望引入您自己的完整性檢查,可能本質上是加密的,以及所有需要的東西。 這可能涉及將 libsodium 與 ZeroMQ 一起使用。 那肯定是一件事,而且可能仍然是一件事,除非我已經過時並且錯過了棄用通知。
概括
我會說:
ZeroMQ (ZMQ) 消息傳遞庫不需要在應用層進行完整性檢查。 ZMQ 提供了一組低級通信協議,使應用程序能夠以快速高效的方式相互交換消息。 ZMQ 在應用層不包含任何內置的完整性檢查機制,例如糾錯或校驗和計算。
然而,這並不意味着構建在 ZMQ 之上的應用程序不需要完整性檢查。 根據應用程序的具體要求和目標,可能需要在應用程序層實施完整性檢查,以確保所交換數據的正確性和可靠性。 例如,應用程序可能希望包括校驗和計算或糾錯機制,以便檢測和糾正傳輸數據中的錯誤。
一般來說,在 ZMQ 之上構建的應用程序中包含完整性檢查的決定將取決於應用程序的特定要求和目標,以及性能、可靠性和復雜性之間的權衡。 由應用程序的開發人員決定是否需要進行完整性檢查,並實施適當的機制來確保所交換數據的完整性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.