听说一台主机只能保持最多65535个TCP连接,是真的吗? - Kirin博客

听说一台主机只能保持最多65535个TCP连接,是真的吗?

作者: A.毒蜂

全网最全的网络资源分享网站

标签:

特别声明:部分文章为网络转载,资源使用一般不提供任何帮助,特殊资源除外,如有侵权请联系站长!请勿违法!本站文章仅供学习了解!技术无罪!

kirin博客

答案是否定的。

如果计算机不受CPU、内存资源的硬件限制:
  • 计算机为服务器(1),被动接受的连接数可以为232 * 216 * 216 = 264 (理论最大值)
  • 计算机为客户端(2),主动发起的连接数可以为232 * 216 * 216 = 264(理论最大值)
 
上文的1、2的数字是怎么来的呢?让我们一起分析一下。
 
计算机为服务器的场景
知乎服务器主机在103.41.167.234侦听443端口,等待着来自于任何IP地址的主机访问它,包括它自己。另外任何主机,可以使用任何端口来连接知乎的服务器,对吗?
 
全球有多少个IP地址呢?
232
一个主机对应一个IP地址,一个IP地址可以拥有多少个端口号?
216
两者相乘的结果,就是248 
 
但是不要忘记知乎服务器还可以监听1、2、3 。。。444、445、446 。。。65535端口号,代表216服务,与248 相乘,正好得到264 。
 
计算机为客户端的场景
其实和服务器没有任何区别。假设这个客户端的IP = 1.1.1.1,它可以使用特定的端口号10000来主动连接任何IP(232)服务器的任何端口(216),那么就可以建立264个连接。不要忘记客户端还可以使用非10000端口来连接以上服务器,客户端一共216端口,与264相乘,正好也得到264
 
以上仅仅是理论,计算机的软硬件资源不可能无限使用。现实实现中操作系统对客户端的连接数有一个默认上限值,即65535。
 
客户端怎么限制的呢?
默认情况下,一个端口号任何时间只能由一个TCP连接使用。客户端1.1.1.1 ,使用端口号10000与知乎服务器103.41.167.234443端口连接。只要这个连接没有释放,端口号10000就不能用于其它任何连接。这意味着,客户端最大的端口数 = 最多TCP连接数
 
潜规则可以使用PORT_REUSE来打破。只要连接TCP连接时,使用该选项,可以不受上文的限制。10000这个端口可以同时用于多个连接,而不仅仅局限于一个连接。
 
即使客户端有限制,服务器(一个IP)理论上依然可以维持248个连接数。但是那么庞大的连接数会让服务器慢地无法使用。为了让服务器能够给全球用户提供更优质的服务响应,可以使用服务器集群,负载均衡设备提供负载均衡,每个服务器维持几千个TCP连接数。
 
读者会发现,服务器负载得到了减轻,但是负载均衡设备本身却成为了新的瓶颈,因为用户流量都需要它来导流,如何解决这个问题?
 
域名解析可以将域名解析为多个负载均衡设备的IP,以此来提供负载均衡设备的负载均衡。
分享到:
加入交流群
未经允许不得转载:

作者: A.毒蜂, 转载或复制请以 超链接形式 并注明出处 Kirin博客
原文地址: 《听说一台主机只能保持最多65535个TCP连接,是真的吗?》 发布于2021-4-6

切换注册

登录

您也可以使用第三方帐号快捷登录

切换登录

注册

觉得文章有用就加入交流群吧

QQ扫一扫