linux的TCP连接数量最大不能超过65535个吗,那服务器是如何应对百万千万的并发的?

瓦力数码评测

你这个提问中有一些逻辑的错误,我来一一给你解释一下。

第一个错误的地方是,TCP连接数量和Linux没有关系。不管是Windows还是Linux,只要使用TCP/IP,那么单个IP地址连接相同互联网服务的TCP连接数,就不会超过65535个,甚至在一般情况下,我们认为不会超过4万个(注意,这里指相同互联网服务,即相同目的地址和端口)。

这个原因是因为,TCP/IP中,一个TCP连接,就要耗费源IP地址一个TCP端口,而TCP的端口数量也就是65535个,因为协议规定了TCP端口的长度也就是16位(二进制),所以换成十进制也就是1~65535.

这也就意味着,如果你的电脑要访问一个网站,那么你的电脑只能和这个网站建立65535个连接,一个连接消耗一个TCP端口。当然这是理想的情况,实际的情况是,有很多端口被一些知名的协议占据了,或者做了预留,例如80端口就属于HTTP的,所以一般认为能使用的端口就是4万个左右。

第二个错误是,TCP的端口数量和服务器没有关系。因为这里所说的4万个TCP的端口,是指源端口,也就是你访问网站时使用的个人电脑使用的端口,而对于目的端口,也就是网站的端口,使用的TCP端口也就是相同的23端口。这个意思也就意味着,4万个连接都连的是这个网站的23端口,换一个用户又可以用4万个连接连接服务器的23端口。

所以我们可以粗略估算一下,如果是100万个并发连接,在1个用户4万个访问的情况下,也就是25个并发的用户。当然,实际使用时,你的PC机不会有4万个连接访问相同的网站,假设我们按照一个PC机4个连接访问网站计算,100万个并发也就是25万个用户访问。

最后回答一下你的问题,服务器如何撑住百万千万个TCP连接呢?这个和服务器的资源有关。实际上单个服务器支持的TCP连接数的确是有限的,单个服务器所支持的TCP连接不可能到达理论值,服务连接一多,CPU撑不住内存也顶不住,所以每个服务器都有规格限制,硬件性能越强,服务器支持的TCP连接数越大。

但是一个网站可以有多个服务器啊,可以有集群服务器啊,服务器的规模越大,支持的访问能力就越强,所以这个也不是问题。

比如阿里巴巴是如何撑过双11的?阿里云在北上广深等很多地方都有服务器,而且每个地方的服务器都是弹性集群,这些服务器实时同步保障淘宝上的数据一致。所以双11访问淘宝时,有的访问的是北京的服务器,有的访问的是上海的服务器,这样通过分布式服务分布式的存储,网站可以应对的并发自然就很大了。

其他网友对linux的TCP连接数量最大不能超过65535个吗,那服务器是如何应对百万千万的并发的?的观点:

首先,问题中描述的65535个连接指的是客户端连接数的限制。

在tcp应用中,server事先在某个固定端口监听,client主动发起连接,经过三路握手后建立tcp连接。那么对单机,其最大并发tcp连接数是多少呢?

如何标识一个TCP连接

在确定最大连接数之前,先来看看系统如何标识一个tcp连接。系统用一个4四元组来唯一标识一个TCP连接:{localip, localport,remoteip,remoteport}。

client最大tcp连接数

client每次发起tcp连接请求时,除非绑定端口,通常会让系统选取一个空闲的本地端口(local port),该端口是独占的,不能和其他tcp连接共享。tcp端口的数据类型是unsigned short,因此本地端口个数最大只有65536,端口0有特殊含义,不能使用,这样可用端口最多只有65535,所以在全部作为client端的情况下,一个client最大tcp连接数为65535,这些连接可以连到不同的serverip。

server最大tcp连接数

server通常固定在某个本地端口上监听,等待client的连接请求。不考虑地址重用(unix的SO_REUSEADDR选项)的情况下,即使server端有多个ip,本地监听端口也是独占的,因此server端tcp连接4元组中只有remoteip(也就是clientip)和remote port(客户端port)是可变的,因此最大tcp连接为客户端ip数×客户端port数,对IPV4,不考虑ip地址分类等因素,最大tcp连接数约为2的32次方(ip数)×2的16次方(port数),也就是server端单机最大tcp连接数约为2的48次方。

实际的tcp连接数

上面给出的是理论上的单机最大连接数,在实际环境中,受到机器资源、操作系统等的限制,特别是sever端,其最大并发tcp连接数远不能达到理论上限。在unix/linux下限制连接数的主要因素是内存和允许的文件描述符个数(每个tcp连接都要占用一定内存,每个socket就是一个文件描述符),另外1024以下的端口通常为保留端口。

所以,对server端,通过增加内存、修改最大文件描述符个数等参数,单机最大并发TCP连接数超过10万,甚至上百万是没问题的。

免责声明:本文来自焦雅辉,不代表浮光掠影知识网 - 专注有价值知识的生活内容平台的观点和立场,如有侵权请联系本平台处理。

相关阅读

发表评论

表情:
评论列表 (暂无评论,1908人围观)

还没有评论,来说两句吧...

取消
微信二维码
微信二维码
支付宝二维码