eProsima Fast DDS 实现了对 TCPv4 和 TCPv6 的支持。以下是有关其传输描述符(TransportDescriptorInterface)的详细解释:
TCP 传输的基本概念
- 独立性:TCPv4 和 TCPv6 的实现是独立的,各自拥有自己的
TransportDescriptorInterface
。 - 共享特性:虽然它们是独立的,但许多功能和数据成员是通用的。
共同的数据成员
以下表格列出了 TCPv4 和 TCPv6 共有的数据成员及其说明:
成员 | 数据类型 | 默认值 | 描述 |
---|---|---|---|
sendBufferSize |
uint32_t |
0 | 套接字的发送缓冲区大小(字节)。 |
receiveBufferSize |
uint32_t |
0 | 套接字的接收缓冲区大小(字节)。 |
netmask_filter |
NetmaskFilterKind |
AUTO | 网络掩码过滤。 |
allowlist |
vector<pair<string, NetmaskFilterKind>> |
空向量 | 允许接口列表及其网络掩码过滤配置。 |
blocklist |
vector<string> |
空向量 | 被阻止接口列表。 |
interfaceWhiteList |
vector<string> |
空向量 | 允许接口列表。 |
TTL |
uint8_t |
1 | 生存时间,单位为跳数。 |
listening_ports |
vector<uint16_t> |
空向量 | 用作服务器监听的端口列表。如果某个端口设置为0,将自动分配可用端口。 |
keep_alive_frequency_ms |
uint32_t |
5000 | RTCP 保持连接请求的频率(毫秒)。 |
keep_alive_timeout_ms |
uint32_t |
15000 | 在发送最后一个保持连接请求后,将连接视为断开的时间(毫秒)。 |
max_logical_port |
uint16_t |
100 | 在 RTCP 协商期间尝试的最大逻辑端口数量。 |
logical_port_range |
uint16_t | 20 | 每次RTCP协商请求中尝试的最大逻辑端口数量。 |
logical_port_increment “ |
uint16_t ” “ | 2” “ | “协商期间尝试逻辑端口之间的增量 “ |
“enable_tcp_nodelay” “ | “bool” “ | false” “ | “启用TCP_NODELAY套接字选项 “ |
“non_blocking_send” “ | “bool” “ | false” “ | “在发送操作时不阻塞(*) “ |
“calculate_crc” “ | “bool” “ | true” “ | “如果消息头计算并发送CRC “ |
“check_crc” “ | “bool” “ | true” “ | “检查进入消息头的CRC “ |
“apply_security” “ | “bool” “ | false” “ | “使用TLS.参见TLS over TCP “ |
“tls_config’” ‘ | TLSConfig’ “’ | ‘TLS配置。见TLS over TCP ‘ | |
‘default_reception_threads’ ‘ | ThreadSettings’ ‘ | 默认线程设置用于接收线程 ‘ | |
‘reception_threads’ ‘std::map |
特定端口上接收线程ThreadSettings ‘ | ||
‘keep_alive_thread’ ‘ThreadSettings’ ‘ | 保持活动TCP连接执行的线程设置 ‘ | ||
‘accept_thread’ ‘ThreadSettings’ ‘ | 处理传入TCP连接请求的线程设置 ‘ | ||
‘tcp_negotiation_timeout’ ‘uint32_t’ ‘ | 0’ ‘ | 等待逻辑端口协商时间(以ms为单位)。 如果某个逻辑端口正在协商,则会等到此超时结束,才会尝试向该端口发送消息 . 设置非零值将增加发现时间,设置为零表示不等待,但可能导致丢失第一条消息。” |
警告和注意事项
关于监听端口:
- 尽管成员变量听取多个端口,但实际上只有第一个监听端口会被有效使用,其余将被忽略。
未配置监听端口:
- 如果未填充 listening_ports,参与者将无法接收传入连接,但仍然能够连接其他已配置监听端口的参与者。
非阻塞发送行为:
- 当 non_blocking_send 设置为 true 时,如果发送缓冲区可能已满,则发送操作会立即返回,但不会给上层返回错误。这意味着应用程序会认为数据包已成功发送,即使实际上可能已丢失。
- 当 non_blocking_send 设置为 false 时,发送操作将在网络缓冲区有足够空间之前一直阻塞。
这段信息提供了 eProsima Fast DDS 中使用 TCP 的全面细节,包括可配置参数、默认值以及相关警告和注意事项,使开发者能够根据具体需求灵活配置通信选项。
内容由零声教学AI助手提供,问题来源于学员提问