实时发布订阅协议
(RTPS)
DDS互操作性
有线协议规范
V2.2
(2014-09-01正式发布)
https://www.omg.org/spec/DDSI-RTPS/2.2/PDF
目 录
1 范围Scope 9
2 一致性Conformance 9
3 参考文献References 9
4 术语和定义Terms and Definitions 9
5 缩略语Symbols 9
6 附加信息Additional Information 10
6.1 对OMG规范的修改Changes to Adopted OMG Specifications 10
6.2 如何阅读本文How to Read this Specification 10
6.3 致谢Acknowledgements 10
6.4 概念证明Statement of Proof of Concept 11
7 概述Overview 11
7.1 序言Introduction 11
7.2 DDS网络协议的要求Requirements for a DDS Wire-protocol 12
7.3 RTPS网络协议. 13
7.4 RTPS平台无关模型(Platform Independent Model,PIM). 13
7.4.1 结构模块Structure Module 14
7.4.2 消息模块Messages Module 15
7.4.3 行为模块Behavior Module 16
7.4.4 发现模块Discovery Module 16
7.5 RTPS平台特定模型(Platform Specific Model,PSM). 17
7.6 RTPS传输模型Transport Model 17
8 平台无关模型(Platform Independent Model,PIM). 18
8.1 简介Introduction 18
8.2 结构模块Structure Module 18
8.2.1 概述. 18
8.2.1.1 RTPS虚拟机使用的类摘要. 19
8.2.1.2 用于描述RTPS实体和类的类型摘要. 20
8.2.1.3 RTPS实体的配置属性. 21
8.2.2 RTPS历史缓存HistoryCache 22
8.2.2.1 new 24
8.2.2.2 add_change 24
8.2.2.3 remove_change 24
8.2.2.4 get_seq_num_min 24
8.2.2.5 get_seq_num_max 24
8.2.3 RTPS缓存更改CacheChange 25
8.2.4 RTPS实体Entity 25
8.2.4.1 识别RTPS实体:GUID 25
8.2.4.2 RTPS参与者指南. 26
8.2.4.3 参与者内RTPS端点的GUID 26
8.2.5 RTPS参与者Participant 26
8.2.6 RTPS端点Endpoint 27
8.2.7 RTPS编写器Writer 28
8.2.8 RTPS读取器Reader 28
8.2.9 与DDS实体的关系Relation to DDS Entities 28
8.2.9.1 DDS DataWriter 29
8.2.9.2 DDS数据读取器. 32
8.3 消息模块Messages Module 34
8.3.1 概述. 34
8.3.2 类型定义Type Definitions 34
8.3.3 RTPS消息的整体结构The Overall Structure of an RTPS Message 35
8.3.3.1 Header结构. 36
8.3.3.2 Submessage结构. 38
8.3.4 RTPS消息接收者The RTPS Message Receiver 40
8.3.5 RTPS子消息元素SubmessageElements 41
8.3.5.1 GuidPrefix和EntityId 42
8.3.5.2 VendorId 42
8.3.5.3 ProtocolVersion 43
8.3.5.4 SequenceNumber 43
8.3.5.5 SequenceNumberSet 43
8.3.5.6 FragmentNumber 44
8.3.5.7 提供32位片段编号的值。. 44
8.3.5.8 Timestamp 44
8.3.5.9 ParameterList 45
8.3.5.10 Count 45
8.3.5.11 LocatorList 45
8.3.5.12 SerializedData 46
8.3.5.13 SerializedDataFragment 46
8.3.6 RTPS消息头Header 46
8.3.6.1 目的. 46
8.3.6.2 内容. 46
8.3.6.3 Validity有效性. 46
8.3.6.4 接收方状态变化. 47
8.3.6.5 理论解析. 47
8.3.7 RTPS子消息Submessages 47
8.3.7.1 AckNack 48
8.3.7.2 Data 50
8.3.7.3 DataFrag 52
8.3.7.4 Gap 54
8.3.7.5 Heartbeat 55
8.3.7.6 HeartbeatFrag 56
8.3.7.7 InfoDestination 58
8.3.7.8 InfoReply 59
8.3.7.9 InfoSource 60
8.3.7.10 InfoTimestamp 61
8.3.7.11 NackFrag 62
8.3.7.12 Pad 63
8.4 Behavior Module行为模块. 64
8.4.1 概述. 64
8.4.1.1 示例行为. 64
8.4.2 互操作性Interoperability所需的行为. 66
8.4.2.1 总体要求. 66
8.4.2.2 所需的RTPS编写器行为. 67
8.4.2.3 所需的RTPS读取器行为. 68
8.4.3 RTPS协议的实现. 69
8.4.4 写者对每个匹配读者的行为. 69
8.4.5 符号约定Conventions 70
8.4.6 类型定义Type Definitions 71
8.4.7 RTPS编写器参考实现. 71
8.4.7.1 RTPS Writer 71
8.4.7.2 RTPS StatelessWriter 74
8.4.7.3 RTPS ReaderLocator 76
8.4.7.4 RTPS StatefulWriter 77
8.4.7.5 RTPS ReaderProxy 78
8.4.7.6 RTPS ChangeForReader 82
8.4.8 RTPS无状态写者行为Stateless Writer 82
8.4.8.1 Best-Effort StatelessWriter Behavior 82
8.4.8.2 可靠的StatelessWriter行为. 84
8.4.9 RTPS有状态写者行为 StatefulWriter 89
8.4.9.1 Best Effort StatefulWriter行为. 89
8.4.9.2 可靠的StatefulWriter行为. 92
8.4.9.3 图示了ChangeForReader 98
8.4.10 RTPS读取器参考实现. 100
8.4.10.1 RTPS Reader 100
8.4.10.2 RTPS无状态读取器. 102
8.4.10.3 RTPS StatefulReader 103
8.4.10.4 RTPS WriterProxy 104
8.4.10.5 来自Writer的RTPS更改. 107
8.4.11 RTPS无状态读取器行为StatelessReader Behavior 108
8.4.11.1 尽力而为无状态读取器行为. 108
8.4.11.2 可靠的无状态读取器行为. 109
8.4.12 RTPS有状态写者行为 StatefulReader 109
8.4.12.1 尽最大努力陈述读者行为. 109
8.4.12.2 可靠的StatefulReader行为. 111
8.4.12.3 ChangeFromWriter图示. 115
8.4.13 Writer活跃性Liveliness协议. 116
8.4.13.1 通用方法. 116
8.4.13.2 Writer Liveness协议所需的内置端点. 116
8.4.13.3 3内置参与者消息编写器和内置参与者消息读取器QoS 117
8.4.13.4 Writer Liveness协议使用的与内置端点相关的数据类型. 117
8.4.13.5 使用内置ParticipantMessageWriter和内置Participant MessageReader实现Writer Liveness协议. 117
8.4.14 可选行为Optional Behavior 118
8.4.14.1 大数据. 118
8.4.14.2 可靠通信. 119
8.4.15 实现指南. 119
8.4.15.1 ReaderProxy和WriterProxy的实现. 119
8.4.15.2 Gap和AckNack子消息的有效使用. 120
8.4.15.3 3合并多个数据子消息. 120
8.4.15.4 猪背心跳子消息. 120
8.4.15.5 正在发送到未知的readerId 120
8.4.15.6 从无响应的读者中回收有限的资源. 121
8.4.15.7 设置心跳计数和ACKNACK 121
8.5 发现模块Discovery Module 121
8.5.1 概述. 121
8.5.2 RTPS内置发现端点Built-in Discovery Endpoints 122
8.5.3 简单参与者发现协议(Simple Participant Discovery Protocol,SEDP). 122
8.5.3.1 通用方法. 122
8.5.3.2 SPDPdiscoveredParticipantData 123
8.5.3.3 简单参与者发现协议使用的内置端点. 125
8.5.3.4 简单参与者发现协议使用的逻辑端口. 127
8.5.4 简单端点发现协议(Simple Endpoint Discovery Protocol,Sedp). 127
8.5.4.1 通用方法. 127
8.5.4.2 简单端点发现协议使用的内置端点. 127
8.5.4.3 简单端点发现协议所需的内置端点. 128
8.5.4.4 与简单端点发现协议使用的内置端点关联的数据类型. 128
8.5.5 与RTPS虚拟机virtual machine的交互. 131
8.5.5.1 发现新的远程参与者. 131
8.5.5.2 删除先前发现的参与者. 133
8.5.6 支持备选发现协议Alternative Discovery Protocols 133
8.6 版本控制和可扩展性. 134
8.6.1 此主要版本中允许的扩展. 134
8.6.2 在此主要版本中无法更改的内容. 134
8.7 使用RTPS实现DDS QoS和高级DDS功能. 134
8.7.1 向数据子消息添加内嵌参数Adding in-line Parameters to Data Submessages 135
8.7.2 DDS QoS参数Parameters 135
8.7.2.1 直列DDS QoS参数. 136
8.7.2.2 影响有线协议的DDS QoS参数. 136
8.7.3 内容过滤主题Content-filtered Topics 137
8.7.3.1 使用内置端点交换筛选器信息. 138
8.7.3.2 包括每个数据样本的内联过滤器结果. 138
8.7.3.3 互操作性要求. 139
8.7.4 实例生命周期状态Instance Lifecycle State的更改. 139
8.7.5 相干集Coherent Sets 140
8.7.6 直接写入Directed Write 140
8.7.7 属性列表Property Lists 140
8.7.8 原始写者信息Original Writer Info 141
8.7.9 关键字哈希Key Hash 141
9 平台特定模型(Platform Specific Model,PSM):UDP/IP 141
9.1 简介. 141
9.2 符号约定. 142
9.2.1 命名空间Name Space 142
9.2.2 结构的IDL表示和CDR表示. 142
9.2.3 位和字节的表示Representation of Bits and Bytes 142
9.3 RTPS类型的映射Mapping of the RTPS Types 143
9.3.1 全局唯一标识符(GUID). 143
9.3.1.1 GuidPrefix_t的映射. 143
9.3.1.2 EntityId_t的映射. 143
9.3.1.3 预定义的EntityId 144
9.3.1.4 协议2.2版中已弃用的EntityId 145
9.3.1.5 GUID_t的映射. 145
9.3.2 子消息或内置主题数据中出现的类型映射. 146
9.4 RTPS消息的映射Mapping of the RTPS Messages 150
9.4.1 总体结构. 150
9.4.2 PIM子消息元素的映射. 151
9.4.2.1 EntityId 151
9.4.2.2 GuidPrefix 151
9.4.2.3 VendorId 152
9.4.2.4 ProtocolVersion 152
9.4.2.5 SequenceNumber 152
9.4.2.6 SequenceNumberSet 153
9.4.2.7 FragmentNumber 154
9.4.2.8 FragmentNumberSet 155
9.4.2.9 Timestamp 155
9.4.2.10 LocatorList 156
9.4.2.11 ParameterList 156
9.4.2.12 SerializedPayload 157
9.4.2.13 Count 158
9.4.3 其他子消息元素. 158
9.4.3.1 LocatorUDPv4 158
9.4.4 RTPS报头的映射. 159
9.4.5 RTPS子消息的映射. 159
9.4.5.1 子消息标题. 159
9.4.5.2 AckNack子消息. 161
9.4.5.3 Data子消息. 162
9.4.5.4 DataFrag子消息. 163
9.4.5.5 Gap子消息. 164
9.4.5.6 HeartBeat子消息. 165
9.4.5.7 HeartBeatFrag子消息. 166
9.4.5.8 InfoDestination子消息. 167
9.4.5.9 InfoReply子消息. 167
9.4.5.10 InfoSource子消息. 168
9.4.5.11 InfoTimestamp子消息. 168
9.4.5.12 Pad子消息. 169
9.4.5.13 NackFrag子消息. 169
9.4.5.14 InfoReplyIp4子消息(特定于PSM). 170
9.5 RTPS消息封装Message Encapsulation 171
9.6 RTPS协议的映射Mapping of the RTPS Protocol 171
9.6.1 默认定位器Default Locators 171
9.6.1.1 发现流量. 171
9.6.1.2 用户流量. 172
9.6.1.3 默认端口号. 172
9.6.1.4 简单参与者发现协议的默认设置. 172
9.6.2 内置端点的数据表示Data representation for the built-in Endpoints 173
9.6.2.1 ParticipantMessageData内置端点的数据表示. 173
9.6.2.2 简单发现协议内置端点. 174
9.6.3 用于表示在线QoS的ParameterId定义ParameterId Definitions used to Represent In-line QoS 180
9.6.3.1 内容筛选器信息(PID_Content_filter_info). 181
9.6.3.2 相干集(PID_Coherent_set). 183
9.6.3.3 密钥哈希(PID_KEY_HASH). 183
9.6.3.4 StatusInfo_t (PID_STATUS_INFO) 184
9.6.4 协议2.2版不推荐的参数IDParameterIds Deprecated by Version 2.2 of the Protocol 185
10 数据封装Data Encapsulation 186
10.1 简介. 186
10.2 数据封装Data Encapsulation 186
10.2.1 标准数据封装方案. 186
10.2.1.1 通用方法Standard Data Encapsulation Schemes 186
10.2.1.2 OMG CDR 187
10.2.1.3 ParameterList 187
10.2.2 实例Example 188
10.2.2.1 OMG CDR 188