我开始探索使用 p2p 连接与其他设备进行连接的选项,因此我为 Android 设备编写了一个简单的 JAVA 套接字程序,用户可以在其中以 p2p 方式共享简单消息(当时我对 NAT 一无所知)。我了解了 NAT,因此现在我需要与另一个用户建立 TCP 连接,该连接使用服务器进行发现,但有效载荷是通过 p2p 传输的。我还研究了 XMPP(关于协议工作原理的一个非常好且详细的解释是这里) 和 UPnP,但我不知道如何实现它们。
另一个有趣的问题是 BitTorrent,因为它们可以在任何设备上运行,甚至在 NAT 之后。我无法得到有关 BitTorrent 如何工作的任何解释。
我进行了很多研究,但仍遇到困难。
我的问题是:
- BitTorrent 的详细解释(如这里,而不是 torrents 的工作方式)以及它如何能够绕过 NAT 工作?
- 有没有办法以编程方式创建 NAT 条目?
- 套接字编程对于 p2p 来说是否足够?
- 创建自己的协议有多难?我该如何构建一个?
- 如果两个设备 D1 和 D2 想要进行 p2p 通信,并且它们彼此知道对方的 IP。D1 向 D2 发送请求,但无法通过 D2 的 NAT,但 D1 的 NAT 中应该会创建一个条目。因此,当 D2 尝试发送某些内容时,D1 的 NAT 应该会发现一个包含 D2 IP 的条目。那么为什么它不允许该数据包呢?
编辑:
网络上讨论的一种绕过 NAT 的方法就是使用 SIP。这种方法对 Bleep 有用,但我在网上找不到任何实现方法。有人能解释一下 SIP 的实际工作原理吗?