DCDN IPA TOA 测试最佳实践

本文涉及的产品
全站加速 DCDN,50GB 1年
边缘安全加速 ESA,基础版 3个月
简介: ## IPA TOA 的使用背景:TOA 模块是为了让后端的 realserver 能够看到真实的 clientip 而不是负载均衡器或者 proxy 的代理 ip;阿里云的全站加速产品天然的支持 TOA 的透明转发,且性能测试满足企业高并发访问性能,接下来看下如何进行 toa 使用。### 1、安装aliyun toa 支持 opcode=28/254https://github.c

IPA TOA 的使用背景:

TOA 模块是为了让后端的 realserver 能够看到真实的 clientip 而不是负载均衡器或者 proxy 的代理 ip;
阿里云的全站加速产品天然的支持 TOA 的透明转发,且性能测试满足企业高并发访问性能,接下来看下如何进行 toa 使用。

1、安装

aliyun toa 支持 opcode=28/254
https://github.com/aliyun/alibabacloud-cdn-tool-toa

2、全站加速支持现状

opcode=28的tcp option格式是:
nop(8 bits)
opcode(8 bits) = 28
opsize(8 bits) = 7
opversion(8 bits) = 1
ip(32 bits, big endian)

opcode=254的格式是:
tcp option(ipv4):
opcode(8 bits) = 254
opsize(8 bits) = 8
port(16 bits, big endian)
ip(32 bits, big endian)

tcp option(ipv6):
opcode(8 bits) = 254
opsize(8 bits) = 20
port(16 bits, big endian)
ip(128 bits, big endian)

huawei toa opcode=8/254
https://github.com/Huawei/TCP_option_address

对 TOA 不太了解的同学可以看下面的说明,熟悉的可以略过

3、TOA 基本原理

TOA 名字全称是 tcp option address,是 FullNat 模式下能够让后端服务器获取 ClientIP 的一种实现方式,它的基本原理比较简单。

1、客户端用户请求数据包到达 LVS 时,LVS 在数据包的 tcp option 中插入 src ip 和 src port 信息
2、数据包到达后端服务器(装有 toa 模块)后,应用程序正常调用 getpeername 系统函数来获取连接的源端 IP 地址
3、由于在 toa 代码中 hook(修改)了 inet_getname 函数(getpeername 系统调用对应的内核处理函数),该函数会从 tcp option 中获取 lvs 填充的 src 信息
4、这样后端服务器应用程序就获取到了真实客户端的 ClientIP,而且对应用程序来说是透明的。

TCP 协议栈中处理三次握手的 ack 数据包的函数是 tcp_v4_syn_recv_sock,完成连接的建立,并创建 newsock。 tcp_v4_syn_recv_sock_toa hook 在 tcp_v4_syn_recv_sock,第三次 TCP 握手时 ACK 报文到达 Server 段后,调用 sock* tcp_v4_syn_recv_sock_toa 函数,代码逻辑走到原有的 tcp_v4_syn_recv_sock 函数,如果是非 TOA 逻辑则执行 if (newsock) sock_reset_flag(newsock, SOCK_TOA_IPV4);
否则解析 tcp option 内容,获取到 ip 端口 等信息后挂到 newsock 中

                        tdata.opcode = TCPOPT_TOA;
                        tdata.opsize = TOA_V4_LEN - 1;
                        tdata.opversion = TOA_IPV4;
                        tdata.ip = ip;
                        memcpy(&ptr, &tdata, sizeof(struct toa_data));
                        newsock->sk_user_data = ptr;
                        sock_set_flag(newsock, SOCK_TOA_IPV4);
                        TOA_INC_STATS(ext_stats, SYN_RECV_SOCK_TOA_CNT);

4、测试用例

4.1 客户端

● nc 模式 tcp/udp 发包的强大工具,或者 telnet 直接探测
● curl / wget 模拟 http 请求

4.2 代理:

阿里云全站加速(DCDN)配置如下,ipa 对等转发,配置的回源端口和测试端口保持一致

