点击上方“朱小厮的博客”,选择“设为星标”

后台回复"k8s"领取阿里云《深入浅出k8s.pdf》

欢迎跳转到本文的原文链接:https://honeypps.com/backend/how-many-concurrent-tcp-connections-can-a-single-server-have/

曾几何时我们还在寻求网络编程中 C10K 问题的解决方案,但是现在从硬件和操作系统支持来看单台服务器支持上万并发连接已经没有多少挑战性了。有关 C10K(即单机1万个并发连接问题)的信息可以参考《上一个10年,著名的C10K并发连接问题[1]》和《The C10K problem[2]》这两篇文章。

我们先假设单台服务器最多只能支持万级并发连接,其实对绝大多数应用来说已经远远足够了,但是对于一些拥有很大用户基数的互联网公司,往往面临的并发连接数是百万、千万、甚至上亿。虽然现在的集群,分布式技术可以为我们将并发负载分担在多台服务器上,那我们只需要扩展出数十台电脑就可以解决问题,但是我们更希望能更大的挖掘单台服务器的资源,先努力垂直扩展,再进行水平扩展,这样可以有效的节省服务器相关的开支(硬件资源、机房、运维人力、电力其实也是一笔不小的开支)。

那么到底一台服务器能够支持多少TCP并发连接呢?

首先需要考虑文件句柄的限制。在linux下编写网络服务器程序的朋友肯定都知道每一个tcp连接都要占一个文件描述符,一旦这个文件描述符使用完了,新的连接到来返回给我们的错误是“Socket/File:Can't open so many files”。这时你需要明白操作系统对可以打开的最大文件数的限制。我们可以通过 ulimit -n命令、/etc/security/limits.conf 文件 以及 /etc/sysctl.conf 文件等来修改文件句柄数。更多细节可以参阅 「朱小厮的博客」里的这篇文章《文件句柄?文件描述符?傻傻分不清楚》。

其次要考虑的是端口范围的限制。操作系统上端口号1024以下是系统保留的,从1024-65535是用户使用的。由于每个TCP连接都要占一个端口号,所以我们最多可以有60000多个并发连接。我想有这种错误思路朋友不在少数吧?面试官也比较喜欢在这里引导挖坑,类似的问题还有:一个UDP连接可以复用已经被TCP连接占用的端口嘛?(可以在下方留言区留下你的答案。)

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

上面给出的结论都是理论上的单机TCP并发连接数,实际上单机并发连接数肯定要受硬件资源(内存)、网络资源(带宽)的限制,至少对我们的需求现在可以做到数十万级的并发了。

参考资料

[1]

上一个10年,著名的C10K并发连接问题: http://www.52im.net/thread-566-1-1.html

[2]

The C10K problem: http://www.kegel.com/c10k.html

欢迎跳转到本文的原文链接:https://honeypps.com/backend/how-many-concurrent-tcp-connections-can-a-single-server-have/

想知道更多?描下面的二维码关注我

后台回复”加群“获取公众号专属群聊入口

当当优惠码福利来一波!当当全场自营图书5折,用优惠码:TASEMU(长按复制),满200(原价400)再减30,相当于170=400,四折多一点。使用渠道:当当小程序或当当APP。使用时间:4/10-4/23。目前优惠码只有少量了,且不会再增加。

【原创系列 | 精彩推荐】

  • Paxos、Raft不是一致性算法嘛?

  • 越说越迷糊的CAP

  • 面试官居然问我Raft为什么会叫做Raft!

  • 面试官给我挖坑:URI中的//有什么用

  • 网关Zuul科普

  • 网关Spring Cloud Gateway科普

  • 分布式事务科普——初识篇

  • 分布式事务科普——终结篇

  • 面试官给我挖坑:a[i][j]和a[j][i]有什么区别?

  • Nginx架构原理科普

朕已阅 

