
# 为什么同一客户端同时访问绑定了多个EIP的ELB实例会概率性超时？
#### 问题描述
表1问题概述 
|   触发场景   |         同一四层ELB实例具有多个弹性公网IP地址，同一客户端通过不同的公网IP地址同时访问到这个ELB实例相同的监听端口。         |
|---|---|
| **问题现象** | 客户端请求概率性访问超时或连接被重置。                                                        |
| **问题原因** | 同一个客户端通过不同的EIP访问ELB实例时，通过相同的监听端口访问到**相同的后端服务器**时，出现请求报文的五元组冲突，从而导致访问失败或超时。 |
   
#### 问题分析
当ELB绑定了多个EIP时，什么场景下后端服务器上不同四层连接会出现五元组冲突？
- 客户端请求源端口硬编码为固定端口：客户端访问同一弹性负载均衡的不同EIP时，客户端请求的源端口固定，例如固定为80端口。
- 客户端请求源端口由操作系统自动选择：由于客户端访问不同的EIP，即访问的目的IP地址不同，从而导致操作系统选择的客户端请求源端口可能相同。
图1ELB绑定多个EIP时，后端服务器接收请求报文五元组冲突示意图   
![](https://support.huaweicloud.com/elb_faq/zh-cn_image_0000002489107161.png "点击放大")
**同一客户端** 通过**两个不同的EIP** 访问到负载均衡器的**同一个后端服务器** ，客户端请求源端口相同且弹性负载均衡已开启获取客户端IP（DNAT模式）功能时，连接建立过程如[图1]。
1. 客户端发出源IP（IP-client）和源端口(100)相同的TCP请求1和TCP请求2通过**EIP-1** （12.xx.xx.xx）和**EIP-2**（13.xx.xx.xx）到达弹性负载均衡。
2. 弹性负载均衡的TCP监听端口是80，收到的请求1和请求2的五元组报文如下：
   表2负载均衡器接收五元组详情 
   | 五元组报文    | 协议  | 源IP       | 源端口 | 目的IP        | 目的端口 |
   |:---|:---|:---|:---|:---|:---|
   | 五元组1-ELB | TCP | IP-Client | 100 | 12.xx.xx.xx | 80   |
   | 五元组2-ELB | TCP | IP-Client | 100 | 13.xx.xx.xx | 80   |
      
   
3. 弹性负载均衡将接收到请求转发到同一台后端服务器（IP-ECS），该后端服务器配置的**业务端口**都是90。
4. 由于弹性负载均衡已开启获取客户端IP功能，**源IP和源端口不会被修改** ，后端服务器接收到ELB转发的请求1和请求2，请求报文五元组如下：
   表3后端服务器接收五元组详情 
   | 五元组报文    | 协议  | 源IP       | 源端口 | 目的IP   | 目的端口 |
   |:---|:---|:---|:---|:---|:---|
   | 五元组1-ECS | TCP | IP-Client | 100 | IP-ECS | 90   |
   | 五元组2-ECS | TCP | IP-Client | 100 | IP-ECS | 90   |
      
   
5. 后端服务器接收到五元组报文相同的请求1和请求2，就会导致连接建立失败。
 
#### 解决方案
为解决后端服务五元组冲突问题，客户端需要避免使用相同的源端口访问不同的实例或监听器，具体而言，您可采用以下措施：
- 客户端请求源端口由操作系统自动选择时：
  - 允许客户端进行重试，客户端操作系统重连后，将通过不同的客户源端口发出请求，从而解决五元组冲突。
  
  - 若用户业务对重置连接极其敏感，需要更高的连接成功率，则请通过**IP类型后端** 添加后端服务器。在IP类型后端场景下，产品底层基于FullNAT模式实现，获取客户端IP功能将会失效，源IP将会修改为负载均衡器后端子网中的IP地址。此时，若用户有获取客户端真实源IP的诉求，请通过配置TOA插件获取，详情请参见[TOA插件配置](https://support.huaweicloud.com/usermanual-elb/elb_06_0001.html)。
   

- 在**ELB绑定多个EIP**使用的业务场景下，避免同一客户端发送请求到不同的EIP，多个EIP推荐用于容灾场景的业务部署。
 
