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

Posted

技术标签:

【中文标题】可以在 TCP 打孔后打开的端口上托管 HTTP/HTTPS 服务器吗?【英文标题】:Can a HTTP/HTTPS server be hosted on the port which was opened after TCP hole punching? 【发布时间】:2021-01-21 16:15:26 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

在这种情况下,一旦在 2 个对等点之间建立连接,“对等点 2”可以通过已建立的 tcp 连接向“对等点1”发送手动 http 请求,“对等点 1”处理 http 请求并向“peer 2”发送手动 http 响应?这可能吗? @MukeshKumar:一旦建立了 TCP 连接,就可以通过它发送任何东西,包括 HTTP 请求和响应。但是普通的 Web 服务器无法通过已建立的连接工作,因此需要一个特殊的 Web 服务器或一些“中继”,通过读取请求、将其发送到真正的 Web 服务器并读取响应,然后发送回复远程客户端。

以上是关于可以在 TCP 打孔后打开的端口上托管 HTTP/HTTPS 服务器吗?的主要内容,如果未能解决你的问题,请参考以下文章

TCP打孔,不能在android上重用地址

在具有 80 端口的 IIS 上托管 2 个网站 1,在 Xampp 8081 端口上托管 1 个网站

在 http 上打孔

在端口 80 上托管多个网站

在 IP 和端口上托管节点服务器

Delphi:TCP 打孔