一台linux机器上最多能建立多少个tcp连接?(代码片段)

狱典司 狱典司     2022-11-30     446

关键词:

一台Linux机器上最多能建立多少个TCP连接?

看面经看到有的公司面试会问这个问题,上网搜了搜感觉没有找到特别全面且易懂的答案,遂思考后总结如下,如有纰漏还请指出!

受限制的因素:

  1. 计算机(或虚拟机)能够打开的最大文件个数 file-max,受硬件配置影响;

在通信的每一方(Linux OS)上,每个socket其实都属于一个打开的文件,通过文件描述符fd作为句柄去操作,该限制可以用ulimit -a查看,也可以用cat /proc/sys/fs/file-max查看,open file标识了当前用户下进程默认最多能打开的文件描述符个数,缺省为1024。


可以通过修改配置文件的方式修改该上限值:sudo vi /etc/security/limits.conf
在文件尾部写入以下配置,soft 软限制,hard 硬限制。如下所示:

soft nofile 65536		#这里将软限制改为65536,简单的匹配0~65535端口号per Port per Connnection的情况。
hard nofile 100000
  1. 最大端口数ip_local_port_range

TCP数据包中用于表述端口的字段是16位,最多可以表示2^16也就是65535个端口;

使用sysctl net.ipv4.ip_local_port_rangecat /proc/sys/net/ipv4/ip_local_port_range,一般情形下:linux临时端口号范围是(32768,61000)

  1. ip数量

ip(ipv4)数量的理论最大值,受限于ip的位数 ---- ip长度为32位,那么极限最优条件下(但没有这个可能)单机可以拥有2^32个ip地址,但这样就把世界上所有的ip都用光了。

每个TCP连接由唯一的TCP四元组可以唯一确定,即:(local IP, local Port, remote IP, remote Port)

那么最理想情况下,单机可以承受的最大TCP连接量为:

2^32(local IP) x 2^16(local Port) x 2^32(remote IP) x 2^16(remote Port)

但是就目前的TCP协议来说,显然这是不可能的,首先,不会有一台机器可以占用所有的ip,其次需要考虑机器是否能正常的打开2^16个端口,以及机器是否支持那么多的打开文件,最最最重要的是,机器能否有那么大的内存和CPU资源来维护这些TCP连接。

  1. 内存

因为Linux每维护一条TCP连接都要花费资源。处理连接请求,保活,数据的收发,以及TCP保证可靠传输的各种机制都需要消耗CPU资源,维持TCP连接主要消耗内存。

我们题目的问题是考虑最大多少个连接,所以我们先不考虑数据的收发。

那么TCP在静止的状态下,就不怎么消耗CPU了(先不考虑心跳包保活的问题),主要消耗内存。而Linux上内存是有限的。

一条TCP连接如果不发送数据的话,消耗内存是3.3K左右。

如果有数据发送,需要为每条TCP分配发送缓存区,大小受参数net.ipv4.tcp_wmem配置影响,默认情况下最小是4K

假设你只保持连接不发送数据,那么你服务器可以建立的连接最大数量 = 你的内存/3.3K。 假如是4GB的内存,那么大约可接受的TCP连接数量是100万左右。

对于提供单一服务的具体的服务器来说,不考虑端口复用(unix/linux的SO_REUSEADDR选项)的情况下,例如对于一台Nginx Server,它的IP和端口是固定的。tcp连接4元组中只有remote ip(也就是client ip)和remote port(客户端port)是可变的。它理论上可能建立的最大的连接数是2的32次方(ip数)×2的16次方(port数),大约两百万亿!

Linux上除了监听80以外,还可以监听其它的端口,例如Mysql的3306, Redis的6339,当然条件允许的话所有65535个端口你都可以用来监听一遍。

漫画|一台linux服务器最多能支撑多少个tcp连接?(代码片段)

...很多同学对一个基础问题始终是没有彻底搞明白。那就是一台服务器最大究竟能支持多少个网络连接?我想我有必要单独发一篇文章来好好说一下这个问题。很多同学看到这个问题的第一反应是65535。原因是:“听说端口号最多... 查看详情

zookeeper一台机器上最多能启动多少个zookeeper客户端

1.概述连接数:一台机器上最多能启动多少个ZooKeeper客户端?在zk客户端上可能会运行一个Java开发的零碎去应用zk,比如说Kafka(尽管是Scala写的,也是JVM类的语言),HBase,Canal,HDFS,比如说... 查看详情

最多能创建多少个tcp连接?

我是一个Linux服务器上的进程,名叫小进。老是有人说我最多只能创建65535个TCP连接。我不信这个邪,今天我要亲自去实践一下。我走到操作系统老大的跟前,说:"老操,我要建立一个TCP连接!"老操... 查看详情

最多能创建多少个tcp连接?(代码片段)

