use*_*988 35 networking p2p bittorrent network-protocols nat
我开始探索使用p2p连接与其他连接的选项,所以我在JAVA中为Android设备编写了一个简单的套接字程序,其中用户可以共享简单的消息p2p(我当时对NAT没有任何想法).我了解了NAT,所以我现在需要与另一个用户建立TCP连接,该用户使用服务器进行发现,但有效载荷是p2p传输的.我也看了一下XMPP(协议如何工作的一个很好的和详细的说明是这里)和UPnP,但我不知道如何实现它们.
另一个有趣的问题是BitTorrent,因为它们可以在任何设备上工作,甚至可以在NAT后面工作.我无法解释BitTorrent的工作原理.
我研究了很多,但我被卡住了.
我的问题是:
the*_*472 20
另一个有趣的问题是BitTorrent,因为它们可以在任何设备上工作,甚至可以在NAT后面工作.我无法解释BitTorrent的工作原理.
这个陈述看起来像你认为bittorrent需要完全连接才能运行.
那是不对的.
在NAT设备后面,您仍然可以建立传出的 TCP连接.只要网络中有其他非NAT(或NAT但正确端口转发)的客户端可以接受传入的连接,这对于bittorrent来说通常就足够了.
NAT对数据的流向没有影响,因为一旦建立连接就是双向的.它只对初始连接设置有问题.
这对于bittorrent来说非常好,因为bittorent并不关心从哪个特定节点获取数据.虽然更好的连接通常可以提高性能.
如果节点的身份很重要或一对一传输是一个重要的用例,那么其他p2p协议通常首先尝试NAT遍历,如果失败则依赖于第三方节点在那些无法直接相互连接的节点之间中继流量.
此外,IPv6支持将成为维持端到端连接的必要条件,因为越来越多的ISP开始为IPv4 推出运营级NAT,而IPv6将保持非NAT
有一点需要明确的是,现在所有类型的NAT之间100%的P2P是不可能的.在**对称和对称/ PRC NAT之间建立P2P连接没有实用的方法.在此方案中,通过名为TURN的中继服务器建立连接.
我正在回答你的第二个问题,因为我对第一个问题知之甚少.
2)是的.您可以通过NAT发送数据包,并且内部IP:端口与NAT的外部IP:端口之间将存在映射.您可以通过发送眩晕请求来了解这些外部IP:端口.请注意,此技术不适用于对称NAT.
3)是套接字编程足以满足p2p.
4)为什么在已存在多个协议时需要协议.ICE协议是NAT遍历的最佳选择,我不认为它很容易创建.UPnP和NAT-PMP在安全性方面确实很脆弱.
5)我认为发生的事情通常是NAT阻止来自它的未知数据包.因此,当D1向D2发送数据包时,其NAT会阻止从D1s IP:Port传入的所有数据包.这就是连接建立失败的原因.您必须为D1和D2采用打孔技术才能成功建立P2P连接.
**通过对称NAT,我指的是具有随机端口分配的对称NAT.
| 归档时间: |
|
| 查看次数: |
19434 次 |
| 最近记录: |