透過 NAT 連接 P2P?

透過 NAT 連接 P2P?

我開始探索使用 p2p 連接與其他設備連接的選項,因此我在 JAVA 中為 android 設備編寫了一個簡單的套接字程序,其中用戶可以在其中共享簡單的消息 p2p (我對 NAT 沒有任何了解)然後)。我了解了 NAT,所以我現在需要與另一個用戶建立 TCP 連接,該用戶使用伺服器進行發現,但有效負載是 p2p 傳輸的。我還查看了 XMPP(關於協議如何運作的非常好的詳細解釋是這裡)和 UPnP 但我不知道如何實現它們。

另一個有趣的問題是 BitTorrent,因為它們可以在任何裝置上運行,甚至可以在 NAT 後面運行。我無法得到任何有關 BitTorrent 工作原理的解釋。

我研究了很多,但我被困住了。

我的問題是:

  1. BitTorrent的詳細解釋(如這裡,而不是 torrent 如何工作)以及它如何能夠繞過 NAT?
  2. 有沒有辦法以程式設計方式建立 NAT 條目?
  3. 套接字程式設計足以用於 p2p 嗎?
  4. 創建自己的協議有多困難?
  5. 如果兩個設備D1和D2想要進行p2p通訊並且它們知道彼此的IP。 D1 向 D2 發送請求,該請求無法通過 D2 的 NAT,但在 D1 的 NAT 中應該會建立一個條目。因此,當 D2 嘗試傳送某些內容時,D1 的 NAT 應該發現具有 D2 IP 的條目。那為什麼該資料包不被允許呢?

編輯:

在網路上討論的解決 NAT 問題的方法之一是使用 SIP。這對 Bleep 有效,但我在網路上找不到任何實作。有人可以解釋一下 SIP 的實際運作原理嗎?

相關內容