我正在通过 IRC 制作一个简单的文件传输程序,当我阅读时,我看到 IRC 在共享文件时创建了独立于服务器的两个用户之间的直接连接(DCC,直接客户端连接)。搜索了一段时间后,我发现了这个:Direct Connect和Advanced Direct Connect。
这些页面都没有回答这个我无法摆脱的问题:如果没有任何用户进行特殊的端口转发,P2P 数据传输是否可行? 允许使用帮助建立连接的中间服务器(如 IRC 示例中所示)。数据传输本身必须独立于服务器。
我正在通过 IRC 制作一个简单的文件传输程序,当我阅读时,我看到 IRC 在共享文件时创建了独立于服务器的两个用户之间的直接连接(DCC,直接客户端连接)。搜索了一段时间后,我发现了这个:Direct Connect和Advanced Direct Connect。
这些页面都没有回答这个我无法摆脱的问题:如果没有任何用户进行特殊的端口转发,P2P 数据传输是否可行? 允许使用帮助建立连接的中间服务器(如 IRC 示例中所示)。数据传输本身必须独立于服务器。
是的 - 如果您可以让外部服务器为您转发连接请求,则可以使用所谓的打孔技术来建立直接连接。这篇技术论文有更详细的解释。
请注意,这些不一定适用于所有NAT - 但它们确实适用于其中很多。
Practical JXTA II(可在 Scribd 上阅读)有一章解释执行 NAT 遍历的技术。打孔是执行 NAT 遍历的技术子集。