fastdds服务发现报文分析
注意
在抓包时偶然发现在不同的机器上服务发现的数据是不太一样的,已经测试过同一机器运行客户端服务端,不同机器运行客户端服务端,开启SHM或者关闭SHM 发现的数据都是可能不同的,因为服务发现的参数列表(QOS)允许厂商自定义的信息,某些参数可能还会以列表形式下发,根据机器的不同参数的不同所以数据会有所差异,以下是不同的抓包数据截图
名称 | 功能 |
---|---|
INFO_TS | 指示该条RTPS消息被发送时的时间戳。 |
INFO_DST | 指示在该条RTPS消息中,INFO_DST后面的子消息的处理者RTPS reader实体的GuidPrefix为INFO_DST.GuidPrefix。 |
DATA(p) | 数据消息,包含参与者的属性信息,即PDP消息。 |
DATA(w) | 数据消息,包含userWriter的属性信息。当发布端userWriter创建成功后,该消息会被发送给订阅端。 |
DATA(r) | 数据消息,包含userReader的属性信息。当订阅端userReader创建成功后,该消息会被发送给发布端。 |
DATA | 数据消息,包含用户发送的实际消息内容。 |
HEARTBEAT | 该消息有两个功能: 1. 它通知Reader在Writer的历史缓存中可用的序列号,这样Reader就可以请求(使用一个AckNack消息)任何已经错过的内容。 2. 它要求Reader发送对已进入Reader历史缓存的CacheChange更改的确认,以便Writer了解Reader的状态。 所有Heartbeat消息都有第一个功能。也就是说,Reader总是会发现writer的HistoryCache的状态,并可能请求它所遗漏的内容。通常,如果它丢失了一个CacheChange,RTPS Reader会发送一个AckNack消息。 Writer使用FinalFlag请求Reader对它收到的序列号发送确认信息。如果Heartbeat设置了FinalFlag,那么Reader就不需要回AckNack消息了。但是,如果没有设置FinalFlag,那么Reader必须发送一个AckNack消息,指示它已经接收到哪些缓存更改,即使AckNack指出它已经在Writer的历史缓存中获得了所有的CacheChange更改。 |
ACKNACK | 该子消息用于将Reader的状态通知Writer。该子消息允许Reader告知Writer所收到的序列号,以及它仍然缺少的序列号。这个子消息可以用来做正常应答以及异常应答。 ACKNACK消息中元素readerSNState,所有在readerSNState.base之前的序列号是已经被Reader确认收到的。出现在集合里面的序列号是Reader没有收到的序列号。 |
开始
以下数据都是16进制显示的数据
以数据包最大的开始数据包分析
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
0000 01 00 5e 7f 00 01 62 ef 4a 7b d3 bb 08 00 45 00
0010 02 48 81 af 00 00 01 11 00 00 c0 a8 0f 67 ef ff
0020 00 01 f2 c0 1c e8 02 34 c2 55 52 54 50 53 02 03
0030 01 0f 01 0f 97 16 a4 12 a9 9f 00 00 00 00 09 01
0040 08 00 bc 04 12 66 28 64 e7 99 15 05 cc 01 00 00
0050 10 00 00 01 00 c7 00 01 00 c2 00 00 00 00 01 00
0060 00 00 00 03 00 00 15 00 04 00 02 03 00 00 16 00
0070 04 00 01 0f 00 00 50 00 10 00 01 0f 97 16 a4 12
0080 a9 9f 00 00 00 00 00 00 01 c1 07 80 04 00 11 00
0090 00 00 32 00 18 00 01 00 00 00 f2 1c 00 00 00 00
00a0 00 00 00 00 00 00 00 00 00 00 c0 a8 0f 67 32 00
00b0 18 00 01 00 00 00 f2 1c 00 00 00 00 00 00 00 00
00c0 00 00 00 00 00 00 c0 a8 38 01 31 00 18 00 10 00
00d0 00 00 f3 1c 00 00 55 97 16 00 00 00 00 00 00 00
00e0 00 00 00 00 00 00 31 00 18 00 01 00 00 00 f3 1c
00f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 c0 a8
0100 0f 67 31 00 18 00 01 00 00 00 f3 1c 00 00 00 00
0110 00 00 00 00 00 00 00 00 00 00 c0 a8 38 01 02 00
0120 08 00 14 00 00 00 00 00 00 00 58 00 04 00 3f 0c
0130 0f 00 62 00 14 00 10 00 00 00 50 61 72 74 69 63
0140 69 70 61 6e 74 5f 73 75 62 00 59 00 c8 00 04 00
0150 00 00 11 00 00 00 50 41 52 54 49 43 49 50 41 4e
0160 54 5f 54 59 50 45 00 00 00 00 07 00 00 00 53 49
0170 4d 50 4c 45 00 00 1b 00 00 00 66 61 73 74 64 64
0180 73 2e 70 68 79 73 69 63 61 6c 5f 64 61 74 61 2e
0190 68 6f 73 74 00 00 23 00 00 00 44 45 53 4b 54 4f
01a0 50 2d 32 34 30 32 30 49 52 3a 34 30 30 30 36 33
01b0 37 38 37 38 32 35 31 30 32 38 34 38 00 00 1b 00
01c0 00 00 66 61 73 74 64 64 73 2e 70 68 79 73 69 63
01d0 61 6c 5f 64 61 74 61 2e 75 73 65 72 00 00 03 00
01e0 00 00 76 6d 00 00 1e 00 00 00 66 61 73 74 64 64
01f0 73 2e 70 68 79 73 69 63 61 6c 5f 64 61 74 61 2e
0200 70 72 6f 63 65 73 73 00 00 00 05 00 00 00 34 37
0210 37 32 00 00 00 00 01 00 00 00 80 01 38 00 01 00
0220 00 00 e8 1c 00 00 00 00 00 00 00 00 00 00 00 00
0230 00 00 ef ff 00 01 bc 04 12 66 47 f2 f0 99 02 00
0240 00 00 00 00 00 00 58 04 00 00 00 00 00 00 00 00
0250 00 00 00 00 00 00
报文总字节数 598 字节,使用的 fastdds
以太网帧
1
0000 01 00 5e 7f 00 01 62 ef 4a 7b d3 bb 08 00
- 目的地址
01 00 5e 7f 00 01
- 源地址
62 ef 4a 7b d3 bb
- 类型
08 00
对应协议 IPV4
IP 帧
1
2
0000 45 00 02 48 81 af 00 00 01 11 00 00 c0 a8 0f 67
0010 ef ff 00 01
- 版本
4
–>IPV4 - 报头长度
20
字节 这个单位是 4 字节所以是5*4=20字节
- 服务类型质量
0
CS0 默认值
- IP 包总长度
02 48
==584 字节 - ID 标识符
81 af
- flag 为 0 没有分片
- TTL
1
- 协议
0x11
对应 udp 协议 - 头部校验 这里貌似是硬件校验的缘故所以是 0
- 源地址
c0 a8 0f 67
转换后是192.168.15.103
- 目的地址
ef ff 00 01
转换后是239.255.0.1
udp 头
1
0000 f2 c0 1c e8 02 34 c2 55
- 源端口
f2 c0
对应62144
- 目的端口
1c e8
对应7400
- 数据报长度
02 34
564 字节除去头那就是 556 个字节 - 校验和
c2 55
rtps 协议(udp 数据部分)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
0000 52 54 50 53 02 03 01 0f 01 0f 97 16 a4 12 a9 9f
0010 00 00 00 00 09 01 08 00 bc 04 12 66 28 64 e7 99
0020 15 05 cc 01 00 00 10 00 00 01 00 c7 00 01 00 c2
0030 00 00 00 00 01 00 00 00 00 03 00 00 15 00 04 00
0040 02 03 00 00 16 00 04 00 01 0f 00 00 50 00 10 00
0050 01 0f 97 16 a4 12 a9 9f 00 00 00 00 00 00 01 c1
0060 07 80 04 00 11 00 00 00 32 00 18 00 01 00 00 00
0070 f2 1c 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0080 c0 a8 0f 67 32 00 18 00 01 00 00 00 f2 1c 00 00
0090 00 00 00 00 00 00 00 00 00 00 00 00 c0 a8 38 01
00a0 31 00 18 00 10 00 00 00 f3 1c 00 00 55 97 16 00
00b0 00 00 00 00 00 00 00 00 00 00 00 00 31 00 18 00
00c0 01 00 00 00 f3 1c 00 00 00 00 00 00 00 00 00 00
00d0 00 00 00 00 c0 a8 0f 67 31 00 18 00 01 00 00 00
00e0 f3 1c 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00f0 c0 a8 38 01 02 00 08 00 14 00 00 00 00 00 00 00
0100 58 00 04 00 3f 0c 0f 00 62 00 14 00 10 00 00 00
0110 50 61 72 74 69 63 69 70 61 6e 74 5f 73 75 62 00
0120 59 00 c8 00 04 00 00 00 11 00 00 00 50 41 52 54
0130 49 43 49 50 41 4e 54 5f 54 59 50 45 00 00 00 00
0140 07 00 00 00 53 49 4d 50 4c 45 00 00 1b 00 00 00
0150 66 61 73 74 64 64 73 2e 70 68 79 73 69 63 61 6c
0160 5f 64 61 74 61 2e 68 6f 73 74 00 00 23 00 00 00
0170 44 45 53 4b 54 4f 50 2d 32 34 30 32 30 49 52 3a
0180 34 30 30 30 36 33 37 38 37 38 32 35 31 30 32 38
0190 34 38 00 00 1b 00 00 00 66 61 73 74 64 64 73 2e
01a0 70 68 79 73 69 63 61 6c 5f 64 61 74 61 2e 75 73
01b0 65 72 00 00 03 00 00 00 76 6d 00 00 1e 00 00 00
01c0 66 61 73 74 64 64 73 2e 70 68 79 73 69 63 61 6c
01d0 5f 64 61 74 61 2e 70 72 6f 63 65 73 73 00 00 00
01e0 05 00 00 00 34 37 37 32 00 00 00 00 01 00 00 00
01f0 80 01 38 00 01 00 00 00 e8 1c 00 00 00 00 00 00
0200 00 00 00 00 00 00 00 00 ef ff 00 01 bc 04 12 66
0210 47 f2 f0 99 02 00 00 00 00 00 00 00 58 04 00 00
0220 00 00 00 00 00 00 00 00 00 00 00 00
RTPS Header 结构
fastdds 的消息头部结构定义在fastdds/rtps/messages/RTPS_messages.h
此结构未包含protocol
字段
是在创建消息头的时候固定添加的RTPS
位于cpp/rtps/messages/RTPSMessageCreator.cpp
protocol
对应52 54 50 53
即 RTPS
此值在规范中已固定PROTOCOL_RTPS
version
对应02 03
即版本为2.3
截至20240402最新版本为2.5
在fastdds源码fastdds/rtps/common/Types.h
如果启用宏HAVE_SECURITY则默认是2.3 否则默认是2.2
vendorId
对应01 0f
即对应eProsima
可在https://portals.omg.org/dds/dds-rtps-vendor-and-product-ids/ 网址中查询或者向OMG官方注册
在fastdds代码中的位置
fastdds/rtps/common/VendorId_t.hpp
官网查询结果
guidPrefix
对应 01 0f 97 16 a4 12 a9 9f 00 00 00 00
这是当前公共的guid前缀
头部扩展
当前抓包是没有的,因为是在2.5版本中加入的,不破坏原有的结构,此结构符合子消息的格式在老版本中会被判定为未知消息所忽略
子消息
可以有多个子消息的按照以下结构排列
CDR编码后的子消息结构
子消息ID
子消息的类型是固定的在协议中规定如下
头部扩展是2.5新增的之前的版本是没有的
在fastdds中定义如下include/fastdds/rtps/messages/RTPS_messages.h
- 实体子消息
- Data 包含有关应用程序数据对象值的信息。数据子消息由Writer发送给Reader。
- DataFrag 等效于Data,但只包含新值的一部分(一个或多个片段)。允许数据作为多个片段传输,以克服传输消息大小的限制。
- Hearbeat 描述Writer中可用的信息。Hearbeat消息由一个Writer发送给一个或多个Reader。
- HeartbeatFrag 对于碎片数据,描述了写入程序中可用的碎片。HeartbeatFrag消息由Writer发送给一个或多个Reader。
- Gap 描述与Reader不再相关的信息。Gap消息由Writer发送给一个或多个Reader。
- AckNack 向Writer提供有关Reader状态的信息。AckNack消息由Reader发送给一个或多个Writer。
- NackFrag向Writer提供有关Reader状态的信息,更具体地说,是Reader仍缺少哪些片段。NackFrag消息由Reader发送给一个或多个Writer。
- 解释器子消息
- HeaderExtension 提供逻辑上属于RTPS报头的其他信息。附加信息包含在此子消息中,而不是HTPS报头,以保持与RTPS协议早期版本的互操作性。RTPS 2.4版和早期版本无法处理HeaderExtension,将跳过此子消息。
- InfoSource 提供有关后续实体子消息来源的信息。该子消息主要用于中继RTPS子消息。当前规范中未对此进行讨论。
- InfoDestination 提供有关子序列实体子消息的最终目标的信息。该子消息主要用于中继RTPS子消息。当前规范中未对此进行讨论。
- InfoReply 提供有关在何处回复在后续子消息中出现的实体的信息。
- InfoTimestamp 为后续的实体子消息提供一个源时间戳
- Pad 如果需要用于内存对齐,则用于向消息中添加填充。
flag
当前抓取的报文第一个子消息 flag值为0x01
即EndiannessFlag 值为true 所以使用小段编码
其他的位是根据具体的子消息类型来确定其意义的
submessageLength
子消息的长度(不包括子消息报头)
又称为octetsToNextHeader 是一个CDR无符号短整型(ushort)
如果子信息长度>0
- 从子消息的内容开始到下一个子消息的报头开始的长度(如果子消息不是消息中的最后一条子消息)。
- 或者它是剩余的消息长度(如果子消息是消息中的最后一条子消息)。消息的解释器可以区分这两种情况,因为它知道消息的总长度。
如果submessageLength==0,则子消息是消息中的最后一条子消息,并一直延伸到消息的末尾。这使得可以发送大于64k的子消息(可存储在子消息长度字段中的最大长度),前提是它们是消息中的最后一条子消息
当前第一个子消息
1
0000 09 01 08 00 bc 04 12 66 28 64 e7 99
- ID 0x09 代表InfoTimestamp 用于为后续子消息提供源时间戳
- flag 0x01
- flag&0x01==true 小端
- flag&0x02=false 代表后续的子消息是否应该被认为具有时间戳 此值为false 代表是有效时间戳
- 数据长度
08 00
因为是小端所以是8字节 - 时间戳
bc 04 12 66 28 64 e7 99
转换后是Apr 7, 2024 02:28:12.601187000 UTC
当前第二个子消息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
0000 15 05 cc 01 00 00 10 00 00 01 00 c7 00 01 00 c2
0010 00 00 00 00 01 00 00 00 00 03 00 00 15 00 04 00
0020 02 03 00 00 16 00 04 00 01 0f 00 00 50 00 10 00
0030 01 0f 97 16 a4 12 a9 9f 00 00 00 00 00 00 01 c1
0040 07 80 04 00 11 00 00 00 32 00 18 00 01 00 00 00
0050 f2 1c 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0060 c0 a8 0f 67 32 00 18 00 01 00 00 00 f2 1c 00 00
0070 00 00 00 00 00 00 00 00 00 00 00 00 c0 a8 38 01
0080 31 00 18 00 10 00 00 00 f3 1c 00 00 55 97 16 00
0090 00 00 00 00 00 00 00 00 00 00 00 00 31 00 18 00
00a0 01 00 00 00 f3 1c 00 00 00 00 00 00 00 00 00 00
00b0 00 00 00 00 c0 a8 0f 67 31 00 18 00 01 00 00 00
00c0 f3 1c 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00d0 c0 a8 38 01 02 00 08 00 14 00 00 00 00 00 00 00
00e0 58 00 04 00 3f 0c 0f 00 62 00 14 00 10 00 00 00
00f0 50 61 72 74 69 63 69 70 61 6e 74 5f 73 75 62 00
0100 59 00 c8 00 04 00 00 00 11 00 00 00 50 41 52 54
0110 49 43 49 50 41 4e 54 5f 54 59 50 45 00 00 00 00
0120 07 00 00 00 53 49 4d 50 4c 45 00 00 1b 00 00 00
0130 66 61 73 74 64 64 73 2e 70 68 79 73 69 63 61 6c
0140 5f 64 61 74 61 2e 68 6f 73 74 00 00 23 00 00 00
0150 44 45 53 4b 54 4f 50 2d 32 34 30 32 30 49 52 3a
0160 34 30 30 30 36 33 37 38 37 38 32 35 31 30 32 38
0170 34 38 00 00 1b 00 00 00 66 61 73 74 64 64 73 2e
0180 70 68 79 73 69 63 61 6c 5f 64 61 74 61 2e 75 73
0190 65 72 00 00 03 00 00 00 76 6d 00 00 1e 00 00 00
01a0 66 61 73 74 64 64 73 2e 70 68 79 73 69 63 61 6c
01b0 5f 64 61 74 61 2e 70 72 6f 63 65 73 73 00 00 00
01c0 05 00 00 00 34 37 37 32 00 00 00 00 01 00 00 00
- ID 0x15 代表DATA是从RTPS Writer发送到RTPS Reader
- flag 0x05
- flag&0x01==true 小端
- flag&0x02==false 不包含inlineQos
- flag&0x04==true 有序列化后的有效数据
- flag&0x08==false 不包含key
- flag&0x10==false 代表是按照规定序列化的(貌似是新的)
- 数据长度
cc 01
469字节 - 扩展flag 占位符为以后扩展准备 暂时为0
- octetsToInlineQos
10 00
小端所以是16 代表当前开始到inlineQos(不存在就inlineQos下一个字段)的偏移量,这里偏移16后是序列化的数据的起始地址 - readerId 标识通知更改的RTPS Reader实体 这里是
00 01 00 c7
- writerId标识已对数据对象进行更改的RTPS Writer 实体这里是
00 01 00 c2
- 数据发送序号 这里是
00 00 00 00 01 00 00 00
分高位低位 这里高位为0 低位为1 所以序号为0x01 - 剩下的部分为序列化后的PDP数据
PDP
按照RTPS协议规定 PDP的发现信息应当包含domainID和domainTag字段,这里从源码上看fastdds将这两个字段省略了(不可配置那种省略)。
domainID 是与端口相关的是属于物理隔离,就是说如果两个APP的domainID不同那么他们呢根本无法接受到彼此的发现流量
domainTag 是属于逻辑隔离,即当domainTag不同的数据会被忽略,fastdds这么做就是将domainTag认为是空,所以fastdds想要其他dds通讯的话其他dd是的此字段也要相应置空
这里抓rti的包是有domainID字段的,domainTag是可选的,默认不存在,但是rti是支持domainTag的可通过qos设置,
PRES_PARTICIPANT_DOMAIN_TAG_PROPERTY_NAME
00 03
这个是CDR的序列化类型,详见第10章节00 00
options未使用设置为0详见第10章节15 00 04 00 02 03 00 00
- 参数ID
15 00
代表 PID_PROTOCOL_VERSION 协议版本 - 长度
04 00
4字节 - 数据
02 03
代表版本2.3
- 参数ID
16 00 04 00 01 0f 00 00
- 参数ID
16 00
代表 PID_VENDOR_ID 厂商ID - 长度
04 00
4字节 - 数据
01 0f 00 00
查表得知代表为eProsima的FastRTPS, FastDDS
- 参数ID
50 00 10 00 01 0f 97 16 a4 12 a9 9f 00 00 00 00 00 00 01 c1
- 参数ID
50 00
代表 PID_PARTICIPANT_GUID 参与制GUID - 长度
10 00
16字节 - 数据
01 0f 97 16 a4 12 a9 9f 00 00 00 00 00 00 01 c1
GUID为010f9716-a412a99f-00000000-000001c1
- 参数ID
07 80 04 00 11 00 00 00
- 参数ID
07 80
这是厂商的自定义ID 这里代表远程网络配置 - 长度
04 00
4字节 - 数据
11 00 00 00
- 参数ID
32 00 18 00 01 00 00 00 f2 1c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 c0 a8 0f 67
- 参数ID
32 00
代表PID_METATRAFFIC_UNICAST_LOCATOR 是元数据单播的地址信息 - 长度
18 00
24字节 - 数据
01 00 00 00 f2 1c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 c0 a8 0f 67
01 00 00 00
代表传输类型为UDPV4f2 1c 00 00
代表端口为741000 00 00 00 00 00 00 00 00 00 00 00 c0 a8 0f 67
代表地址为192.168.15.103
- 参数ID
32 00 18 00 01 00 00 00 f2 1c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 c0 a8 38 01
- 参数ID
32 00
代表PID_METATRAFFIC_UNICAST_LOCATOR 是元数据单播的地址信息 - 长度
18 00
24字节 - 数据
01 00 00 00 f2 1c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 c0 a8 38 01
01 00 00 00
代表传输类型为UDPV4f2 1c 00 00
代表端口为741000 00 00 00 00 00 00 00 00 00 00 00 c0 a8 38 01
代表地址为192.168.56.1
- 参数ID
31 00 18 00 10 00 00 00 f3 1c 00 00 55 97 16 00 00 00 00 00 00 00 00 00 00 00 00 00
- 参数ID
31 00
代表PID_DEFAULT_UNICAST_LOCATOR 参与者内部端点的默认通信地址信息 - 长度
18 00
24字节 - 数据
10 00 00 00 f3 1c 00 00 55 97 16 00 00 00 00 00 00 00 00 00 00 00 00 00
- 参数ID
31 00 18 00 01 00 00 00 f3 1c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 c0 a8 0f 67
- 参数ID
31 00
代表PID_DEFAULT_UNICAST_LOCATOR 参与者内部端点的默认通信地址信息 - 长度
18 00
24字节 - 数据
01 00 00 00 f3 1c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 c0 a8 0f 67
01 00 00 00
代表传输类型为UDPV4f3 1c 00 00
代表端口为741100 00 00 00 00 00 00 00 00 00 00 00 c0 a8 0f 67
代表地址为192.168.15.103
- 参数ID
31 00 18 00 01 00 00 00 f3 1c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 c0 a8 38 01
- 参数ID
31 00
代表PID_DEFAULT_UNICAST_LOCATOR 参与者内部端点的默认通信地址信息 - 长度
18 00
24字节 - 数据
01 00 00 00 f3 1c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 c0 a8 38 01
01 00 00 00
代表传输类型为UDPV4f3 1c 00 00
代表端口为741100 00 00 00 00 00 00 00 00 00 00 00 c0 a8 38 01
代表地址为192.168.56.1
- 参数ID
02 00 08 00 14 00 00 00 00 00 00 00
- 参数ID
02 00
代表PID_PARTICIPANT_LEASE_DURATION租赁时间,每当从参与者接收到公告时,应认为参与者存活的时间长度 - 长度
08 00
8字节 - 数据
14 00 00 00 00 00 00 00
代表租赁时间为20秒
- 参数ID
58 00 04 00 3f 0c 0f 00
- 参数ID
58 00
代表PID_VENDOR_BUILTIN_ENDPOINT_SET 此属性标识参与者中可用的内建SEDP端点类型 - 长度
04 00
4字节 - 数据
3f 0c 0f 00
=> 转换后(注意字节序)00000000000011110000110000111111
- data & (0x01 < 0) == true : PARTICIPANT_ANNOUNCER
- data & (0x01 < 1) == true : PARTICIPANT_DETECTOR
- data & (0x01 < 2) == true : PUBLICATIONS_ANNOUNCER
- data & (0x01 < 3) == true : PUBLICATIONS_DETECTOR
- data & (0x01 < 4) == true : SUBSCRIPTIONS_ANNOUNCER
- data & (0x01 < 5) == true : SUBSCRIPTIONS_DETECTOR
- data & (0x01 < 6) == false : PARTICIPANT_PROXY_ANNOUNCER
- data & (0x01 < 7) == false : PARTICIPANT_PROXY_DETECTOR
- data & (0x01 < 8) == false : PARTICIPANT_STATE_ANNOUNCER
- data & (0x01 < 9) == false : PARTICIPANT_STATE_DETECTOR
- data & (0x01 < 10) == true : PARTICIPANT_MESSAGE_DATA_WRITER
- data & (0x01 < 11) == true : PARTICIPANT_MESSAGE_DATA_READER
- data & (0x01 < 12) == true : x-type TypeLookupServiceRequestDataWriter
- data & (0x01 < 13) == true : x-type TypeLookupServiceRequestDataReader
- data & (0x01 < 14) == true : x-type TypeLookupServiceReplyDataWriter
- data & (0x01 < 15) == true : x-type TypeLookupServiceReplyDataReader
- data & (0x01 < 16) == false : security SEDPbuiltinPublicationsSecureWriter
- data & (0x01 < 17) == false : security SEDPbuiltinPublicationsSecureReader
- data & (0x01 < 18) == false : security SEDPbuiltinSubscriptionsSecureWriter
- data & (0x01 < 19) == false : security SEDPbuiltinSubscriptionsSecureReader
- data & (0x01 < 20) == false : security BuiltinParticipantMessageSecureWriter
- data & (0x01 < 21) == false : security SEDPbuiltinSubscriptionsSecureReader
- data & (0x01 < 22) == false : security BuiltinParticipantStatelessMessageWriter
- data & (0x01 < 23) == false : security BuiltinParticipantStatelessMessageReader
- data & (0x01 < 24) == false : security BuiltinParticipantVolatileMessageSecureWriter
- data & (0x01 < 25) == false : security BuiltinParticipantVolatileMessageSecureReader
- data & (0x01 < 26) == false : security SPDPbuiltinParticipantSecureWriter
- data & (0x01 < 27) == false : security SPDPbuiltinParticipantSecureReader
- data & (0x01 < 28) == false : TOPICS_ANNOUNCER
- data & (0x01 < 29) == false : TOPICS_DETECTOR
- 参数ID
62 00 14 00 10 00 00 00 50 61 72 74 69 63 69 70 61 6e 74 5f 73 75 62 00
- 参数ID
62 00
代表PID_ENTITY_NAME 这个可以代表一个DDS实体(如参与者、发布者、订阅者、主题等)的名称信息 这里fastdds是代表的是参与者名称 - 长度
14 00
20字节 - 数据
10 00 00 00 50 61 72 74 69 63 69 70 61 6e 74 5f 73 75 62 00
10 00 00 00
字符串长度16字节50 61 72 74 69 63 69 70 61 6e 74 5f 73 75 62 00
参与者名称Participant_sub
- 参数ID
59 00 c8 00 04 00 00 00 11 00 00 00 50 41 52 54 49 43 49 50 41 4e 54 5f 54 59 50 45 00 00 00 00 07 00 00 00 53 49 4d 50 4c 45 00 00 1b 00 00 00 66 61 73 74 64 64 73 2e 70 68 79 73 69 63 61 6c 5f 64 61 74 61 2e 68 6f 73 74 00 00 23 00 00 00 44 45 53 4b 54 4f 50 2d 32 34 30 32 30 49 52 3a 34 30 30 30 36 33 37 38 37 38 32 35 31 30 32 38 34 38 00 00 1b 00 00 00 66 61 73 74 64 64 73 2e 70 68 79 73 69 63 61 6c 5f 64 61 74 61 2e 75 73 65 72 00 00 03 00 00 00 76 6d 00 00 1e 00 00 00 66 61 73 74 64 64 73 2e 70 68 79 73 69 63 61 6c 5f 64 61 74 61 2e 70 72 6f 63 65 73 73 00 00 00 05 00 00 00 34 37 37 32 00 00 00 00
- 参数ID
59 00
代表PID_PROPERTY_LIST 携带的用户自定义属性集(注意是使用pl_cdr序列化的,这里可能是4字节对齐的填充) - 长度
c8 00
200字节 - 列表元素数量
04 00 00 00
4个元素 11 00 00 00 50 41 52 54 49 43 49 50 41 4e 54 5f 54 59 50 45 00 00 00 00 07 00 00 00 53 49 4d 50 4c 45 00 00
- 第一个属性的名称,长度为(
11 00 00 00
)17字节的字符串PARTICIPANT_TYPE
- 第一个属性的值,长度为(
07 00 00 00
)7字节的字符串SIMPLE
- 第一个属性的名称,长度为(
1b 00 00 00 66 61 73 74 64 64 73 2e 70 68 79 73 69 63 61 6c 5f 64 61 74 61 2e 68 6f 73 74 00 00 23 00 00 00 44 45 53 4b 54 4f 50 2d 32 34 30 32 30 49 52 3a 34 30 30 30 36 33 37 38 37 38 32 35 31 30 32 38 34 38 00 00
- 第二个属性的名称,长度为(
1b 00 00 00
)27字节的字符串fastdds.physical_data.host
- 第二个属性的值,长度为(
23 00 00 00
)35字节的字符串DESKTOP-24020IR:400063787825102848
- 第二个属性的名称,长度为(
1b 00 00 00 66 61 73 74 64 64 73 2e 70 68 79 73 69 63 61 6c 5f 64 61 74 61 2e 75 73 65 72 00 00 03 00 00 00 76 6d 00 00
- 第三个属性的名称,长度为(
1b 00 00 00
)27字节的字符串fastdds.physical_data.user
- 第三个属性的值,长度为(
03 00 00 00
)3字节的字符串vm
- 第三个属性的名称,长度为(
1e 00 00 00 66 61 73 74 64 64 73 2e 70 68 79 73 69 63 61 6c 5f 64 61 74 61 2e 70 72 6f 63 65 73 73 00 00 00 05 00 00 00 34 37 37 32 00 00 00 00
- 第四个属性的名称,长度为(
1e 00 00 00
)30字节的字符串fastdds.physical_data.process
- 第四个属性的值,长度为(
05 00 00 00
)5字节的字符串4772
- 第四个属性的名称,长度为(
- 参数ID
01 00 00 00
代表PID_SENTINEL结束标志