# Cache_Simulation **Repository Path**: aoslong/cache_-simulation ## Basic Information - **Project Name**: Cache_Simulation - **Description**: No description available - **Primary Language**: Python - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-07-24 - **Last Updated**: 2025-08-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # TCP网络优化算法模拟实验平台 ## 项目简介 本项目是一个综合性的网络模拟实验平台,用于测试多种网络优化算法对TCP传输性能的影响。项目提供AI训练数据生成功能,支持强化学习算法优化网络参数。系统通过模拟线性网络拓扑,研究在不同丢包率和延迟条件下,各种网络优化算法的性能表现。 ### 支持的优化算法 - **逐跳缓存(Hop-by-Hop Caching)**:路由器缓存数据包,减少端到端重传 - **ART(Adaptive Retransmission with Timing)**:自适应重传算法,对抗突发性丢包 - **FEC(Forward Error Correction)**:前向纠错,通过冗余传输提高可靠性 - **PRAU(Proactive Retransmission with Uncertainty)**:主动重传算法 - **LinkGuardianNB**:全路径逐跳缓存策略 - **STCV**:间隔缓存策略 ## 系统架构 ### 网络拓扑 - **线性拓扑结构**:`tcp_endpoint_0 <-> router_0 <-> router_1 <-> ... <-> router_n <-> tcp_endpoint_1` - **进程模型**:每个节点(TCP端点和路由器)都是独立的Python进程 - **通信协议**:节点间通过UDP实现连接和数据传输 ### 核心组件 #### 1. 配置管理 (`config.py`) - 生成模拟实验配置文件 `simulation_config.json` - 支持配置节点数量、IP地址、丢包率、延迟、缓存策略等参数 #### 2. 数据包定义 (`packet.py`) - 定义数据包类型:`DATA`, `TCP_ACK`, `DATA_ACK`, `DATA_NACK` - 包含TCP序号、链路序号、源/目的IP、缓存节点IP等字段 #### 3. 路由器生成 (`gen_router.py`) - 自动生成路由器Python文件到 `./router/` 目录 - 实现基本路由转发和可选的逐跳缓存功能 #### 4. TCP端点生成 (`gen_tcp_endpoint.py`) - 生成源端点和目的端点Python文件到 `./tcp_endpoint/` 目录 - 实现TCP数据传输、ACK处理和超时重传逻辑 #### 5. 模拟控制器 (`simulation.py`) - 统一管理所有进程的启动、监控和清理 - 收集和汇总实验统计数据 - 提供AI训练接口,支持QMIX强化学习算法 #### 6. 算法模块 - **ART模块** (`art.py`):自适应重传算法实现 - **FEC模块** (`fec.py`):前向纠错算法实现 - **性能测试** (`algorithm_performance_test.py`):多算法对比测试框架 #### 7. AI训练接口 - **QMIX训练** (`qmix_training.py`):强化学习模型训练 - **QMIX推理** (`qmix_inference.py`):训练好的模型推理 - **模型定义** (`qmix_model.py`):神经网络模型结构 ## 功能特性 ### 逐跳缓存机制 - **缓存策略**:路由器缓存向下游发送的数据包,直到收到ACK确认 - **丢包检测**:通过数据包序号检测丢包,触发NACK重传 - **重传优化**:根据链路丢包率计算最优重传次数 - **多种策略**:支持LinkGuardianNB(全开启)、STCV(间隔开启)等策略 ### ART自适应重传 - **动态调整**:根据网络状况动态计算重传副本数量 - **突发检测**:检测突发性丢包并调整发送策略 - **时间调度**:将多个副本分散发送,提高成功率 ### FEC前向纠错 - **分组传输**:将数据包分组,为每组添加冗余包 - **容错能力**:接收端只需收到足够数量的包即可恢复数据 - **即时确认**:对每个收到的包立即发送ACK ### PRAU主动重传 - **不确定处理**:在ACK丢失不确定的情况下采用概率策略 - **随机决策**:80%概率重传数据包,20%概率清除缓存 ### TCP传输模拟 - **简化TCP模型**:专注于数据传输和超时重传,不涉及连接建立/释放 - **ACK可靠性**:假设TCP_ACK不会丢失,路由器特殊处理TCP_ACK - **性能统计**:记录流完成时间、重传次数、Goodput(有效吞吐量)等指标 ### 算法性能测试 - **多算法对比**:支持TCP、TCP+ART、TCP+FEC、TCP+LinkGuardianNB等组合 - **参数扫描**:自动测试不同丢包率(0%-10%)和路径长度(4-12跳) - **实时结果**:按RTT分组生成图表和报告,支持大规模测试 ### AI训练支持 - **数据生成**:为强化学习算法提供训练数据 - **QMIX集成**:支持QMIX多智能体强化学习算法 - **参数优化**:通过AI算法自动优化网络配置参数 ## 快速开始 ### 环境要求 - Python 3.7+ - 必需依赖:`numpy`, `matplotlib`(用于图表生成) - 支持UDP socket编程的系统环境 - 可选:`torch`(用于AI训练功能) ### 快速运行单次实验 1. **生成配置文件** ```bash python config.py ``` 2. **生成节点代码** ```bash python gen_router.py python gen_tcp_endpoint.py ``` 3. **启动模拟实验** ```bash python simulation.py ``` 4. **查看结果** - 统计数据保存在 `./stats/` 目录 - 实验结束后自动显示性能指标汇总 ### 运行算法性能对比测试 1. **启动对比测试** ```bash python algorithm_performance_test.py ``` 2. **选择测试模式** - 选择1:运行完整对比测试(包含所有算法组合) - 选择2:重新分析现有结果并绘图 3. **查看结果** - 结果保存在 `./result/algorithm_test_[时间戳]/` 目录 - 包含JSON数据、PNG图表和文本分析报告 ### AI训练模式 1. **准备训练环境** ```bash # 确保当前状态文件存在 ls current_state.json ``` 2. **运行AI训练** ```bash python qmix_training.py ``` 3. **使用训练好的模型** ```bash python qmix_inference.py ``` ## 配置参数说明 ### 基本参数 | 参数 | 说明 | 默认值 | |------|------|--------| | `N_NODES` | 节点总数(包括TCP端点和路由器) | 6 | | `N_PACKETS` | 发送数据包数量 | 1000 | | `PATH_LOSS_RATE` | 端到端总丢包率 | 0.1 | | `RTT` | 端到端往返时延(毫秒) | 100 | | `RTO` | TCP超时重传时间(毫秒) | 120 | | `CACHE_ENABLE` | 各路由器缓存功能开关 | [0,1,1,1,0] | | `MAX_TCP_RETRIES` | TCP重传最大次数 | 3 | | `MAX_HOP_RETRIES` | 逐跳重传最大次数 | 3 | ### ART算法参数 | 参数 | 说明 | 默认值 | |------|------|--------| | `ART_ENABLE` | 是否开启ART功能 | False | | `ART_TARGET_SUCCESS_RATE` | ART目标成功率 | 0.9999 | | `ART_WINDOW_SIZE` | 丢包率统计窗口大小 | 100 | | `ART_MIN_REPLICAS` | 最少副本数 | 1 | | `ART_MAX_REPLICAS` | 最多副本数 | 5 | | `ART_BURST_DETECTION_WINDOW` | 突发检测窗口大小 | 10 | | `ART_REPLICA_SPACING_MS` | 副本间隔时间(毫秒) | 10 | ### FEC算法参数 | 参数 | 说明 | 默认值 | |------|------|--------| | `FEC_ENABLE` | 是否开启FEC功能 | False | | `FEC_GROUP_SIZE` | FEC分组大小 | 10 | | `FEC_REDUNDANCY` | 每组冗余包数量 | 2 | | `FEC_MIN_SUCCESS` | 分组成功所需最少收包数 | 8 | ### PRAU算法参数 | 参数 | 说明 | 默认值 | |------|------|--------| | `PRAU_ENABLE` | 各路由器PRAU功能开关 | [0,0,0,0,0] | ## 性能指标 ### TCP端点统计 - **流完成时间**:从开始发送到收到所有ACK的总时间 - **端到端有效包投递率**:成功接收包数/发送包总数 - **端到端重传触发次数**:TCP层超时重传次数 - **Goodput(有效吞吐量)**:成功传输的数据包数量除以流完成时间 ### 路由器统计 - **逐跳重传触发次数**:各路由器的缓存重传统计 - **缓存消耗**:send_cache的最大长度 - **PRAU决策统计**:主动重传和缓存清除的次数统计 ### 算法特定指标 #### ART算法指标 - **副本发送数量**:动态计算的副本总数 - **突发检测次数**:检测到的突发丢包事件 - **自适应调整记录**:副本数量的动态调整历史 #### FEC算法指标 - **分组统计**:总分组数、成功分组数、重传分组数 - **冗余包统计**:发送的冗余包总数 - **分组成功率**:成功传输的分组比例 #### 综合性能指标 - **流完成时间(FCT)**:端到端传输完成的总时间 - **Goodput**:有效包传输速率(包/秒) - **有效包投递率**:成功传输包数/原始包总数的比率 ## 项目结构 ``` cache_simulation/ ├── config.py # 配置文件生成器 ├── packet.py # 数据包定义 ├── gen_router.py # 路由器代码生成器 ├── gen_tcp_endpoint.py # TCP端点代码生成器 ├── simulation.py # 模拟控制器 ├── algorithm_performance_test.py # 算法性能对比测试 ├── art.py # ART算法实现 ├── fec.py # FEC算法实现 ├── qmix_training.py # QMIX强化学习训练 ├── qmix_inference.py # QMIX模型推理 ├── qmix_model.py # QMIX神经网络模型 ├── simulation_config.json # 实验配置文件 ├── current_state.json # AI训练状态输入 ├── reward_metrics.json # AI训练奖励输出 ├── CLAUDE.md # 项目详细文档 ├── router/ # 生成的路由器代码 │ ├── router_0.py │ ├── router_1.py │ └── ... ├── tcp_endpoint/ # 生成的TCP端点代码 │ ├── tcp_endpoint_0.py │ └── tcp_endpoint_1.py ├── stats/ # 单次实验统计数据 │ ├── tcp_endpoint_0_stats.json │ ├── router_*_stats.json │ └── simulation_summary.json ├── result/ # 对比测试结果 │ └── algorithm_test_[时间戳]/ │ ├── rtt_100ms_test_results.json │ ├── algorithm_comparison_rtt_100ms.png │ └── rtt_100ms_performance_report.txt └── log/ # 进程运行日志 └── [时间戳]/ ├── router_0.log ├── tcp_endpoint_0.log └── ... ``` ## 实验设计指南 ### 单一算法测试 1. 修改`config.py`中的参数设置 2. 设置目标算法的开关(如`ART_ENABLE = True`) 3. 运行单次实验观察基本性能 ### 多算法对比测试 1. 使用`algorithm_performance_test.py`进行批量测试 2. 系统会自动测试多种算法组合 3. 生成对比图表和详细分析报告 ### 参数敏感性分析 1. 固定其他变量,变化单一参数 2. 观察性能指标的变化趋势 3. 找到最优参数配置 ### AI训练实验 1. 准备足够的训练数据(多种网络状态) 2. 配置QMIX算法参数 3. 进行模型训练和验证 ## 故障排除 ### 常见问题 - **端口占用**:确保UDP端口未被其他程序占用 - **权限问题**:Windows环境下可能需要管理员权限 - **进程残留**:实验异常终止后手动清理残留进程 - **内存不足**:大规模测试时注意监控系统资源 ### 调试技巧 - 查看`log/`目录下的详细日志 - 使用`debug=True`模式运行模拟 - 检查`stats/`目录中的中间统计数据 - 验证`simulation_config.json`配置正确性 ## 扩展开发 ### 添加新算法 1. 在相应模块中实现新算法类 2. 在`gen_tcp_endpoint.py`中集成算法逻辑 3. 在`algorithm_performance_test.py`中添加测试配置 4. 更新配置参数和统计指标 ### 自定义网络拓扑 1. 修改节点生成器支持新拓扑 2. 调整路由逻辑适应拓扑变化 3. 更新统计收集机制 ### 集成新的AI算法 1. 实现新的强化学习算法接口 2. 适配状态空间和动作空间定义 3. 更新训练和推理流程 ## 技术支持 - **项目文档**:详见`CLAUDE.md` - **算法原理**:参考各算法模块的注释 - **性能分析**:使用内置的统计和可视化功能 - **开发指南**:遵循现有代码风格和架构模式 ## 注意事项 - **系统兼容性**:Windows环境下使用Git Bash运行Python文件 - **网络环境**:确保防火墙允许UDP通信 - **资源管理**:大规模测试时注意系统资源消耗 - **数据备份**:重要实验结果及时备份到`result/`目录外