Linux服务器的最大并发数是多少?这个问题抛开硬件的性能问题,需要我们去通过操纵系统的原理层面去分析,才能得出正确的结论。
从ip地址到端口号再到TCP/IP原理,这些常识需要你具备。
连接的最大值只是在理论层面上。
服务器最大并发数分析
在服务器连接中,需要双方的ip地址、端口号和协议号,见下图。
这样的话,就可以基本认为:理论最大并发数 = 服务端唯一五元组数。
3.2 端口&IP组合数
那么对于服务器来说,服务端唯一五元组数最大是多少呢?
有人说是65535,显然不是,但是之所以会有这类答案是因为当前Linux的端口号是2字节大小的short类型,总计2^16个端口,除去一些系统占用的端口,可用端口确实只剩下64000多了。
对于服务端本身来说,DestPort数量确实有限,假定有多张网卡,每个网卡绑定多个IP,服务端的Port端口数和IP数的组合类型也是有限的。
对于客户端来说,本身的端口和IP也是一样有限的,虽然这是个组合问题,但是数量还是有限的:
3.3 并发数理论极限
看了前面的端口&IP的组合数计算,好像并发数并不会特别大。
错了,是真的会很大。
分析一下,前面的计算都是针对单个服务器或者客户端的,但是实际上每个服务器会应对全网的所有客户端,那么从服务端看,源IP和源Port的数量是非常大的。
理论上服务端可以接受的客户端IP是2^32(按照IPv4计算),端口数是2^16,目前端口号仍然是16bit的,所有这个理论最大值是2^48,果然很大!
4. 客户端最大连接数
理解了服务器的最大并发数是2^48,那么客户端最多可以连接多少服务器呢?
对于客户端来说,当然可以借助于多网卡多IP来增加连接能力,我们仍然假定客户端只有1张网卡1个IP,由于端口数的限制到2^16,再去掉系统占用的端口,剩下可用的差不多64000。
也就是说,客户端虽然可以连接任意的目的IP和目的端口,但是客户端自身端口是有限的,所以客户端的理论最大连接数是2^16,含系统占用端口。