爲什麼Kademlia Distributed Hash Table使用UDP作爲其網絡傳輸協議,即使它不可靠?爲什麼Kademlia使用UDP?
回答
主要原因是您快速查詢您從未與之建立過聯繫的許多節點,並且在查找過程中可能再也不會再查看。
Kademlia查找是迭代的,即請求不會被轉發。轉發DHT將更適合長期的TCP連接。
I.e.很大一部分流量包含一個網絡節點之間的短暫交換請求和響應,潛在的成本可能在幾百萬。快速建立數以千計的TCP連接的開銷將是令人望而卻步的。
爲什麼選擇UDP?因爲它是簡單,有效和低成本的協議。它不保證包裹的交付,也不需要建立一個持續的連接。所有這些功能使得UDP適合於向多個收件人快速傳送數據。這就是你所需要的P2P應用程序。
Сitation從Kademlia網絡的設計規格:
的Kademlia的設計師們似乎並沒有考慮使用IPv6地址或TCP/IP而不是UDP或具有多個IP地址的Kademlia的節點的可能性。
我必須承認,我沒有使用過這種產品,但研究它讓我覺得我可以回答這個問題。
它似乎是一個最終一致的系統。它也似乎是一個高性能系統。鑑於此,udp會起作用。沒有像tcp那樣的握手,所以它很快。還有一個更正機制,以便處理來自協議的可能的破壞。
我們的Kademlia(OpenKad)版本可以使用TCP或UDP。
Kademlia是一種高級路由協議,因此與兩種傳輸級協議的工作原理相同。 Kademlia部署中的查找時間並不是那麼好,因爲失敗的數據包丟失和超時。所以表現不是最好的答案。
我知道這可能會引起很多爭議,但UDP並非專門設計爲不可靠,它只是缺乏使其可靠的功能。從更高層面來看,前瞻性(如套接字編程)UDP和TCP的外觀和感覺非常相似,但實際上沒有可比性。 TCP旨在處理大多數與運輸相關的問題,其中UDP僅附加端口標頭並對底層IP數據包進行檢查,而這幾乎是作爲協議的全部範圍。
當然,您可以構建和擴展兩種協議。擴展UDP通常是而不是是正確的解決方案,因爲TCP通常可以處理網絡中需要的所有功能,但少數例外情況之一是TCP連接模型太有限。在p2p網絡中就是這種情況,因爲TCP旨在基本上模擬兩個端點之間的專用一對一管道,其中p2p連接通常具有更全面的性質。爲了長話短說,在這一點上,您要麼以任何方式「重建車輪」,要麼通過向UDP添加「可靠性」,要麼通過創建全部到所有TCP實現。爲了回答你的問題(爲什麼UDP在Kademlia)我不認爲規範實際解釋了爲什麼要UDP(或不使用TCP),因此我不認爲有一個權威的答案,但我的猜測是,作者認爲,構建到UDP將增加更多的靈活性,而不是試圖將TCP拉向專門沒有設計的方向。換句話說,添加到實際上幾乎沒有任何形式的特徵VS工作和/或拉伸另一特徵的庫中。
- 1. 爲什麼NFS默認使用UDP?
- 2. 爲什麼UDP沒有「accept()」?
- 3. 爲什麼我使用Asynchronous UDP client socket隨機接收UDP套接字答案?
- 4. 爲什麼android udp-socket使用socket.recieve()方法丟失數據包?
- 5. 使用UDP的巨大延遲。爲什麼?
- 6. 爲什麼UDT使用SOCK_STREAM(如果它基於UDP)?
- 7. 爲什麼RTP使用UDP而不是TCP?
- 8. 爲什麼facebook在memcached中使用TCP for SET和UDP for GET
- 9. 爲什麼UDP重寫數據包
- 10. 爲什麼UDP沒有標誌?
- 11. 爲什麼vxlan over udp但不是ip
- 12. 爲什麼我的UDP廣播失敗?
- 13. udp(4)和udp(6)有什麼區別?
- 14. 爲什麼在UDP無連接時UDP發送需要超時?
- 15. 向Kademlia添加新節點,構建Kademlia路由表
- 16. 爲什麼使用UDP套接字時不需要listen()函數調用?
- 17. 爲什麼我的網絡TCP/UDP實現不起作用?
- 18. 爲什麼我的Android的UDP消息不起作用?
- 19. 爲什麼UDP打孔不能用於公共IP地址?
- 20. Kademlia在Java中的實現
- 21. UDP爲什麼在其數據包中有兩次「UDP Length」字段?
- 22. 爲什麼這個python UDP套接字重置爲'None'?
- 23. 爲什麼在使用jmf流時,它是UDP,而不是Wireshark中的RTP?
- 24. 爲什麼不使用UDP進行視頻點播會導致串擾?
- 25. 爲什麼t-sql允許我違反使用UDP的檢查約束?
- 26. 什麼是常見的UDP使用情況?
- 27. Unix域套接字,Udp套接字Objective C使用什麼?
- 28. 在NIO中使用UDP有什麼意義?
- 29. 什麼時候應該考慮使用TCP或UDP?
- 30. Kerberos - 什麼是SPN,爲什麼使用