我知道您可以使用 ssh 将本地或远程端口转发到另一个目的地和端口。例如,假设我有这个命令:
ssh -L *:8443:10.0.0.1:443 [email protected]
因此,这允许在发出命令的机器上打开一个监听套接字(假设它的 ip 是10.0.0.3
)在 port 上8443
。当一些客户端连接到数据包时10.0.0.3:8443
,数据包流通过它们之间建立的 ssh 通道10.0.0.3
,10.0.0.2
然后 ssh 服务器10.0.0.2
将数据包转发到目的地,在这种情况下为 10.0.0.1:443。
我想知道服务器是否10.0.0.2
可以建立永久连接,10.0.0.1:443
以便连接10.0.0.2:xxxxx -> 10.0.0.1:443
打开一次并且永远不会断开。来自连接到的客户端的所有流量10.0.0.3:8443
都应使用此永久通道。
所以基本上我不希望在建立新客户端连接到10.0.0.3:8443
新通道时出现这种10.0.0.2:xxxxx -> 10.0.0.1:443
情况。这可以防止我重用同一个会话并使另一个客户端在第一个客户端之后发送的请求无效。
SSH 无法做到这一点。无论如何,这种通用方法一开始就不是一个好主意。
TCP 是字节流而不是消息协议。这意味着如果多个客户端并行发送消息,则消息可能会混淆。生成的数据可能从客户端 A 的 msgA 的开头开始,从客户端 B 的 msgB 的部分继续,从 msgA 的另一部分继续,等等。
因此,实际上需要一个混合器来代替通用方法,该混合器可以理解所说的特定应用程序协议,并确保保留合并数据流中的消息语法,无论客户端如何发送消息。
请注意,这与 UDP 不同,因为 UDP 是基于消息的。但是您的用例似乎是 TCP。