Day1 分层架构图

12 阅读3分钟
flowchart TB
    subgraph "应用层"
        DP[DomainParticipant<br/>域管理容器]
        PUB[Publisher<br/>发布者分组]
        SUB[Subscriber<br/>订阅者分组]
        DW[DataWriter<br/>数据写入]
        DR[DataReader<br/>数据读取]
        TOP[Topic<br/>通信主题]
        
        DP -->|持有| PUB
        DP -->|持有| SUB
        DP -->|持有| TOP
        PUB -->|持有| DW
        SUB -->|持有| DR
        DW -.->|关联| TOP
        DR -.->|关联| TOP
    end

    subgraph "DDS层"
        DDS_API[DDS标准API实现]
        DCPS[DCPS模型<br/>数据为中心]
        QOS[QoS策略管理<br/>22+种策略]
        
        DP -.->|使用| DDS_API
        DW -.->|配置| QOS
        DR -.->|配置| QOS
    end

    subgraph "RTPS层"
        RTPS[RTPS协议实现]
        WH[WriterHistory<br/>发送缓存]
        RH[ReaderHistory<br/>接收缓存]
        PDP[PDP<br/>参与者发现]
        EDP[EDP<br/>端点发现]
        TA[传输抽象接口]
        
        DW -.->|调用| RTPS
        DR -.->|调用| RTPS
        RTPS --> WH
        RTPS --> RH
        RTPS --> PDP
        RTPS --> EDP
        RTPS --> TA
    end

    subgraph "传输层"
        UDP[UDP传输]
        TCP[TCP传输]
        SHM[共享内存SHM]
        ZC[零拷贝传输]
        
        TA --> UDP
        TA --> TCP
        TA --> SHM
        TA --> ZC
    end

    subgraph "安全层<br/>可选"
        AUTH[身份认证]
        AC[访问控制]
        ENC[数据加密]
        
        RTPS -.->|插件化| AUTH
        RTPS -.->|插件化| AC
        RTPS -.->|插件化| ENC
    end

分层功能说明(5层)

层级核心职责关键组成
应用层管理DDS实体生命周期,提供应用编程接口DomainParticipant持有Publisher/Subscriber/Topic;Publisher持有DataWriter;Subscriber持有DataReader;DataWriter/DataReader关联Topic
DDS层实现OMG DDS标准规范,提供数据为中心通信能力和服务质量策略DDS标准API封装、DCPS发布订阅模型、22+种QoS策略配置与管理
RTPS层实现RTPS有线协议,处理数据序列化、历史缓存管理和节点自动发现RTPS协议核心实现、WriterHistory/ReaderHistory缓存机制、PDP参与者发现协议、EDP端点发现协议、传输层抽象接口
传输层提供底层网络通信能力,支持多种传输协议适配UDPv4/v6传输、TCPv4/v6传输、共享内存SHM传输、零拷贝传输优化
安全层基于DDS-Security规范提供安全机制,可选插件化加载身份认证插件、访问控制插件、数据加密插件、安全审计日志

Day1 学习目标:环境就绪 + 基础Pub/Sub + 理解分层架构

1. 快速自检清单

检验项通过标准状态
能画出架构图不看书能画出5层结构及关系
能定位代码给定一个功能,知道在哪层找代码
能解释数据流write()到网卡,能说出经过哪些层
能处理错误通信失败时,知道从哪层开始排查

2. 分层理解深度自测

Level 1 - 知道有什么(基础达标)

应用层 → DDS层 → RTPS层 → 传输层 → 安全层

Level 2 - 知道怎么用(验证点)

场景你该知道
创建Participant调用DomainParticipantFactory,内部初始化RTPSParticipant
设置QoS修改DDS层策略,最终影响RTPS层行为(如Reliable→StatefulWriter)
选择传输协议修改RTPS层Transport配置,底层切换UDP/TCP/SHM
启用安全加载安全插件,RTPS层在发送前加密数据

Level 3 - 知道为什么(进阶验证)

// 代码对应关系检验
DomainParticipant* dp = DomainParticipantFactory::create_participant(...);
// 这行代码同时创建了:DDS层Participant + RTPS层RTPSParticipant

DataWriter* writer = publisher->create_datawriter(topic, qos);
// 这行代码同时创建了:DDS层DataWriter + RTPS层RTPSWriter + 绑定Topic

## 3. Day2 实战验证任务

### 3.1 验证1:断点跟踪数据流

在pub代码里`write()`处打断点,逐层进入:


```mermaid
DataWriter::write() 
    → DDS层序列化
    → RTPSWriter::new_change()HistoryCache::add_change()Transport::send()

3.2 验证2:修改配置观察行为

修改配置预期观察验证理解
QoS改为BEST_EFFORTWireshark抓包看是否无ACK理解Reliability在RTPS层实现
改用SHM传输/dev/shm下出现共享内存文件理解传输层可替换
增大History深度进程内存占用增加理解HistoryCache作用

3.3 验证3:故意制造错误

// 测试1:不创建Topic直接创建Writer
// 预期:失败 → 验证Topic是DataWriter的必要依赖

// 测试2:两个Participant用不同DomainID
// 预期:无法通信 → 验证DomainParticipant的隔离作用

// 测试3:Publisher创建DataReader
// 预期:编译失败或运行时错误 → 验证层级持有关系

五、理解标准总结

真理解 = 能正向构建 + 能反向排查 + 能横向扩展

能力说明
正向构建给我需求,知道从哪层开始写代码
反向排查给我bug,知道从哪层开始调试
横向扩展给我新协议/新需求,知道改动哪层不影响其他