一台linux服务器最多能支持多少个TCP连接?(要区分客户端还是服务端)

简介: 一台linux服务器最多能支持多少个TCP连接?(要区分客户端还是服务端)

参考大佬文章:

  • [一台机器最多能撑多少个TCP连接? 今天掰扯清楚!

](https://zhuanlan.zhihu.com/p/290651392?utm_oi=33526380494848)

这个问题要分场景,先说下结论:

  • 客户端:最多支持TCP连接数 = IP数 端口数 = IP数 65535,其中的IP数是由于linux下可以配置多IP
  • 服务端:取决于linux服务器的内存大小,内存数 / 静默TCP连接所占大小 3.3k,若linux服务器有4GB的内存,那么最终理论值为:4GB / 3.3k ≈ 127w个 连接。

此外,Socket 实际上是一个文件,也就会对应一个文件描述符。因此,还取决于linux系统对单个进程打开的文件描述符的限制(默认1024),可以通过 ulimit增大文件描述符的数目。

客户端a

对于仅有一个IP的客户端来说,最多能支持的连接数受限于端口 ip_local_port_range参数,一般为65535。但是由于linux环境下是能配置多IP的,所以理论值:最多支持TCP连接数 = IP数 端口数 = IP数 65535

服务端

服务端不同于客户端,最大连接数并不仅仅受限于端口数。否则Nginx服务器只监听了一个80端口,那岂不是最多只能支持一个TCP连接了?显然绝不可能。
一个TCP连接是由一个【四元组:源IP、源端口、目标IP、目标端口】来唯一确定的。

在不考虑地址重用(socket中的 SO_REUSEADDR端口复用选项)的情况下,例如:对只监听80端口Nginx服务器来说,服务器IP和端口是固定的,因此四元组中仅有 客户端IP、客户端端口 是可变的。所以服务端能建立的TCP连接数是:客户端IP数 客户端端口数 = 2³² 2¹⁶

然而linux上不仅仅只能监听80端口,还可以监听其他端口号,比如:MySQL-3306,Redis-6379,一共有2¹⁶=65535个端口,因此服务器理论上最多可以支持的TCP连接数为:客户端IP数 客户端端口数 服务端监听端口数 = 2³² 2¹⁶ 2¹⁶,这个理论上的结果值几乎可以认为是无限大。

其中客户端IP数为何是 2³²
因为32位长度的IPv4地址,共有 2³²个地址,范围是:00000000,00000000,00000000,00000000(十进制表示为0)—— 11111111,11111111,11111111,11111111(十进制表示为2³²-1,4个2⁸ 拼接为2³²)
而端口数默认为65535个,即 2¹⁶ 个

不过理论和实际是有差距的,因为linux每维护一条TCP连接都要消耗资源(处理连接请求、保活、数据收发都需消耗CPU,而维持TCP连接又要消耗内存)。这里我们先不考虑数据的收发,只考虑静止状态下的TCP连接,此状态下对CPU的消耗可以忽略不计,主要考虑内存的影响即可。

一条TCP连接如果不考虑收发数据的话,占用的内存大概是3.3k(如果有数据收发,就需要另外为每条TCP分配发送缓冲区,其大小受参数 net.ipv4.tcp_wmem的配置影响,初始默认为4k。如果收发结束。缓冲区所占的内存才会被回收)。

然而我们linux服务器的内存是有限的,假设只保持连接不收发数据,那么服务器可以建立的最大连接数是:内存数 / 静默TCP连接所占大小 3.3k。假设你的linux服务器有4GB的内存,那么最终理论值为:4GB / 3.3k ≈ 127w条 连接。

所以最终结论:
每一个监听的端口虽然理论值很大,但是这个数字没有实际意义,不现实。服务器最多能支持的TCP连接数最终要取决于linux服务器的内存大小。

目录
相关文章
|
1月前
|
弹性计算 安全 Linux
阿里云服务器ECS安装宝塔Linux面板、安装网站(新手图文教程)
本教程详解如何在阿里云服务器上安装宝塔Linux面板,涵盖ECS服务器手动安装步骤,包括系统准备、远程连接、安装命令执行、端口开放及LNMP环境部署,手把手引导用户快速搭建网站环境。
|
3月前
|
NoSQL IDE MongoDB
Studio 3T 2025.10 (macOS, Linux, Windows) - MongoDB 的终极 GUI、IDE 和 客户端
Studio 3T 2025.10 (macOS, Linux, Windows) - MongoDB 的终极 GUI、IDE 和 客户端
286 21
Studio 3T 2025.10 (macOS, Linux, Windows) - MongoDB 的终极 GUI、IDE 和 客户端
|
3月前
|
Linux 网络安全 数据安全/隐私保护
使用Linux系统的mount命令挂载远程服务器的文件夹。
如此一来,你就完成了一次从你的Linux发车站到远程服务器文件夹的有趣旅行。在这个技术之旅中,你既探索了新地方,也学到了如何桥接不同系统之间的距离。
538 21
|
2月前
|
安全
基于Reactor模式的高性能服务器之Acceptor组件(处理连接)
本节介绍了对底层 Socket 进行封装的设计与实现,通过 `Socket` 类隐藏系统调用细节,提供简洁、安全、可读性强的接口。重点包括 `Socket` 类的核心作用(管理 `sockfd_`)、成员函数的功能(如绑定地址、监听、接受连接等),以及 `Acceptor` 组件的职责:监听连接、接收新客户端连接并分发给上层处理。同时说明了 `Acceptor` 与 `EventLoop` 和 `TcpServer` 的协作关系,并展示了其成员变量和关键函数的工作机制。
70 2
|
2月前
|
Java Linux 网络安全
Linux云端服务器上部署Spring Boot应用的教程。
此流程涉及Linux命令行操作、系统服务管理及网络安全知识,需要管理员权限以进行配置和服务管理。务必在一个测试环境中验证所有步骤,确保一切配置正确无误后,再将应用部署到生产环境中。也可以使用如Ansible、Chef等配置管理工具来自动化部署过程,提升效率和可靠性。
330 13
|
2月前
|
监控 Linux 网络安全
FinalShell SSH工具下载,服务器管理,远程桌面加速软件,支持Windows,macOS,Linux
FinalShell是一款国人开发的多平台SSH客户端工具,支持Windows、Mac OS X和Linux系统。它提供一体化服务器管理功能,支持shell和sftp同屏显示,命令自动提示,操作便捷。软件还具备加速功能,提升访问服务器速度,适合普通用户和专业人士使用。
233 0
|
2月前
|
存储 安全 Linux
Linux服务器上安装配置GitLab的步骤。
按照以上步骤,一个基础的GitLab服务应该运行并可以使用。记得定期检查GitLab官方文档,因为GitLab的安装和配置步骤可能随着新版本而变化。
244 0
|
3月前
|
Java Linux 开发工具
Linux下版本控制器(SVN) -命令行客户端
Linux下版本控制器(SVN) -命令行客户端
84 3
|
4月前
|
存储 安全 Ubuntu
从Linux到Windows:阿里云服务器系统镜像适配场景与选择参考
阿里云为用户提供了丰富多样的服务器操作系统选择,以满足不同场景下的应用需求。目前,云服务器的操作系统镜像主要分为公共镜像、自定义镜像、共享镜像、镜像市场和社区镜像五大类。以下是对这些镜像类型的详细介绍及选择云服务器系统时需要考虑的因素,以供参考。
|
3月前
|
Linux
Linux下版本控制器(SVN) -服务器端环境搭建步骤
Linux下版本控制器(SVN) -服务器端环境搭建步骤
199 0
Linux下版本控制器(SVN) -服务器端环境搭建步骤