use*_*398 7 networking port-forwarding node.js
我是一名程序员,试图找出我领域之外的一些东西:
假设我有一台机器,客户端将与它建立 tcp(但不是 http!)连接。我想根据客户端连接到的主机名将客户端重定向到他们自己的端口。例如client1连接client1.myserver.com,连接1234端口,client2.myserver.com -> 1235,client3.myserver.com -> 1236等。
我想动态控制主机 y 的端口 x 如何实际指向我的物理机上的端口 z。
在谷歌搜索此信息时,我看到了对防火墙、代理、反向代理的引用。我真正需要哪种软件?现有软件是否允许按需进行此类更改(我听说防火墙更改需要一天时间)?
如果我想自己编写这样一个层(因为它可能有点特定于应用程序),是否可以在 java 或 node.js 中完成(我的意思是可以使用更高级别的 API 来完成还是我必须开始拆解 ip包)?由于所有主机名都解析为同一台机器,我怎么知道客户端连接到哪个主机名?
我也会感谢指向任何阅读材料的指针。
sys*_*138 11
在 IP 级别,没有主机名这样的东西。主机名是 IP 地址的应用程序级抽象,在 Internet 或传输层它们没有任何意义。
在 HTTP 共享托管中,这个技巧是在处理HTTP会话的过程中抽象出来的,它发生在TCP 会话开始之后。正是因为这个原因,运行 SSL 服务器需要一个专用的 IP 地址,因为 SSL 会话发生在 HTTP 会话之前(此后已在较新的 TLS 版本中修复,其中 HOSTNAME 现在可以作为 SSL 协商的一部分包含在内) )。
对于共享托管 HTTP 实例,协议的协商顺序大致如下:
TCP -> SSL -> HTTP
Run Code Online (Sandbox Code Playgroud)
在完成较早的协议之前,不能启动每个协议。直到最近,只有链中的最后一步知道主机名,这就是为什么要由网络服务器软件来处理主机名与 IP 的多对一关联。
对于动态端口转发,这仅在应用程序协议以某种方式知道主机名时才可行。某些设备(无论是软件还是硬件)处理与客户端的初始 TCP 连接和应用程序协议的第一步(无论是什么),并根据接收到的内容将连接转发到其最终目的地。
所需的确切步骤因应用程序协议本身而异。一些,如 HTTP,包括一个 HOSTNAME 标头,指示客户端希望与之交谈的主机名。其他协议(如某些 Microsoft 协议)利用基于 DNS 的 SRV 记录来确定精确的 IP和端口组合。由于听起来您可能正在从一开始就设计自己的应用程序协议,因此我建议遵循 HTTP 的指导原则,并在您的初始协议协商步骤中包含一个 HOSTNAME 标头。
| 归档时间: |
|
| 查看次数: |
19794 次 |
| 最近记录: |