如何从未知服务器连接到客户机上开放的 tcp 端口?

How to connect to an open tcp port on client machine from an unknown server?

我已经阅读了很多关于不同 NAT 穿越技术的文章,但我仍然不太清楚它是如何工作的。

如果我在客户端计算机上打开一个 TCP 端口并将请求发送到任意不存在的服务器(不会响应),我的客户端 NAT 现在将有一个开放通道,对吗?如果我知道客户端的 public 和私有 IP 以及端口号,我可以使用另一台具有不同 IP 地址的(未知)计算机访问该客户端端口吗?

或者我的 NAT 会检查我的服务器数据包的来源并阻止它,因为它与来自客户端机器的原始请求不是来自同一个 IP 地址吗?

提前致谢!

要回答您的问题,您需要了解一些 NAT 的映射和过滤行为。首先让我说明一下有关 NAT 映射行为的信息,

如果您从内部 IP:port 通过 NAT IP:port 向任何地址发送数据包,那么您的 NAT 会在您的内部和它的 IP:port 之间创建一个 MAP。否则,您的 NAT 之外的任何人都无法向您发送任何信息。

有4种NAT,

Full-cone NAT: 如果您之前通过 NAT IP:port 从内部 IP:port 发送数据包,那么任何外部主机都可以发送数据包通过向您的 NAT IP:port.

发送一个数据包到您的内部 IP:port

地址受限的锥形 NAT: 外部主机可以通过将数据包发送到您的 NAT IP:port 来将数据包发送到您的内部 IP:port 只有当来自您的内部时IP:port 之前至少有一个数据包已通过您的 NAT IP:port 发送到该外部主机的 IP 地址。在这里,外部主机的端口无关紧要。只有 IP 地址必须相同。

Port restricted cone NAT: 与地址限制相同,只是这次主机的端口很重要。至少之前从您的内部 IP:Port 通过您的 NAT IP:Port 发送到外部主机 IP:Port 的数据包将允许该外部主机通过您的 IP:port 向您发送数据包NAT 就是 IP:port。

对称 NAT: 它的映射行为与其他的略有不同。对于前 3 种类型的 NAT,从你的内部 IP:port 无论你将数据发送到哪里,它都会通过相同的 NAT IP:Port。但是对于不同目的地的对称 NAT,您的数据将通过 NAT 的相同 IP 但端口不同。和端口限制锥一样,如果数据先前发送到外部主机的 IP:port.

,则传入数据包将被允许通过 NAT

因此,对于您的情况,只有当您的 NAT 是全锥 NAT 时,而不是某个知道您的 NAT 的未知用户,您从中向未知服务器发送数据包的 public IP:port 才能向您发送数据通过 UDP 传输。对于其他 NAT,它将被阻止,因为您没有向该外部主机发送任何数据。但是对于您的 TCP 连接,没有人可以向您发送任何数据,即使他们知道您的私有和 public IP:Port 因为它们位于不同的 NAT 之后。阅读此 .

中的详细信息

阅读有关 wiki 的详细信息。