本文介绍的是 TOA 透传,所以开启的是 TOA ,如果是 Proxy protocol 需要原站能支持 PP (https://docs.nginx.com/nginx/admin-guide/load-balancer/using-proxy-protocol/?spm=5176.11220512.help.18.cacf72f0ZfQK8t

4.3 原站抓包验证 opcode4.1

目录
相关文章
|
10天前
|
机器学习/深度学习 人工智能 监控
软件测试中的自动化测试策略与最佳实践##
在当今快速发展的软件行业中,自动化测试已成为确保软件质量和加速产品上市的关键工具。本文将探讨自动化测试的重要性,分析不同类型的自动化测试工具和框架,并深入讨论实施自动化测试的最佳实践。通过案例研究和数据分析,我们将揭示如何有效整合自动化测试到软件开发生命周期中,以及它如何帮助团队提高测试效率和覆盖率。 ##
22 1
|
24天前
|
设计模式 前端开发 JavaScript
自动化测试框架设计原则与最佳实践####
本文深入探讨了构建高效、可维护的自动化测试框架的核心原则与策略,旨在为软件测试工程师提供一套系统性的方法指南。通过分析常见误区,结合行业案例,阐述了如何根据项目特性定制自动化策略,优化测试流程,提升测试覆盖率与执行效率。 ####
48 6
|
25天前
|
存储 监控 测试技术
测试脚本编写和维护的最佳实践有哪些?
测试脚本编写和维护的最佳实践有哪些?
109 50
|
9天前
|
监控 数据管理 测试技术
API接口自动化测试深度解析与最佳实践指南
本文详细介绍了API接口自动化测试的重要性、核心概念及实施步骤,强调了从明确测试目标、选择合适工具、编写高质量测试用例到构建稳定测试环境、执行自动化测试、分析测试结果、回归测试及集成CI/CD流程的全过程,旨在为开发者提供一套全面的技术指南,确保API的高质量与稳定性。
|
9天前
|
数据管理 测试技术 持续交付
软件测试中的自动化测试策略与最佳实践
在当今快速迭代的软件开发环境中,自动化测试已成为确保软件质量和加速产品上市的关键手段。本文旨在探讨软件测试中的自动化测试策略,包括选择合适的自动化测试工具、构建有效的自动化测试框架以及实施持续集成和持续部署(CI/CD)。通过分析自动化测试的最佳实践,本文为软件开发团队提供了一系列实用的指南,以优化测试流程、提高测试效率并减少人为错误。
30 4
|
5月前
|
机器学习/深度学习 监控 算法
自动化测试框架的演进与最佳实践
随着软件行业的迅猛发展,自动化测试已成为确保软件质量的关键手段。本文将深入探讨自动化测试框架的历史演进、当前趋势以及面临的挑战,并结合实际案例分析,提出一系列的最佳实践策略,旨在帮助读者构建更加高效、稳定的自动化测试体系。
|
17天前
|
监控 测试技术 持续交付
探索自动化测试在软件开发中的最佳实践
本文旨在深入探讨自动化测试在软件开发过程中的应用,以及如何有效地实施自动化测试以提高软件质量和开发效率。通过分析自动化测试的优势、挑战和最佳实践,本文为软件开发团队提供了一套实用的指导方案。
|
13天前
|
Devops 测试技术 持续交付
软件测试中的自动化与持续集成:最佳实践与挑战
在快速迭代的软件开发周期中,自动化测试和持续集成(CI)已成为提高软件质量和加速产品上市的关键策略。本文探讨了自动化测试和CI的实施如何帮助开发团队提前发现缺陷、缩短反馈循环,并确保代码质量。我们将深入分析自动化测试的策略选择、工具应用以及面临的挑战,同时提供一些克服这些挑战的最佳实践。
27 0
|
1月前
|
前端开发 数据管理 测试技术
前端自动化测试:Jest与Cypress的实战应用与最佳实践
【10月更文挑战第27天】本文介绍了前端自动化测试中Jest和Cypress的实战应用与最佳实践。Jest适合React应用的单元测试和快照测试,Cypress则擅长端到端测试,模拟用户交互。通过结合使用这两种工具,可以有效提升代码质量和开发效率。最佳实践包括单元测试与集成测试结合、快照测试、并行执行、代码覆盖率分析、测试环境管理和测试数据管理。
56 2
|
1月前
|
前端开发 JavaScript 数据可视化
前端自动化测试:Jest与Cypress的实战应用与最佳实践
【10月更文挑战第26天】前端自动化测试在现代软件开发中至关重要,Jest和Cypress分别是单元测试和端到端测试的流行工具。本文通过解答一系列问题,介绍Jest与Cypress的实战应用与最佳实践,帮助开发者提高测试效率和代码质量。
34 2