目录
贴1
转载自:https://www.cnblogs.com/andywangit/p/15935966.html
1.问题
Linux server同时可以接受多少请求?
2.解答
一台client 有最大只有65536个端口端口0有特殊含义,不能使用,这样可用端口最多只有65535,所以在全部作为client端的情况下,一个client最大tcp连接数为65535。
上面给出的是理论上的client单机最大连接数,在实际环境中,受到机器资源、操作系统等的限制我们认为不会超过4万个。
因为这里所说的4万个TCP的端口,是指源client端口,也就是你访问网站时使用的个人电脑使用的端口,而对于目的端口,也就是网站的端口server端口,使用的TCP端口也就是相同的23端口。这个意思也就意味着,4万个连接都连的是这个网站的23端口,换一个用户又可以用4万个连接连接服务器的23端口。
如果是100万个并发连接,在1个用户4万个访问的情况下,也就是25个并发的用户。
2.1 理论(2的48次方 TCP 并发)
TCP连接四元组是源IP地址、源端口、目的IP地址和目的端口。任意一个元素发生了改变,那么就代表的是一条完全不同的连接了。
服务器一个端口理论可同时接收请求。
Server最大支持接收TCP个数为2的32次方(IP地址是32位的)乘以2的16次方(port是16位的)等于2的48次方 这是两百多万亿的一个大数字。
2.2 实际 (10万+ TCP并发)
事实上,真正影响Server TCP连接数量的是服务器的内存以及允许单一进程同时打开文件的数量,因为每创建一个TCP连接都要创建一个socket句柄,每个socket句柄都占用一部分系统内存,当系统内存被占用殆尽,允许的TCP并发连接数也就到了上限。一般来讲,通过增加服务器内存、修改最大文件描述符个数等,可以做到单台服务器支持10万+的TCP并发。
2.3 什么是句柄?
在 Linux 环境中,任何事物都是用文件来表示,设备是文件,目录是文件,socket 也是文件。用来表示所处理对象的接口和唯一接口就是文件。应用程序在读 / 写一个文件时,首先需要打开这个文件,打开的过程其实质就是在进程与文件之间建立起连接,句柄的作用就是唯一标识此连接。此后对文件的读 / 写时,目标文件就由这个句柄作为代表。最后关闭文件其实就是释放这个句柄的过程,使 得进程与文件之间的连接断开。
在默认情况下,每个进程可以调用的最大句柄数为 1024 个。超过了这个数值,进程则无法获得新的句柄。
2.4 限制条件
每维持一条TCP连接都需要创建一个文件对象,进程每打开一个文件(linux下一切皆文件,包括socket),都会消耗一定的内存资源,一条空的TCP 连接得消耗3KB左右内存。
如果有不怀好心的人启动一个进程来无限的创建和打开新的文件,会让服务器崩溃。
所以linux系统出于安全角度的考虑,在多个位置都限制了可打开的文件描述符的数量,包括系统级、用户级、进程级。具体方法还未研究熟悉。
- 系统级:当前系统可打开的最大数量,通过fs.file-max参数可修改 /proc/sys/fs/file-max;
- 用户级:指定用户可打开的最大数量,修改/etc/security/limits.conf;
- 进程级:单个进程可打开的最大数量,通过fs.nr_open参数可修改 /proc/sys/fs/nr_open。
file-max是内核可分配的最大文件数,nr_open是单个进程可分配的最大文件数,所以在我们使用ulimit或limits.conf来设置时,如果要超过默认的1048576值时需要先增大nr_open值。
limits.conf文件限制着用户可以使用的最大文件数,最大线程,最大内存等资源使用量。
贴2
转载自:https://www.zhihu.com/question/375168439/answer/3475599916
引言:
我们见得最多的面试题:一台PC服务器可以接收多少个链接?今天我们不聊服务器,说下客户端,那么有个问题,一台电脑最多可以开启多少个客户端去连接服务器呢?本文将深入探讨这一问题,并分析实际应用中的限制。
一、端口号类型与理论最大客户端数
- 端口号类型:
- TCP协议中,每个连接由四元组唯一标识,包括源IP地址、源端口号、目的IP地址和目的端口号。
- 端口号分为三种类型:
- 知名端口号(Well-Known Ports):0-1023,这些端口号通常被分配给特定的服务,如HTTP(80)、FTP(21)等。
- 注册端口号(Registered Ports):1024-49151,这些端口号可以由用户或应用程序注册使用。
- 临时端口号(Ephemeral Ports):49152-65535,这些端口号通常由操作系统动态分配给客户端发起的连接。
- 对于客户端来说,理论上可以使用从1024到65535范围内的端口号来建立TCP连接。
- 客户端应用程序在启动时,如果需要发起网络连接但不需要对外提供服务,通常会使用临时端口号。
- 当客户端程序(如Web浏览器、电子邮件客户端、即时通讯软件等)发起一个连接请求时,操作系统会为其自动选择一个尚未被占用的临时端口号。这个端口号用于标识该客户端在本次连接中的身份,以便与服务器进行双向通信。
- 临时端口号的选择通常是动态的,即每次客户端启动一个新的连接请求时,操作系统都会随机分配一个未被使用的临时端口。连接关闭后,该端口会被释放,可以被后续的连接再次使用。
- 理论最大客户端数:
二、实际最大客户端数的限制
- 操作系统限制:
- 操作系统对每个进程可以打开的文件描述符数量有上限。
- 在Linux系统中,可以通过ulimit -n命令查看和修改这个限制。
- 每个TCP连接在底层都会消耗一个文件描述符。
- 如果操作系统的文件描述符限制小于64512,那么实际可以开启的客户端数量将受到文件描述符限制的影响。
- 举例:一个家庭用户使用的电脑,其文件描述符限制可能设置得比较低,如1024,因此实际可以同时开启的客户端数量会受到这个限制。
- 系统资源限制:
- 每个TCP连接都会消耗一定的内存和CPU资源。
- 如果系统资源有限,比如内存不足,将无法启动更多的客户端。
- 因此,客户端启动数还受到系统资源的限制。
- 举例:在多任务操作中,如果电脑的内存占用较高,可能会影响到可以同时开启的客户端数量。
- 网络配置限制:
- 电脑的网络配置,如IP地址、子网掩码、默认网关等,也可能影响可以启动的客户端数量。
- 例如,如果电脑的网络配置限制了只能使用特定的IP地址或端口号,那么实际启动数将受到这些限制的影响。
- 举例:在企业网络环境中,电脑的网络配置可能会限制其只能连接特定的服务器或网络。
三、总结
一台电脑最多可以开启的客户端数量在理论上受到端口号限制和文件描述符限制的影响。然而,在实际应用中,这个数量还会受到操作系统限制、系统资源限制以及网络配置限制等因素的影响。因此,实际启动数通常会远远小于理论值。在实际应用中,基本不会出现一台电脑要开启很多个客户端数量的情况。
贴3
一台电脑的最大端口是65535个
这句话不对,应该是一个IP地址最大端口是65535个(如果0端口也算的话,那就是65536个)
一个网卡可以只配置一个IP地址,也可以配置十个、一百个、一万个、、、、、
一台电脑可以只有一个网卡,也可以有两个网卡、三个网卡、四个网卡、、、、
所以说一台电脑最大的端口号,还是65535个吗?
是否意味着最多能够连接6万多台客户端呢
既然这么说,那说明你是站在服务器的角度来想问题的
服务器上一个端口,是可以接受成千上万个客户端来连接,意思是一个端口就可以支持很多很多的客户端连接。
一般服务器的处理机制是,客户端发来一个网络请求到服务器端口,服务器会把该请求取出来放到队列或者其他数据结构存储,并交给相应的进程或者线程去处理,然后服务器把该端口设置为空闲状态,继续提供服务,接受新的客户端请求。
假如一台PC作为服务器,可以同时连接多少客户端?
能够连接多少台客户端,跟你的端口号其实没多大关系,与你的CPU、内存、还有程序本身才有关系的。
端口与你的问题
如果你的PC作为客户端,并且只有一个网卡,也只配置了一个IP地址,那么在同一时刻,它最多可以发起的网络请求是【65535-X】个(X为知名端口号,大于1024,1024那是很早以前的数字)
当然那是理论值,一般配置的PC,实际能到达2K就很不错了。
贴4
转载自:https://zhidao.baidu.com/question/364538183530607172.html
1、在linux下,一个进程而言最多只能打开1024个文件,所以采用此默认配置最多也就可以并发上千个TCP连接。而通过临时修改:ulimit -n 1000000,就可以达到100万个TCP连接。但是这种临时修改只对当前登录用户目前的使用环境有效,系统重启或用户退出后就会失效。
2、端口限制:操作系统上端口号1024以下是系统保留的,从1024-65535是用户使用的。由于每个TCP连接都要占一个端口号,所以我们最多可以有60000多个并发连接。
3、因此最大tcp连接为客户端ip数×客户端port数,对IPV4,不考虑ip地址分类等因素,最大tcp连接数约为2的32次方(ip数)×2的16次方(port数),也就是server端单机最大tcp连接数约为2的48次方。
4、上面给出的结论都是理论上的单机TCP并发连接数,实际上单机并发连接数肯定要受硬件资源(内存)、网络资源(带宽)的限制,至少对现在可以做到数十万级的并发了。