直接点对点连接

6

这个话题类似于这个帖子

我对网络编程的主题还比较新,除了在单个本地机器上进行基本的TCP/UDP之外,从未做过其他任何事情。现在我正在开发一个需要P2P网络支持的应用程序。更具体地说,我需要应用程序在没有服务器进行客户端匹配的情况下通过互联网连接和通信。

我知道并且假设几乎所有用户都在路由器后面,这使得这个过程变得复杂,因为两个客户端都无法初始化对另一个客户端的直接连接。

我知道UPnP是一种选项,可以允许端口转发而不需要用户手动配置,但目前这不是一个选项。有没有办法实现我的目标,或者我需要那个服务器?

5个回答

6
您需要一个服务器来交换IP地址等信息。正如其他帖子所指出的那样,保证连接的唯一方法是通过代理服务器。大多数点对点系统使用UPnP和NAT穿透(此方法需要服务器中继端口信息,并且仅适用于UDP)在大多数情况下建立连接。
NAT穿透通过两个客户端与服务器建立连接,然后尝试直接连接对方中继到的端口来工作。大多数UDP NAT会短暂地记住IP地址和端口,因此,即使数据没有到达另一端(UDP无关紧要),另一个客户端也会在几秒钟后尝试连接到该端口,因为NAT会期望回复。

您提到IPv6避免了NAT的问题,这是否意味着如果我使用该地址格式,我可以避免NAT阻止直接连接的所有麻烦? - Kasper Holdum
需要两端都具备完全可路由的IPv6地址。 - ewanm89

6

3

是的。它使用对等命名解析和IPV6。 - codekaizen
IPv6 基本上不使用 NAT,因为有足够大的地址空间。但是大多数互联网服务提供商尚未支持它。消费者 NAT 需要更新固件,以便知道如何仅桥接 IPv6 连接。 - ewanm89
没错,但是通过Teredo和IPV6隧道,你不需要担心网络支持的问题。 - codekaizen
WCF Peer通道会利用Windows PNRP和Peer Networking来为您处理这些事情。它非常强大且相当简单,您可以轻松获取一个WCF Peer通道的演示/示例并自行尝试。 - codekaizen
IPv6隧道并非在所有情况下都可行,而我们的目标是尽量减少用户配置,而不是增加它。 - ewanm89
显示剩余2条评论

2

除了UPnP(不幸的是,它仅适用于某些路由器)和没有中央服务器,当两个用户都在NAT后面时,我不确定是否可能创建直接连接。


我知道NET打洞/穿透技术,但它需要一个服务器。 - Kasper Holdum
我第一次阅读您的帖子时错过了那个链接。如果没有中央服务器(来协助协商连接),我不认为这是可能的。 - Kitsune
2
我们生活在一个悲哀的世界里,两台计算机不能直接连接而需要特殊配置的硬件或中间人来帮助它们。 - Kasper Holdum
IPv6会帮助很多,它应该会使UDP技巧变得更容易,同时仍然提供相同的安全性。 - Kitsune

1

为了避免服务器进行“匹配”,您可以像Skype一样设置一些对等方作为中继,以便连接到NAT后面的其他人。您始终需要某种引导机制,因此集中式服务器可能会在您的系统中发挥作用(当然,这取决于您正在开发什么)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接