我是一个Linux服务器上的进程,名叫小进。老是有人说我最多只能创建65535个TCP连接。我不信这个邪,今天我要亲自去实践一下。我走到操作系统老大的跟前,说:"老操,我要建立一个TCP连接!"老操... 查看详情

最多能创建多少个tcp连接?(代码片段)

我是一个Linux服务器上的进程,名叫小进。老是有人说我最多只能创建65535个TCP连接。我不信这个邪,今天我要亲自去实践一下。我走到操作系统老大的跟前,说:"老操,我要建立一个TCP连接!"老操... 查看详情

一台服务器​最大并发tcp连接数多少?65535?

首先,问题中描述的65535个连接指的是客户端连接数的限制。在tcp应用中,server事先在某个固定端口监听,client主动发起连接,经过三次握手后建立tcp连接。那么对单机,其最大并发tcp连接数是多少呢?如何标识一个TCP连接在确... 查看详情

一台服务器​最大并发tcp连接数多少?65535?

Hollis的新书限时折扣中,一本深入讲解Java基础的干货笔记!首先,问题中描述的65535个连接指的是客户端连接数的限制。在tcp应用中,server事先在某个固定端口监听,client主动发起连接,经过三次握手后建... 查看详情

【tcp】单台服务器并发tcp连接数到底可以有多少?

...数相关的问题,有一个问题曾经困扰我好长时间,那就是一台服务器最多能支持多少链接数呢?有的朋友可能会说是65535,因为操作系统有65535个端口,那么这个答案准确吗?首先先了解下如何标识一个链接(记住下面的概念,... 查看详情

一个tcp连接可以发送多少个http请求?

一、现代浏览器与服务器建立了一个TCP连接后是否会在一个HTTP请求完成后断开?什么情况下会断开?默认情况下建立TCP连接不会端口,只有再请求报头中声明Connection:close才会再请求完成后关闭连接 二、一个TCP连接可以对应... 查看详情

linux系统支持的最大tcp连接是多少?

1.首先,客户端和服务器建立的每个TCP连接都会占用服务器内存,所以最大TCP连接数和内存成正比。简单估算为最大内存除以单TCP连接占用的最小内存2.Linux操作系统中,一切都是文件。所以每个TCP连接,都会打开一个文件。为此... 查看详情

linux下解决高并发socket最大连接数限制,tcp默认1024个连接(代码片段)

...务器系统,当socket运行高并发TCP程序时,通常会出现连接建立到一定个数后不能再建立连接的情况  本人在工作时,测试高并发tcp程序(GPS服务器端程序),多次测试,发现每次连接建立到1000左右时,再也不能建立tcp连接,... 查看详情

查看linux中的tcp连接数

...-an会打印系统当前网络链接状态,而grepESTABLISHED提取出已建立连接的信息。然后wc-l统计。最终返回的数字就是当前所有80端口的已建立连接的总数。查看Apache的并发请求数及其TCP连接状态:TIME_WAIT8947等待足够的时间以确保远程TC... 查看详情

一台服务器最大能支持多少条tcp连接?

一、一台服务器最大能打开的文件数1、限制参数我们知道在Linux中一切皆文件,那么一台服务器最大能打开多少个文件呢?Linux上能打开的最大文件数量受三个参数影响,分别是:fs.file-max(系统级别参数):该参数描述了整个... 查看详情

一个tcp连接上为啥能发起多少个http请求?

...HTTP响应后,会断开TCP链接。但是这样每次请求都会重新建立和断开TCP连接,代价过大。所以虽然标准中没有设定,某些服务器对Connection:keep-alive的Header进行了支持。意思是说,完成这个HTTP请求之后,不要断开HTTP请求使用的TCP连... 查看详情

一个tcp端口最多可以同时连接多少个客户端

...作系统自身也会对打开文件的总数量有限制,这个和当前机器内存环境有关。本回答被提问者和网友采纳 查看详情

一个tcp连接可以发多少个http请求?

...含几十个图片标签,这些图片是以什么方式、什么顺序、建立了多少连接、使用什么协议被下载下来的呢?  要搞懂这个问题,我们需要先解决下面五个问题 查看详情

一台服务器最大能支持多少条tcp连接(代码片段)

一、一台服务器最大能打开的文件数1、限制参数我们知道在Linux中一切皆文件,那么一台服务器最大能打开多少个文件呢?Linux上能打开的最大文件数量受三个参数影响,分别是:fs.file-max(系统级别参数)... 查看详情

一台服务器最大能支持多少条tcp连接(代码片段)

一、一台服务器最大能打开的文件数1、限制参数我们知道在Linux中一切皆文件,那么一台服务器最大能打开多少个文件呢?Linux上能打开的最大文件数量受三个参数影响,分别是:fs.file-max(系统级别参数)... 查看详情