通过独享型ELB的全端口监听支持UDP大包分片传输
应用场景
在使用客户端发送UDP数据包进行通信时,如果数据包较大,可能会被IP层分片。当这些分片的数据包通过ELB时,由于UDP监听器不支持大包分片,后端服务器无法接收到完整的分片报文,导致访问异常。面对这种情况,如何确保数据包能够完整地被后端服务器接收,避免访问异常的发生?本实践文档提供了一种解决方案,通过配置ELB的全端口监听,确保UDP分片数据包能够被分配到同一台后端服务器后进行正确重组,从而避免访问异常。
什么是IP分片
IP分片(IP Fragmentation)是网络通信中用于处理大数据包传输的一种技术。当数据包的大小超过网络链路的最大传输单元(MTU)时,路由器或发送端会将原始数据包分割成多个较小的片段(分片),以便在网络上传输。接收端收到这些分片后,会重新组装(Reassembly)还原为原始数据包。
约束与限制
- 当前ELB仅支持入方向IP分片的传输,暂不支持从服务端发送的IP分片报文传输到客户端。
- ELB根据UDP分片报文中相同的源IP地址将分片报文转发到相同的后端服务器,后端服务器组的分配策略类型请选择“源IP算法”。
准备工作
- 已创建独享型ELB实例,具体操作请参考购买独享型负载均衡器。
- 创建两台ECS,ECS与已创建的ELB实例属于同一个VPC,更多详细设置请参考自定义购买ECS。
一台ECS_client用作客户端发送请求,另一台ECS_server用作部署UDP后端应用服务的后端服务器。
步骤一:创建UDP监听器并设置1~65535端口监听
- 进入弹性负载均衡列表页面。
- 在弹性负载均衡列表页面,单击需要添加监听器的负载均衡名称。
- 切换到“监听器”页签,单击“添加监听器”,配置UDP监听器并配置1~65535端口的全端口监听。
- 监听端口:全端口监听。
- 起始端口:1,结束端口:65535。
图1 添加UDP监听器并设置1~65535端口的全端口监听
- 其余配置保持默认,单击“下一步:配置后端分配策略”。
步骤二:创建基于源IP算法的后端服务器组
- 在配置后端分配策略页面,选择“新创建”后端服务器组。
- 分配策略类型选择“源IP算法”,并开启“全端口转发”,其余配置保持默认。
图2 新创建UDP协议的后端服务器组
- 单击“下一步:添加后端服务器”,添加准备工作中已经创建的ECS_server作为后端服务器。
- 单击“下一步:确认配置”,确认无误后,单击“提交”。
步骤三:验证UDP大包传输生效
- 远程登录后端服务器ECS_server。
弹性云服务器有多种登录方法,具体请参见登录弹性云服务器。
- 在后端服务器中,新建目录Test。
mkdir Test
- 在Test目录下,新建一个send.py,用于向ELB发送UDP大包分片报文。
- 新建send.py文件。
python send.py
- 按i键进入编辑模式。
- 新建send.py文件。
- 按Esc键,输入:wq保存send.py文件。
- 运行send.py文件。
python send.py
- 配置正常的情况下,后端服务器会接收到2000个A字符,即说明UDP分片报文传输成功。