可以在 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 服务器吗?的主要内容,如果未能解决你的问题,请参考以下文章