
我開始探索使用 p2p 連接與其他設備連接的選項,因此我在 JAVA 中為 android 設備編寫了一個簡單的套接字程序,其中用戶可以在其中共享簡單的消息 p2p (我對 NAT 沒有任何了解)然後)。我了解了 NAT,所以我現在需要與另一個用戶建立 TCP 連接,該用戶使用伺服器進行發現,但有效負載是 p2p 傳輸的。我還查看了 XMPP(關於協議如何運作的非常好的詳細解釋是這裡)和 UPnP 但我不知道如何實現它們。
另一個有趣的問題是 BitTorrent,因為它們可以在任何裝置上運行,甚至可以在 NAT 後面運行。我無法得到任何有關 BitTorrent 工作原理的解釋。
我研究了很多,但我被困住了。
我的問題是:
- BitTorrent的詳細解釋(如這裡,而不是 torrent 如何工作)以及它如何能夠繞過 NAT?
- 有沒有辦法以程式設計方式建立 NAT 條目?
- 套接字程式設計足以用於 p2p 嗎?
- 創建自己的協議有多困難?
- 如果兩個設備D1和D2想要進行p2p通訊並且它們知道彼此的IP。 D1 向 D2 發送請求,該請求無法通過 D2 的 NAT,但在 D1 的 NAT 中應該會建立一個條目。因此,當 D2 嘗試傳送某些內容時,D1 的 NAT 應該發現具有 D2 IP 的條目。那為什麼該資料包不被允許呢?
編輯:
在網路上討論的解決 NAT 問題的方法之一是使用 SIP。這對 Bleep 有效,但我在網路上找不到任何實作。有人可以解釋一下 SIP 的實際運作原理嗎?