我开始尝试使用p2p连接与其他人建立联系,因此我在JAVA上编写了一个简单的套接字程序,以便Android设备的用户可以共享简单的p2p消息(当时我对NAT一无所知)。后来我了解到了NAT,现在我需要与另一个使用服务器进行发现的用户建立TCP连接,但有效负载是通过p2p传输的。我还看过XMPP(关于协议如何工作的非常好且详细的解释在这里),以及UPnP,但我不知道如何实现它们。
另一个有趣的问题是BitTorrent,因为它们可以在任何设备上甚至在NAT背后工作。我找不到关于BitTorrent如何工作的任何解释。
我已经做了很多研究,但我被卡住了。
我的问题是:
- 一个详细的BitTorrent解释(像这里一样,不是关于怎么下载种子的)以及它如何能够绕过NAT?
- 是否有办法通过编程方式创建一个NAT条目?
- 套接字编程对于p2p是否足够?
- 创建自己的协议有多困难,我该如何构建一个协议?
- 如果两个设备D1和D2想要进行p2p通信并且它们知道彼此的IP,则D1向D2发送请求但无法穿过D2的NAT,但应该在D1的NAT中创建一个条目。那么当D2尝试发送一些东西时,D1的NAT应该发现一个带有D2 IP的条目。为什么它不允许数据包通过?