对于服务端本身来说,DestPort数量确实有限,假定有多张网卡,每个网卡绑定多个IP,服务端的Port端口数和IP数的组合类型也是有限的 。
对于客户端来说,本身的端口和IP也是一样有限的,虽然这是个组合问题,但是数量还是有限的:
文章插图
3.3 并发数理论极限看了前面的端口&IP的组合数计算,好像并发数并不会特别大 。
错了,是真的会很大 。
分析一下,前面的计算都是针对单个服务器或者客户端的,但是实际上每个服务器会应对全网的所有客户端,那么从服务端看,源IP和源Port的数量是非常大的 。
理论上服务端可以接受的客户端IP是2^32(按照IPv4计算),端口数是2^16,目前端口号仍然是16bit的,所有这个理论最大值是2^48,果然很大!
文章插图
3.4 实际情况天下没有免费的午餐 。
每一条连接都是要消耗系统资源的,所以实际中可能会设置最大并发数来保证服务器的安全和稳定,所以这个理论最大并发数是不可能达到的 。
实际中并发数和业务是直接相关的,像redis这种内存型的服务端并发十几万都是没问题的,大部分来讲几十/几百/几千/几万等是存在的 。
4. 客户端最大连接数理解了服务器的最大并发数是2^48,那么客户端最多可以连接多少服务器呢?
文章插图
对于客户端来说,当然可以借助于多网卡多IP来增加连接能力,我们仍然假定客户端只有1张网卡1个IP,由于端口数的限制到2^16,再去掉系统占用的端口,剩下可用的差不多64000 。
文章插图
也就是说,客户端虽然可以连接任意的目的IP和目的端口,但是客户端自身端口是有限的,所以客户端的理论最大连接数是2^16,含系统占用端口 。
5. NAT环境下的客户端解决前面的两个问题之后,来看另外一个问题:
一个公网出口NAT服务设备最多可同时支持多少内网IP并发访问外网服务?毕竟公网IP都是有限并且要花钱的,我们大部分机器都是在局域网中结合NAT来进行外网访问的,所以这个场景还是很熟悉的 。
来看下内网机器访问外网时的IP&端口替换和映射还原的过程,就明白了:
文章插图
因为这时的客户端是NAT设备,所以NAT环境下最多支持65535个并发访问外网 。
6.小结【Linux服务端最大并发数是多少?】本文通过一道面试题切入,先描述了C10K和C10M问题,进而详细说明了客户端的最大访问数和服务端的最大并发数计算和原理,最后描述了NAT场景下的访问并发数 。
虽然理论服务端并发数非常大,但是我们也没有必要觉得并发数高就厉害,服务复杂程度不一样,切忌唯并发数来判断业务和开发者水平 。
试想echo服务和订单交易服务显然是不一样的,我们应该做的是在服务稳定和高可用的前提下去从缓存/网络/数据库等多个角度来优化提高性能 。
对了,在这里说一下,我目前是在职JAVA开发,如果你现在正在学习Java,了解Java,渴望成为一名合格的Java开发工程师,在入门学习Java的过程当中缺乏基础入门的视频教程,可以关注并私信我:01 。获取 。我这里有最新的Java基础全套视频教程 。
推荐阅读
- 可算是有文章,把Linux零拷贝技术讲透彻了
- 服务器上网友上传重复图片太多,几步操作检测重复图片并删除
- Linux使用shell定时任务实现ffmpeg视频转码和截图
- 如何在各种Linux发行版中安装curl命令
- MySQL查看连接数
- 前端测试框架Jest——语法篇
- 利用shell脚本命令配置好完整的Samba共享服务器
- CentOS 7中常用的基础命令
- 一个因CA根证书过期引起的故障
- Linux下如何寻找相同文件?