XDP VNP虚拟以太网关(章节:二)
三、AF_XDP用户态程序详细设计
3.1 用户态程序总体架构
AF_XDP用户态程序是整个系统的控制中心和策略执行。它通过零拷贝方式从XDP程序接收需要处理的数据包,实现完整的网络协议处理、路由决策和流量转发功能。
3.1.1 程序主处理流程
连接状态管理
主处理循环
初始化阶段
四级处理流水线
批量接收优化
发送处理优化
路由执行
智能策略决策
主动RST响应
本地转发处理
VNP隧道处理
DNS智能处理
否
VNP解析
本地解析
劫持响应
直接丢弃
是
否
是
否
是
VNP隧道
本地网关
需要RST
深度协议解析
以太网头解析
IP协议解析
传输层解析
应用层识别
程序启动
配置检测与验证
分配UMEM内存池
创建AF_XDP套接字
绑定到网卡队列
初始化工作线程池
加载路由策略配置
从AF_XSQ读取描述符
批量获取数据包
数据包预处理
负载均衡到工作线程
DNS流量检测
是否为DNS查询?
常规路由查询
解析DNS查询
查询域名规则
域名匹配结果
标记为VNP流量
标记为本地流量
构造DNS响应
查询RIB路由表
路由决策结果
数据包丢弃
选择隧道协议
添加隧道头部
加密处理
分片与重组
查询NAT状态表
存在NAT映射?
使用现有映射
创建新NAT映射
修改数据包头部
分配NAT资源
重新注入内核
检查连接状态
需要发送RST?
构造TCP RST包
静默丢弃
设置正确序列号
发送到源地址
发送队列管理
内核转发接口
直接发送处理
统计记录
批量发送优化
完成回调处理
连接状态更新
定期清理任务
超时连接移除
资源回收处理
3.2 DNS劫持与分流系统
DNS分流是本系统的关键特性之一,通过智能DNS劫持技术,实现基于域名的流量分流决策,解决CDN优化和访问控制问题。
3.2.1 DNS处理完整流程
响应组装优化
默认策略处理
域名劫持处理
智能域名分类
多层缓存查询系统
DNS深度解析模块
VNP DNS处理流程
本地DNS处理流程
命中
未命中
是
否
命中
未命中
是
否
是
否
NXDOMAIN
REFUSED
指定IP
CNAME
负载均衡
VNP优选域名
本地CDN域名
屏蔽域名
未知域名
优先VNP
优先本地
VNP
本地
接收DNS查询数据包
验证DNS报文格式
提取事务ID
解析查询部分
提取查询域名
记录查询类型
检查递归标志
构建缓存键
一级内存缓存
检查TTL有效性
二级持久化缓存
TTL有效?
返回缓存响应
标记为过期
加载到内存缓存
继续外部查询
构造DNS响应
域名规范化处理
后缀匹配规则
关键字匹配规则
正则表达式匹配
自定义规则匹配
域名分类结果
选择VNP隧道
封装DNS请求
通过VNP隧道发送
设置响应超时
等待DNS响应
收到响应?
解析响应内容
降级到本地DNS
更新VNP DNS缓存
选择本地DNS服务器
构造标准DNS请求
发送到本地网络
设置超时重试
等待DNS响应
收到响应?
解析响应记录
返回SERVFAIL
更新本地DNS缓存
查询劫持规则
劫持响应类型
构造域名不存在响应
构造拒绝查询响应
构造A记录响应
构造别名响应
设置RCODE=3
设置RCODE=5
设置回答记录
设置CNAME记录
查询默认策略配置
默认策略设置
智能负载均衡
评估服务器状态
计算选择权重
选择结果
匹配事务ID
复制查询部分
添加回答部分
设置TTL值
计算响应长度
设置DNS标志位
发送DNS响应
更新统计信息
监控记录