有人提出了疑问:linux的TCP连接数量最大不能超过65535个吗,那服务器是如何应对百万千万的并发的?
这是理解是有误的。65535这个最大值指的是你作为客户端去连别人,而你作为服务器,别人来连你,理论上是没有限制的。注意,仅仅理论上。
65535是怎么来的?是TCP协议规定的端口字段的最大范围,2个字节,16比特,每一比特有0和1两种状态,按照排列组合,2的16次方,一共就是65536,端口0预留不用,就是65535。
说完客户端再说服务端。服务端一般都监听某一个端口,比如80的web端口,比如22的ssh端口,比如3306的mysql端口,都是在被动等待别人来连,所以没有限制。
你如果真要算最大值也能算。TCP连接的唯一性靠四元组,源目的IP,源目的端口,假设服务端只有一个IP,开了一个端口,相当于把两个固定了,另两个的范围一个是0.0.0.0-255.255.255.255,一个是0-65535,一乘就是最大连接数。其实按照比特数最好算,2的32次方乘上个2的16次方,作为服务端最大连接数就是2的48次方。有意义吗?没有意义!
前面为什么又说是理论上无限制呢,因为最大的限制不在TCP连接数上,而在硬件上,主要是CPU和内存,一个连接占几k内存。一个市面上现在普通的物理服务器,最大也就十几万并发连接吧。题主所述服务器如何应对百万千万的并发,现在没什么好办法,其实就是堆服务器,一台十万,十台百万,百台千万……我们给这一堆服务器一个高大上的名字“集群”。
关注微信公众号获取更多VSCode编程信息,定时发布干货文章
全部评论