12

场景如下。我有两台机器 A 和 B:A:客户端(在 NAT 之后)B:服务器(在 NAT 之后)

我希望 B 能够侦听任何给定端口,以便 A 可以通过该特定 TCP 端口向 B 发送数据包并接收任何响应。如果两台机器都不在 NAT 后面,那么这是非常直接的过程。但是,我如何使它工作,以便即使 B 在路由器后面也能工作,而无需他去更改路由器配置,启用一些端口转发等......

例如,在用户无需配置任何东西的情况下,像 torrent 客户端这样的点对点程序如何工作?

4

4 回答 4

8

回答点对点程序的例子,一般来说:有一种称为通用即插即用的技术,NAT 路由器可以使用它来允许它们后面的客户端向外部公开端口。这就是 bittorrent 客户端可以使用的,因此其他客户端可以直接连接到它们。

于 2009-10-02T20:19:28.303 回答
1

您将不得不:

  1. 设置从服务器前面的 nat 网关到您的服务器软件正在运行的机器的端口转发,并让客户端连接到该网关的 IP 地址。

  2. 在 2 个 nat 网关之间创建一个代理服务器,以便您的服务器和客户端都可以连接到它。您的服务器和客户端都必须建立与该代理的连接,该代理将调解这两个连接之间的数据。

于 2009-10-02T20:15:27.203 回答
1

代理服务器的替代方案是匹配服务器。匹配器不是代理所有流量,而是进行协商,直到对等方可以相互交谈。这涉及找到对等方的外部公共 IP 并与每个人交谈,以便防火墙/路由器知道对等方希望进行通信。

这称为打孔,通常必须由媒人而不是同伴自己来完成。但是,一旦打孔,媒人就可以告诉同伴彼此,他们可以直接交流。

于 2009-10-02T20:25:26.513 回答
1

对于 UDP 通信,打孔技术已经被很好地理解,但它也可以可靠地用于建立对等 TCP 流。这是关于 TCP 和 UDP 的详细文章:

http://www.brynosaurus.com/pub/net/p2pnat/

于 2015-11-25T04:45:54.657 回答