
# 为什么同一客户端同时访问不同ELB实例、IP或端口会概率性超时？
#### 问题描述
表1问题概述 
|   触发场景   | - 多个四层ELB实例或同一四层ELB实例的多个监听器挂载相同后端服务器，同一客户端同时访问这些ELB实例。  - 开启全端口监听的监听器，同一客户端同时访问ELB实例不同的监听端口后转发到相同的后端服务器的相同端口。   |
|---|---|
| **问题现象** | 客户端概率性访问超时。                                                                                                                                                                                                                                                                          |
| **问题原因** | 在上述触发问题的场景中，同一个客户端通过ELB实例访问到**业务端口相同的后端服务器**时，后端服务器从弹性负载均衡处接收的客户端请求报文的源IP和源端口相同，出现请求报文的五元组冲突，从而导致访问失败或超时。                                                                                                                                                                            |
   
#### 问题分析
什么场景下后端服务器上不同四层连接会出现五元组冲突？
- 客户端请求源端口硬编码为固定端口：客户端访问不同的弹性负载均衡时，客户端请求的源端口固定，例如固定为80端口。
- 客户端请求源端口由操作系统自动选择：由于客户端访问不同的弹性负载均衡，即访问的目的IP地址不同，从而导致操作系统选择的客户端请求源端口可能相同。
图1后端服务器接收请求报文五元组冲突示意图   
![](https://support.huaweicloud.com/elb_faq/zh-cn_image_0000001903179320.png "点击放大")
同一客户端通过两个负载均衡器访问同一个后端服务器，客户端请求源端口相同且弹性负载均衡已开启获取客户端IP（DNAT模式）功能时，连接建立过程如[图1]。
1. 客户端发出源IP（IP-client）和源端口(100)相同的TCP请求1和TCP请求2到两个弹性负载均衡的公网IP地址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)。
   

- 在多组监听场景下，避免监听器使用相同的后端服务器。
 
