做性能测试的同学问单个服务器的最大连接数,很多人会回答65535,因为最多65535个端口,一个连接必须占用一个端口号,所以答案是65535。真相是什么?
在tcp应用中,服务器提前处于固定端口监控,客户端主动发起连接,三次握手后建立tcp连接。单台计算机的最大并发tcp连接数是多少?
如何识别一个TCP连接
在确定最大连接数之前,让我们看看系统是如何识别tcp连接的。系统用一个4元组来唯一标识一个TCP连接:{localip,localport,remoteip,remoteport}。
客户端最大tcp连接
每次客户端发起一个tcp连接请求,通常会要求系统选择一个空空闲的本地端口,这个端口是独占的,不能与其他tcp连接共享。tcp端口的数据类型是无符号短,所以本地端口的最大数量只有65536,端口0有特殊含义,不能使用,所以可用端口的最大数量只有65535。因此,当所有客户端都用作客户端时,一个客户端中的最大tcp连接数是65535,并且这些连接可以连接到不同的服务器IP。
服务器最大tcp连接数
服务器通常监听本地端口并等待来自客户端的连接请求。不考虑地址复用(unix的SO_REUSEADDR选项),即使服务器端有多个ip,本地监听端口也是独占的,所以只有服务器端tcp连接的4元组中的remoteip(即clientip)和remote端口(client port)是可变的。因此,最大tcp连接数是客户端ip数×客户端端口号。对于ipV4,最大tcp连接约为2的32次方(IP号)×2的16次方(端口号),即单台服务器最大tcp连接约为2的48次方。
实际tcp连接
上面给出的是单台机器的理论最大连接数。在实际环境中,它受到机器资源和操作系统的限制,尤其是在服务器端,那里并发tcp连接的最大数量远远低于理论上限。在unix/linux下限制连接数的主要因素是内存和允许的文件描述符数量(每个tcp连接占用一定的内存,每个套接字是一个文件描述符)。此外,低于1024的端口通常是保留端口。
在服务器端,通过增加内存、修改文件描述符的最大数量等参数,单台机器上并发TCP连接的最大数量超过10万甚至上百万是没有问题的
相关linux参数的调整
Sysctl -w fs.file-max=10485760 #系统允许的文件描述符数量为10m
sysctl-Wnet . IP v4 . tcp _ rmem = 1024 #每个TCP连接1k读取缓冲区,一个连接1k读取缓冲区
sysctl-Wnet . IP v4 . tcp _ wmem = 1024 #每个TCP连接的写缓冲区1k#修改默认本地端口范围
sysctl-w net . IP v4 . IP _ local _ port _ range = ' 1024 65535 '
sysctl-w net . IP v4 . TCP _ tw _ recycle = 1 #快速回收时间_等待连接
sysctl-w net . IP v4 . TCP _ tw _ reuse = 1
sysctl-Wnet . IP v4 . TCP _ timestamp = 1 #用户单个进程中的最大文件数,在用户登录时生效
echo '* soft nofile 1048576 ' >>。/etc/security/limits.conf
echo '* hard nofile 1048576 ' >>。/etc/security/limits.conf
Ulimit -n 1048576 #每个用户单个进程的最大文件数当前会话生效
1.《65535 单机最大并发tcp连接数是65535?原来我们都错了!》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。
2.《65535 单机最大并发tcp连接数是65535?原来我们都错了!》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/junshi/1635800.html