点对点如何在网络/端口方面实际工作?

Tri*_*isT 6 c++ sockets p2p

所以我一直在研究套接字和其他东西,主要是 C++。我已经学会了(尚未执行,因为我很懒)非阻塞 IO,一旦我真正开始处理我的项目,我可能只有一个非常好的整体结构,服务器可以容纳很多客户端。

对于服务器,它始终是给定的,我必须转发。客户不需要。但这让我开始思考。Torrent 客户端通常似乎不需要路由器端口转发,而且它们是对等的。那么它是如何工作的?在客户端周围多次看到“端口转发”。但那是一种什么样的端口转发呢?

我在这里错过了一些非常明显的东西还是只是问了错误的问题?我似乎无法找到任何答案。

那么点对点的端口转发是如何工作的呢?如果那是正确的事情甚至问。

感谢您的时间!

Tri*_*isT 4

好的,所以支付提到的打洞,这似乎是 NAT 穿越的技术之一,它基本上“绕过”或“穿过”NAT(因此端口转发)。

我现在已经读了一些这方面的内容。基本上,NAT 可以将流量路由到端口开放的网络内的相关特定系统。由于诸如打洞之类的技术不会通过该系统,因此没有真正的方法可以知道它来自内部网络内的哪个系统。人们可以做一些事情,比如使用密钥并加密流量,以便网络中唯一拥有该密钥的特定计算机可以解密它(有点像 CA)。或者,如果它不是敏感信息,您也可以使用随机端口连接到每个不同的系统。一个相当大的问题是,不同路由器的 NAT 可能不同,因此您可能必须使用不同的技术,并且无法保证兼容性。

好的,哈斯塔昆提到了 UPNP。我还读过一篇lil,基本上它是一个协议,允许您的应用程序/程序与路由器进行通信并为自己设置特定的NAT规则,所以它基本上是为您进行端口转发。这也意味着与遍历技术不同,它将流量直接驱动到所需的系统。一个缺点是它在您的路由器上默认情况下可能未激活,因此您根本无法使用它。从我读到的内容来看,它是相当“全局”的,也与遍历不同。

在我看来,你应该将两者都用作保险单,在我看来,这将是一项艰巨的工作,但无论如何,一如既往,懒惰不会有任何结果。

我希望这可以帮助别人,就像它帮助我一样,祝你有美好的一天:D