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

答案是否定的。
如果计算机不受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.234的443端口连接。只要这个连接没有释放,端口号10000就不能用于其它任何连接。这意味着,客户端最大的端口数 = 最多TCP连接数。

潜规则可以使用PORT_REUSE来打破。只要连接TCP连接时,使用该选项,可以不受上文的限制。10000这个端口可以同时用于多个连接,而不仅仅局限于一个连接。

即使客户端有限制,服务器(一个IP)理论上依然可以维持248个连接数。但是那么庞大的连接数会让服务器慢地无法使用。为了让服务器能够给全球用户提供更优质的服务响应,可以使用服务器集群,负载均衡设备提供负载均衡,每个服务器维持几千个TCP连接数。

读者会发现,服务器负载得到了减轻,但是负载均衡设备本身却成为了新的瓶颈,因为用户流量都需要它来导流,如何解决这个问题?

域名解析可以将域名解析为多个负载均衡设备的IP,以此来提供负载均衡设备的负载均衡。

来源:车小胖谈网络,本文观点不代表自营销立场,网址:https://www.zyxiao.com/p/126141

发表评论

登录后才能评论
侵权联系
返回顶部