我们的系统管理员说
“Apache 在每个连接上使用一个 TCP 端口”
因此一台服务器可以同时服务 65534 (MAX)。对吗?
我认为 Apache 仅使用 80 或 443。但是,他使用了许多文件描述符(而不是端口)不是吗?
/sbin/sysctl -a | grep fs.file-max
fs.file-max = 123456789
我认为是最大值您能给我一些有关它的信息吗?
答案1
我认为您的系统管理员对于端口和文件描述符的具体含义有些困惑。
每个服务器有 65536 个端口,编号0
为65535
。程序可以听在端口上监听来自客户端的请求并进行相应的处理。在任何给定时间,只有一个程序可以监听一个端口。在这方面,端口是一种有限的资源 - 虽然大多数端口的使用率极低。
当客户端连接到服务器时,会为代表套接字的连接创建一个文件描述符。您可以像其他普通文件一样读取和写入此套接字。可用的文件描述符数量非常多,但通常对文件描述符的数量有限制一个特定的应用可以使用。
另外,值得注意的是,Apache 可以配置为同时监听多个端口。
答案2
TCP 流由 4 个数字唯一标识:
- 主机 A 的 IP 号码
- 主机 A 上的端口号
- 主机 B 的 IP 地址
- 主机 B 上的端口号
请注意,客户端也使用端口号,这有助于保持流分离。
典型情况是,服务器具有已知(通过 DNS)IP 地址和已知端口号,然后每个客户端具有不同的 IP 号,客户端使用的端口号是半随机选择的。这样,单个服务器就可以连接到许多不同的客户端,并且单个客户端可以与同一服务器的同一端口建立多个连接,只需在客户端使用不同的端口即可。