面试官给我挖坑:单台服务器并发TCP连接数到底可以有多少 ?相关推荐

  1. 高性能网络编程(一):单台服务器并发TCP连接数到底可以有多少

    前言 曾几何时我们还在寻求网络编程中C10K问题(有关C10K问题请见文章<The C10K problem(英文在线阅读.英文PDF版下载.中文译文)>)的解决方案,但是现在从硬件和操作 ...

  2. 如何扩容单台服务器的存储容量?

    作者个人研发的在高并发场景下,提供的简单.稳定.可扩展的延迟消息队列框架,具有精准的定时任务和延迟队列处理功能.自开源半年多以来,已成功为十几家中小型企业提供了精准定时调度方案,经受住了生产环境的考验 ...

  3. 【 Linux 】单台服务器上并发TCP连接数(转)

    单台服务器上并发TCP连接数      问题:一台服务器到底能够支持多少TCP并发连接呢? 1. 文件描述符限制:     对于服务器来说,每一个TCP连接都要占用一个文件描述符,一旦文件描述符使用完 ...

  4. SCOM 2012系列⑨单台服务器拓扑监控

    为了更直观的展示出我们的服务器健康状况与各应用程序的运行状况,我们看图说话总是最直观有效的,所以我们就把服务器的各组件情况分成拓扑图似的模样给我们直观展示出来吧: 1 单台服务器拓扑图监控 首先打开& ...

  5. 网络编程释疑之:单台服务器上的并发TCP连接数可以有多少

    曾几何时我们还在寻求网络编程中C10K问题的解决方案,但是现在从硬件和操作系统支持来看单台服务器支持上万并发连接已经没有多少挑战性了. 我们先假设单台服务器最多只能支持万级并发连接,其实对绝大多数应用 ...

  6. 面试官给我挖坑:a[i][j] 和 a[j][i] 有什么区别?

    点击上方"朱小厮的博客",选择"设为星标" 后台回复"1024"领取公众号专属资料 欢迎跳转到本文的原文链接:https://honeypp ...

  7. 渗透测试流程(单台服务器)

    渗透测试流程(单台服务器) 转载于:https://www.cnblogs.com/sky--/p/5781432.html

  8. 进阶!基于CentOS7系统使用cobbler实现单台服务器批量自动化安装不同版本系统(week3_day5_part2)-技术流ken...

    前言 在上一篇博文<cobbler批量安装系统使用详解-技术流ken>中已经详细讲解了cobbler的使用以及安装,本篇博文将会使用单台cobbler实现自动化批量安装不同版本的操作系统. ...

  9. 超融合架构提升单台服务器性能,浅谈超融合架构

    超融合架构是什么? 超融合架构是基于标准通用的硬件平台,通过软件定义实现计算.存储.网络融合,实现以虚拟化为中心的软件定义数据中心的技术架构.其主要特征是: (1)软件定义 独立于硬件,采用商业通用标 ...

最新文章

  1. 传统企业应用转型--从0到1的微服务之路
  2. 浅谈强化学习的方法及学习路线
  3. cocos2dx对所有子节点设置透明度
  4. python if调用函数,Python根据字符串调用函数过程解析
  5. mysql未提交事务sql_MySQL如何找出未提交事务的SQL浅析
  6. 2020年了,再不会Https就老了
  7. 工作201:所需功能优化
  8. python自动生成采集规则_【仅供学习参考】Python多线程池采集小说,超简单!
  9. mysql数据库集群架构图_搭建MySQL-Cluster集群架构
  10. 用JAVA打出的计算机_如何用Java代码操作计算机文件?
  11. 读张满胜之《英语语法新思维初级教程》
  12. 基于Spark的离线电影推荐
  13. react native 背景颜色渐变
  14. Lowest Common Ancestor
  15. NFL计划将数据跟踪芯片放入橄榄球中
  16. 微软卷土重来 只收购雅虎搜索业务
  17. 北京航空航天大学计算机学院保研率,北京航空航天大学计算机学院(专业学位)计算机技术保研夏令营...
  18. 【UE4】给游戏制作一个简易的小地图
  19. Windows11专业版安装USBCAN-II驱动后报错“……无法加载这个硬件的设备驱动程序……(代码39)”解决方案
  20. 成功解决python.exe 无法找到程序入口 无法定位程序输入点

热门文章

  1. mysql 查询设置调优_MySQl 查询性能优化相关
  2. 『原创』+『参考』使用C#在PPC的Today界面上的任务栏加入应用程序图标
  3. 【深度学习】数据降维方法总结
  4. jmeter之ip欺骗
  5. 处理浏览器兼容你最喜欢用哪种方式
  6. LELE的RPG难题
  7. 黑客攻击澳大利亚政府网站 抗议互联网过滤器
  8. Android开发学习:在Eclipse中导入Android项目方法
  9. 我的WCF之旅(13):创建基于MSMQ的Responsive Service
  10. sp_updatestats和update statistics的区别