不应该没有端口转发吗
是的,您可以在没有port-forwarding 的情况下在两台机器之间建立连接。
示例:Web 服务器
以网络服务器为例。默认情况下,Web 服务器坐在那里监听 port 80,其中 80 是 port assigned by convention 的 HTTP。
Web 客户端(浏览器等)通过尝试连接端口 80 来发送请求。如果途中没有障碍物,则连接继续进行。
限制端口访问
但是,可能会有障碍。
一个常见障碍:出于安全原因,面向Unix 的操作系统(BSD、macOS、Solaris、Linux、AIX 等)按照惯例限制对编号低于 1,024 的端口的访问。操作系统会阻止端口 80 上的任何传入连接。有了安全阻止,Web 请求就永远不会到达服务器。
使用包过滤工具进行端口转发
克服此限制的一种方法是让 Web 服务器在不受限制的端口上侦听,该端口编号高于 1,024,最大为 64K 限制,例如 8080。然后在服务器计算机的操作系统上配置 packet filter 工具做端口转发。对端口 80 的传入请求更改为转到端口 8080。
然后在 Web 服务器和 Web 客户端之间建立连接。
- 客户端认为它正在通过端口 80 与服务器通信。
- 服务器认为客户端请求了 8080 端口。
使用中间的数据包过滤工具即时更改数据包,服务器和客户端都不会更明智地处理数据包被更改。
您可能希望将防火墙配置为仅在 80 上允许来自计算机外部的 HTTP 连接,包括阻止对 8080 的任何外部请求。在这种情况下,只有从 80 更改为 8080 的数据包才会到达您的 Web 服务器。通常的做法是关闭服务器上尽可能多的端口。
仅供参考:对于加密的 HTTP (HTTPS),常规端口是 443 而不是 80。
不是编程问题
请注意,这里没有编程问题。作为程序员,您的客户端软件应尝试连接您感兴趣的服务器所记录的端口号。在服务器端机器或服务器端路由器上,将根据需要配置端口转发。您的客户端程序不关心甚至不知道任何可能存在或不存在的端口转发。端口转发是一个network-admin 问题,对程序员应该是透明的。
查看姐妹网站的网络问题
作为网络管理员问题,请查看姐妹网站,例如 Server Fault 和 Network Engineering,而不是 Stack Overflow。