一个IP能建立的最大连接数是多少?

凉白开 Linux318,2147字数 1445阅读4分49秒阅读模式

在探讨这个问题前,我们先假设一种经典的连接模型:Client -> Load Balancer-> RealServer Pool,并且我们假设这里使用NAT模式的负载均衡,在这种模式下:

  • 负载均衡器只留给客户端一个公网IP地址(VIP);
  • 客户端发来的请求都被负载均衡器端截,然后通过调度算法转发到RealServer Pool里面的某台服务器;
  • 这些RealServer都在一个私有网络里面,对外不可见;
  • 负载均衡器转发请求到真实服务器(RealServer)的时候同时做了NAT,真实服务器看到的连接都是来自负载均衡器的(和真实服务器在一个私有网络的IP)。

 文章源自运维生存时间-https://www.ttlsa.com/linux/what-is-the-maximum-number-of-connections-a-ip-can-build/

首先

我们从Client Side(Client->Load Balancer)来分析:
这端的连接都由SourceIP:SoucePort->DesIP:DesPort唯一标识,所以对我们来说,能支持的连接数仅仅受限于负载均衡器的内存数(连接数可以是65000+),因为DesIP和DesPort都是已知的唯一的(比如IP:80).文章源自运维生存时间-https://www.ttlsa.com/linux/what-is-the-maximum-number-of-connections-a-ip-can-build/

 文章源自运维生存时间-https://www.ttlsa.com/linux/what-is-the-maximum-number-of-connections-a-ip-can-build/

然后

再从Server Side(Load Balancer->RealServer)来分析:
这端的连接数刚好相反,每个连接都由负载均衡器的IP(这里称MIP:Mapped IP)和随机的端口进行标识。文章源自运维生存时间-https://www.ttlsa.com/linux/what-is-the-maximum-number-of-connections-a-ip-can-build/

即: MIP:RandomPort -> RealServerIP:80文章源自运维生存时间-https://www.ttlsa.com/linux/what-is-the-maximum-number-of-connections-a-ip-can-build/

这样,因为负载均衡器的端口也受限于TCP/IP的最大端口数64k(65536)限制,因此最多只能建立64k的服务器连接(server connnections).文章源自运维生存时间-https://www.ttlsa.com/linux/what-is-the-maximum-number-of-connections-a-ip-can-build/

 文章源自运维生存时间-https://www.ttlsa.com/linux/what-is-the-maximum-number-of-connections-a-ip-can-build/

由于瓶颈很可能就出现在服务器端连接上,针对这种情况,各负载均衡器厂家是怎么解决的呢?文章源自运维生存时间-https://www.ttlsa.com/linux/what-is-the-maximum-number-of-connections-a-ip-can-build/

负载均衡产生解决方案

1. NetScaler文章源自运维生存时间-https://www.ttlsa.com/linux/what-is-the-maximum-number-of-connections-a-ip-can-build/

我们首先来看NetScaler的解决办法,NetScaler的解决办法很简单,增加MIP的个数,这样最大的服务器连接数将变成:MaxServerConnections = 65536 * MIP数文章源自运维生存时间-https://www.ttlsa.com/linux/what-is-the-maximum-number-of-connections-a-ip-can-build/

2. F5文章源自运维生存时间-https://www.ttlsa.com/linux/what-is-the-maximum-number-of-connections-a-ip-can-build/

F5其实也使用了一样的办法,但是F5首先建立一个Source-NAT pool,然后在SNAT Pool里面加入多个IP地址。这样得到的最大连接数和NetScaler完全一样:文章源自运维生存时间-https://www.ttlsa.com/linux/what-is-the-maximum-number-of-connections-a-ip-can-build/

SA:SP -> DA:DP文章源自运维生存时间-https://www.ttlsa.com/linux/what-is-the-maximum-number-of-connections-a-ip-can-build/

10.1.1.1:1024 -> 10.1.1.100:80文章源自运维生存时间-https://www.ttlsa.com/linux/what-is-the-maximum-number-of-connections-a-ip-can-build/

10.1.1.2:1024 -> 10.1.1.100:80文章源自运维生存时间-https://www.ttlsa.com/linux/what-is-the-maximum-number-of-connections-a-ip-can-build/

PS: 这里10.1.1.1和10.1.1.2都在一个SNAT pool里面。文章源自运维生存时间-https://www.ttlsa.com/linux/what-is-the-maximum-number-of-connections-a-ip-can-build/

最大连接上受限因素

上述情况都是理论计算值,真实环境下的最大连接数还受限于各种因素:文章源自运维生存时间-https://www.ttlsa.com/linux/what-is-the-maximum-number-of-connections-a-ip-can-build/

  •  每个连接都要耗费一定的资源,比如CPU、MEM,所以,真实值往往很难达到理论值;
  •  根据协议的不同,能达到的最大连接数也不一样,比如HTTP/1.0连接的创建和关闭都非常快,而且浏览器对并发连接数有限制,所以,很难达到最大的理论 值。HTTP/1.1支持流线技术,多个请求可以复用一个连接,这样就大大减少了并发连接数。FTP或者telnet连接都是长连接,很容易达到最大值;
  •  很多设备(比如NetScaler)在服务器端都支持连接池(连接复用),里面的连接都是长连接,一样实现了HTTP/1.1里面的流线技术,一个连接就可以处理多个客户端连接。这样除了减少连接资源,同时还减少了负载均衡器的其他资源开销,同时减低了内网的带宽;
  •  一些设备(比如NetScaler的TCP-OFFLOAD)支持TCP卸载,仅仅把已经建立的连接发到服务器端,而TCP的三次握手完全有负载均衡器接管,这样,服务器端的连接就成倍的减少。
文章源自运维生存时间-https://www.ttlsa.com/linux/what-is-the-maximum-number-of-connections-a-ip-can-build/文章源自运维生存时间-https://www.ttlsa.com/linux/what-is-the-maximum-number-of-connections-a-ip-can-build/
weinxin
我的微信
微信公众号
扫一扫关注运维生存时间公众号,获取最新技术文章~
凉白开
  • 本文由 发表于 26/11/2015 01:00:54
  • 转载请务必保留本文链接:https://www.ttlsa.com/linux/what-is-the-maximum-number-of-connections-a-ip-can-build/
评论  3  访客  3
    • ? 2014
      ? 2014 9

      长知识了

      • ق 2014
        ق 2014 9

        长知识了

        • 未来往事
          未来往事 0

          没注意过 学习

        评论已关闭!