高并发100问-服务端和客户端最大支持多少tcp连接?

TCP连接由本地IP+本地端口+远端IP+远端端口组成,服务端最大TCP连接数受限于这些因素。在忽略CPU和内存的情况下,一个web应用理论上能建立大量连接,超过百万。客户端连接同一服务端,受限于本地端口数量,通常为6w多个。注意,实际值可能因Linux配置和文件描述符限制而变化。
摘要由CSDN通过智能技术生成

1、基础概念

tcp四元组

所谓tcp连接是由一个四元组组成,如下所示:

本地ip地址+本地端口+远端ip地址+远端端口

一个设备不管是服务端还是客户端,所支持的最大tcp连接数,如果不考虑cpu及内存消耗,只和这四个因素有关;

单tcp连接占用内存

https://blog.csdn.net/sinat_41832255/article/details/80048580

请参考如上连接描述,这里不再过多描述;

 

2、服务端支持最大多少tcp连接?

在不考虑服务端cpu和内存消耗情况下,一个服务端web程序,不论是netty、tomcat、jetty、undertow,还是其他语言其他框架的web应用,

其首先在四元组中有两个确定参数,即:本地主机ip+本地主机监听端口,

变化本分为:客户端ip地址,有多少个客户端就有多少个端口,因此这里可以理解为很大;

第二个参数是客户端发起端口,通常linux默认情况下单ip支持的端口是65536个,除去前1024个端口外,其他均可以作为客户端发起端口,因此这里的个数是6w以上;

总结下来:一个web应用,监听某个端口,在不考虑内存、cpu及linux文件数目限制的前提,其可以建立的web连接是可以很大的,具体大于多少?肯定大于百万,甚至千万。

 

3、客户端连接同一服务端web应用最大支持多少个tcp连接?

上两节已经提到,tcp连接是一个四元组,对于连接同一个服务端 的web,其远端ip及远端端口已经固定,唯一的变量是本地ip和本地端口,

通常情况下由于本地ip也是固定的,因此唯一的变量成为发起连接的端口号,由于一个ip linux最多支持65536个端口,其中前1024个端口保留,剩下来了6w多个端口,

也就是说,如果客户端连接最多支持向统一服务端web应用的统一端口建立6w多个连接。

当然这里也有几个注意事项:

  • 客户端连接同一服务端web应用的相同监听端口最大支持6w多个端口,这里的前提是linux调整tcp连接参数,默认情况下这个分配范围并不是1024-65536,这个值需要修改;
  • 客户端如果可以在发起连接的时候改变本地ip地址,每增加一个ip,其最大连接能力也因此增加6w多个,这里有许多做法,比如配置多网卡、配置子接口等等,请查看其他资料;
  • 微服务化日益流行的当下,通常使用nginx做反向代理,将请求hash到不同服务端,对于需要支持百万连接的服务,如果只有一个nginx不配置多个ip或者开启相关配置(这里nginx是否支持向同一服务端口以不同ip发起连接,本人并没有研究,有待确认),最多也就是支持像一个服务同时连接6w多个tcp连接;

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值