HTTP/HTTPS 服务器可以托管在 TCP 打洞后打开的端口上吗?

Can a HTTP/HTTPS server be hosted on the port which was opened after TCP hole punching?

让我们考虑客户端 A 在 NAT A 后面,客户端 B 在 NAT B 后面的场景。发生 TCP 打洞,在双方打开一个端口进行通信。客户端 A 可以在开放端口上托管 http/https 服务器吗?

TCP 打洞仅适用于可以建立的特定 TCP 连接,因为 a) 双方都以某种方式知道对等方的源端口 up-front 和 b) 同时开始与对等方的 TCP 握手时间。只有这样才能建立一个 NAT 状态,它也只对这个特定的连接有效(源 IP、端口和目标 IP、端口)。

外部客户端不会匹配现有的 NAT 状态,因为源 IP、端口与现有状态不匹配。也不会因为有一些 Web 服务器列表而从内部创建新状态。因此,虽然 Web 服务器可以托管在 NAT 后面,但无法从 NAT 外部访问它。