目录
????????首先知道一个基础概念,对于一个 TCP 连接可以使用四元组(src_ip, src_port, dst_ip, dst_port)进行唯一标识。因为服务端 IP 和 Port 是固定的(如下图中的bind阶段),那么一个TCP服务器支持最多的连接数就是由客户端 IP 和 端口决定的了。
????????端口数在 TCP 传输协议中占两个字节,所以一共有 2 ^ 16 = 65535 个端口(未减去保留端口,假设数量为 m)。
????????IP 在 IP 网络协议中占四个字节,所以有 2 ^ 32 个网络地址(未减去广播地址、多播地址和私有地址,假设他们数量之和为 n)。
????????所有理论上 TCP 服务器支持 ( 2 ^ 32 - n ) * ( 2 ^ 16 - m )条连接,简单计算一下,理论上支持的 TCP 连接数是以亿为量级的。
? ? ? ? 下图是 TCP 服务器与客户端的交互过程。
????????实际使用中,TCP 服务器支持的最大连接数受服务端内存和文件描述符的约束。
(1)一条处于 ESTABLISH 状态的 TCP 连接占用的大小是 3.44 KB,数据来源文末参考链接。
(2)服务器内每个 TCP 连接就是一个文件描述符,受如下 linux 系统参数的限制。
????????系统级:当前系统可打开的最大数量,通过? cat /proc/sys/fs/file-max?查看;
????????用户级:指定用户可打开的最大数量,通过? cat /etc/security/limits.conf?查看;
????????进程级:单个进程可打开的最大数量,通过?cat /proc/sys/fs/nr_open?查看;