一台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服务器的内存大小。

目录
相关文章
|
4天前
|
安全 Unix Linux
服务器怎么连接?服务器远程连接图文教程
服务器操作系统可以实现对计算机硬件与软件的直接控制和管理协调,任何计算机的运行离不开操作系统,服务器也一样,服务器操作系统主要分为四大流派:Windows Server、Netware、Unix和Linux。 今天飞飞就给你们分享下常用的Windows、Linux、Unix三种系统的远程连接图文操作方法
10 0
服务器怎么连接?服务器远程连接图文教程
若依修改,若依部署在本地运行时的注意事项,后端连接了服务器,本地的vue.config.js要先改成localhost:端口号与后端匹配,部署的时候再改公网IP:端口号
若依修改,若依部署在本地运行时的注意事项,后端连接了服务器,本地的vue.config.js要先改成localhost:端口号与后端匹配,部署的时候再改公网IP:端口号
|
10天前
|
SQL 自然语言处理 网络协议
【Linux开发实战指南】基于TCP、进程数据结构与SQL数据库:构建在线云词典系统(含注册、登录、查询、历史记录管理功能及源码分享)
TCP(Transmission Control Protocol)连接是互联网上最常用的一种面向连接、可靠的、基于字节流的传输层通信协议。建立TCP连接需要经过著名的“三次握手”过程: 1. SYN(同步序列编号):客户端发送一个SYN包给服务器,并进入SYN_SEND状态,等待服务器确认。 2. SYN-ACK:服务器收到SYN包后,回应一个SYN-ACK(SYN+ACKnowledgment)包,告诉客户端其接收到了请求,并同意建立连接,此时服务器进入SYN_RECV状态。 3. ACK(确认字符):客户端收到服务器的SYN-ACK包后,发送一个ACK包给服务器,确认收到了服务器的确
|
14天前
|
网络协议 安全 Linux
在IntelliJ IDEA中使用固定公网地址远程SSH连接服务器环境进行开发
在IntelliJ IDEA中使用固定公网地址远程SSH连接服务器环境进行开发
21 2
|
18天前
|
网络协议 Linux 网络安全
Linux配置SSH允许TCP转发
Linux配置SSH允许TCP转发
20 1
|
10天前
|
网络协议 Linux
云服务器内部端口占用,9090端口已经存在了,如何关闭,Linux查询端口,查看端口,端口查询,关闭端口写法-netstat -tuln,​fuser -k 3306/tcp​
云服务器内部端口占用,9090端口已经存在了,如何关闭,Linux查询端口,查看端口,端口查询,关闭端口写法-netstat -tuln,​fuser -k 3306/tcp​
|
10天前
|
Linux 网络安全 虚拟化
Ngnix04系统环境准备-上面软件是免费版的,下面是收费版的,他更快的原因使用了epoll模型,查看当前Linux系统版本, uname -a,VMWARE建议使用NAT,PC端电脑必须使用网线连接
Ngnix04系统环境准备-上面软件是免费版的,下面是收费版的,他更快的原因使用了epoll模型,查看当前Linux系统版本, uname -a,VMWARE建议使用NAT,PC端电脑必须使用网线连接
|
10天前
|
大数据 Linux 程序员
软件开发常见流程之服务器+Linux部署项目,会用服务器+Linux部署项目资料
软件开发常见流程之服务器+Linux部署项目,会用服务器+Linux部署项目资料
|
10天前
|
数据安全/隐私保护
xshell通过堡垒机连接服务器和winscp 通过堡垒机传输文件
【7 月更文挑战第 3 天】xshell通过堡垒机连接服务器和winscp 通过堡垒机传输文件
|
11天前
|
负载均衡 Java Linux
黑马头条01,环境搭建,今日头条的介绍,今日头条的功能架构图,技术栈的说明,服务层,nacos(奶靠丝)安装,安装在Linux服务器上环境准备,
黑马头条01,环境搭建,今日头条的介绍,今日头条的功能架构图,技术栈的说明,服务层,nacos(奶靠丝)安装,安装在Linux服务器上环境准备,