为什么只有 80 端口用于 Web 服务?

网络工程 通讯协议
2021-07-23 13:16:03

为什么将多个 TCP/IP 端口专用于 http 是不明智的?虽然诚然天真,但认为可以以某种方式提高服务器性能不是很直观吗?

4个回答

端口 80 是一个众所周知的端口,这意味着它是众所周知的,您通常可以找到 HTTP 服务器的位置。您可以在HTTP/1.1 RFC 中找到它

拥有默认值非常有用,因为您不必将其与 URI 一起输入到 Web 浏览器中。如果您在非标准端口上运行 HTTP 服务器(或实际上是任何服务),您会强制客户端记住您选择并输入的任意 16 位数字。

除了这种不友好之外,没有任何性能优势:端口只是(dst ip:port, src ip:port)唯一标识 TCP 连接4 元组的一部分如果两个连接共享 a dst ip:port,这并不意味着它们共享某些系统资源 - 它们可以驻留在不同的线程或不同的进程中。

现在,如果您有逻辑上不同的服务,它们碰巧都使用 HTTP,那么在不同的端口上运行它们就没有问题它只是让 URI 变得更难看。

服务器不会通过处理一个或多个端口中的连接来浪费资源。分配服务器资源来处理连接,端口号只是将特定程序连接到特定连接的一种方式。

例如:HTTP 服务器知道他将侦听来自端口 80 的连接。服务器知道无论何时他在端口 80 上收到某个请求,他都会将其处理给 http 服务器。之后,http 服务器将处理通信,然后将消耗资源。

您似乎认为端口是真实的;它只是一个 16 位无符号数 (0-65535),它是 IP 数据包标头中的标签。这有助于应用程序级多路复用。当传入的数据包到达网卡时,操作系统会收到通知。它检查传入数据包被定向到哪个端口,然后仅将数据包转发到正确的应用程序。如果您正在运行您的网络服务器 (nginx) 以侦听端口 80,则只有 nginx 将数据包发送到端口 80。

当客户端 (IP: 100.200.100.200) 向服务器 (55.55.55.55) 发出 HTTP 请求时,它们会向服务器上的目标端口 80 (55.55.55.55:80) 发出请求,但源端口是由服务器随机选择的Web 浏览器的操作系统(类似于 45490)。然后来自 Web 服务器的 HTTP 响应来自 (55.55.55.55:80),但发送到目的地(您的 IP)(100.200.100.200:45490)。您计算机的操作系统知道需要将端口 45490(来自 55.55.55.55:80)上的传入数据包提供给发出请求的 Web 浏览器。由于从客户端到网站的每个唯一连接都会获得一个唯一的随机端口,因此您可以将多个 Web 浏览器连接到同一个网站,并且当在一个浏览器中重新加载页面时,其他窗口不会受到影响。

每个 IP 数据包在报头中都有可用的源和目标 IP 地址和端口。操作系统和应用程序(Web 浏览器或 Web 服务器)可以使用两者来确定有关如何处理数据包的适当操作。

端口 80 和 443 是 HTTP/HTTPS 的“默认”端口

这意味着您在使用 Web 浏览器时不必指定端口(http://www.example.com:80https://www.example.com:443)。

如果您想让网络服务器侦听任何其他端口,则用户必须手动将端口添加到 URL,或者必须在指向该特定端口的任何链接中对其进行编码。

此外,大多数代理和防火墙不会允许连接到这些端口,除非专门配置这样做(如果没有配置,传出代理将不会侦听非默认端口,因此不会将请求转发到网络服务器,而防火墙只会阻止非 TCP80/443 连接尝试)

所有这些都限制了可以在 TCP/IP 级别执行的操作

提高性能的一种方法是让负载平衡设备/服务侦听 TCP80/443,然后将请求重定向到不同端口和/或 ip(本地平衡)甚至不同远程站点(全局平衡)上的服务器。但这完全是另一个话题