怎麼驗證客戶端下載或者上傳的文件沒有問題

問題描述

我認爲這其實是個分佈式網絡 中 如何 保證 數據傳輸完整性的問題。現在開發的web 服務大多是使用http上傳或者下載文件,當然也有支持 ftp 服務器的,只不過較少。但不管使用方式,都是應用層的協議吧。那問題來了,如何在應用層保證數據傳輸的完整性呢?我們知道數據鏈路層 可以使用循環冗餘(CRC)檢驗 數據的完整性,應用層是不是可以使用類似的方式呢?

舉個簡單的應用場景來說明問題:用戶上傳或者下載文件。
在這裏插入圖片描述
一般文件的數據包比較大,那怎麼保證數據傳輸沒有問題呢。數據鏈路層的冗餘校驗可以保證在網絡設備中傳遞數據的完整性,也就是在客戶端的網卡和服務端的網卡之間傳遞的數據的絕大部分情況是完整性。哪什麼什麼情況會導致數據不完整?我認爲有兩種情況,
(1)丟包(Packet loss)是指一個或多個數據數據包(packet)的數據無法透過網上到達目的地。丟包與比特錯誤(bit error)與噪聲(noise)所造成的虛假的數據包(spurious packets)是三個最主要的數字通信錯誤的原因。 丟包可能原因是多方面,包括在網上中由於多路徑衰落(multi-path fading)所造成的信號衰減(signal degradation),或是因爲通道阻塞造成的丟包(packet drop),再者損壞的數據包(corrupted packets)被拒絕通過,或有缺陷的網上硬件,網上驅動程序故障都可能造成丟包。此外,丟包也受信號的信噪比(SNR)的影響。
(2)網絡波動,就是Flipping,一般在廣域網纔會提到,是由於線路的不穩定,出現時通時斷或瞬斷的現象。造成路由協議頻繁進行計算,而這種變化要達到整個網絡的路由統一,即達到路由收斂是需要一定時間的,在此期間路由選擇是不準確的,造成網絡傳輸受到影響,如果這種變化比較頻繁,造成整個網絡的較長時間的不穩定,就叫做網絡波動;這個問題對整個網絡的穩定是非常有害的,嚴重的時候會造成整個網絡的癱瘓,尤其是在大型廣域網絡中,Flipping是會經常出現、不可避免的,這就需要路由協議對這種現象較好地處理,網絡設計和調試人員,在設計和設備配置時,也可以採用多種技術,避免這種現象出現,提高網絡的容錯能力。

我們之前使用阿里雲的時候,就遇到過這種情況。

怎麼解決問題

遇到過這種情應該是在應用層使用類似數據鏈路層的方式—校驗。先看下目前比較成熟的方式

開源軟件的下載:
tomcat使用pgp 和sha512摘要算法來驗證文件的完整性。
在這裏插入圖片描述centos 也使用pgp 算法。
在這裏插入圖片描述按照這個思路上面的應用場景,應該按照如下方式修改下。
在這裏插入圖片描述也就是數據的發送端要提供摘要給數據的接收端,數據接收端再根據預定的摘要算法來驗證接收的數據是否完整。只不過着這個過程要做成自動化的,不應該由用戶手動計算。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章