直接连接!我们一直都这样做 我们可以确保的一切 Fog Creek Copilot可以连接任何 网络情况,无论如何 防火墙或NAT已到位。至 让双方都做到这一点 到我们服务器的出站连接, 代表他们转发流量。 嗯,在很多情况下,事实并非如此 必要。所以2.0版就可以了 一些相当聪明的东西:它成立了 通过我们的初始连接 服务器,所以你连接正确 100%可靠性。但是之后 一旦你全部连接起来,它就会安静地 在后台,寻找一种方法 直接连接。如果不能, 没什么大不了的:你只是继续传递 通过我们的服务器如果你可以做一个 它是直接的点对点连接 默默地将数据转移到 直接连接。你不会注意到 除了,可能,更快的任何事情 通信。
他们如何将服务器连接更改为P2P连接?
答案 0 :(得分:9)
这非常棘手且有趣。我确定我有一些细节错误,但概述是这样的:
程序已经可以通过Joel的服务器相互通信,因此他们可以互相交换信息和Joel的服务器。此外,Joel拥有外部IP地址,并提供有关其内部IP地址的joel信息。
他们决定尝试这种打孔技术。计算机A使用B的外部IP地址启动与计算机B的TCP连接。它不会通过,但它的作用是告诉A的路由器它需要允许来自给定端口上的B的传入数据包。
计算机B执行相同的操作,但是它的消息传递到A,因为A的路由器打开了一个与B发送的端口/ ip组合匹配的端口(这里发生了一些端口魔法 - 这是非常重要的,但可行)。 / p>
B的路由器记得B在给定端口和IP上发起了与A的连接,因此A的数据包现在也正好通过路由器流入B.
所以它实际上非常简单,但实现有详细信息,特别是关于如何为新的TCP连接提供端口,以及NAT路由器通常如何处理TCP请求以及它们如何映射到外部端口。这些细节很有趣,也很困难。
- 亚当
答案 1 :(得分:1)
有一种名为“Hole Punching”的技术适用于“锥形”NAT(Cone是路由器的技术家族)。这不是一种100%肯定的技术,今天,它在UDP的大约80%的路由器上运行良好。
答案 2 :(得分:1)
我认为简单的版本是他们删除服务器连接并用P2P连接替换它。
有些事情:
如果建立了此连接: