如何配置DDS以使用多个网络接口?How do I configure DDS to work with multiple network interfaces?

最近在使用OpenDDS的时候遇到一个问题:存在多个虚拟网卡时,发布(订阅)端重新连接时会阻塞几分钟,在外网找到一篇与此相关的文章。

You cannot specify which NICs DDS will use to send data. You can restrict the NICs that DDS can use to receive data by configuring Participant properties in the QoS on the DataReader, but you cannot tell DDS to use one NIC or another to send the DataWriter data. Rather, the DataWriter will try to send data to all of the addresses that a DataReader announces when subscribing to data using the interfaces that the Operating System selects.

您无法指定DDS将用于发送数据的NIC。 您可以通过在DataReader上的QoS中配置Participant属性来限制DDS可用于接收数据的NIC,但您无法告诉DDS使用一个NIC或另一个NIC来发送DataWriter数据。 相反,DataWriter将尝试将数据发送到DataReader在使用操作系统选择的接口订阅数据时宣布的所有地址。

In other words, it is up to the routing table on the Operating System (OS) to decide which NICs are used to send the UDP/IP packets.

换句话说,由操作系统(OS)上的路由表决定使用哪些NIC来发送UDP / IP数据包。

For example:

  • DataReader1 is on a node with single NIC, IP address 10.30.1.100
  • DataReader2 is on a node with single NIC, IP address 10.10.100.120
  • DataReader3 is on a node with two NICs, IP addresses 10.30.1.101 and 10.10.100.121
  • The DataWriter1 is on a node with two NICs, IP addresses 10.30.1.191 and 10.10.100.188
  • The netmask for all networks is 255.255.255.0.
  • The DataWriter and DataReaders are for the same topic and have compatible QoS. Assume that the DataReaders are NOT subscribing to data using multicast.

例如:

  • DataReader1位于具有单个NIC的节点上,IP地址为10.30.1.100
  • DataReader2位于具有单个NIC的节点上,IP地址为10.10.100.120
  • DataReader3位于具有两个NIC的节点上,IP地址为10.30.1.101和10.10.100.121
  • DataWriter1位于具有两个NIC的节点上,IP地址为10.30.1.191和10.10.100.188
  • 所有网络的网络掩码是255.255.255.0。
  • DataWriter和DataReader用于相同主题并具有兼容的QoS。 假设DataReader不使用多播订阅数据。

In this scenario when DataWriter1 sends data to DataReader1, it will send a packet using the address 10.30.1.100. When sending data to DataReader2, it will send a packet using the address 10.10.100.120. When sending data to DataReader3, it will send 2 packets using the addresses 10.30.1.101 and 10.10.100.121.

在这种情况下,当DataWriter1向DataReader1发送数据时,它将使用地址10.30.1.100发送数据包。 向DataReader2发送数据时,它将使用地址10.10.100.120发送数据包。 向DataReader3发送数据时,它将使用地址10.30.1.101和10.10.100.121发送2个数据包。

The NIC used by the OS to send the data from DataWriter1 to a particular destination depends on the network routing table for the machine where DataWriter1 is running. Absent strange OS configurations, packets destined to the 10.30.1.x network should be sent through the NIC with address 10.30.1.191, and packets destined to the 10.10.100.x network should be sent through the NIC with address 10.10.100.188.

操作系统用于将数据从DataWriter1发送到特定目标的NIC取决于运行DataWriter1的计算机的网络路由表。 如果没有奇怪的操作系统配置,发往10.30.1.x网络的数据包应通过地址为10.30.1.191的NIC发送,发往10.10.100.x网络的数据包应通过地址为10.10.100.188的NIC发送。

For example, the routing table (use netstat -r to see the routing table, example below is output on Windows) may be:

例如,路由表(使用netstat -r查看路由表,以下示例在Windows上输出)可能是:
这里写图片描述
Which supports the scenario as described above.
这支持如上所述的场景。

Restricting interfaces on the DomainParticipant

With the Property DomainParticipantQos, you can modify the default
NICs that the DomainParticipant is allowed to use (or denied), for
example:

限制DomainParticipant上的接口
使用Property DomainParticipantQos,您可以修改允许DomainParticipant使用(或拒绝)的默认NIC,例如:

<participant_qos><property><value><element><name>dds.transport.UDPv4.builtin.parent.allow_interfaces</name><value>192.168.0.1,192.168.1.2</value></element><element><name>dds.transport.UDPv4.builtin.parent.deny_interfaces</name><value>192.168.2.3 </value></element>                   </value></property>
</participant_qos>

How restricting interfaces on the DomainParticipant affect the DataReader Absent further configuration, a DataReader will only advertise the interfaces that its DomainParticipant has been allowed to use as addresses where it can receive data. So for example, if DataReader3’s participant is restricted to use only the NIC with IP address 10.10.100.121, then this will be the only NIC advertised by DataReader3 and therefore a DataWriter will only send data to the DataReader3 at address 10.10.100.121. However, the DataWriter may still use its 10.10.100.188 NIC when sending data to DataReader2, which is on the same subnet as DataReader3.

DomainParticipant上的限制接口如何影响DataReader如果没有进一步的配置,DataReader只会通告其DomainParticipant被允许用作可以接收数据的地址的接口。 因此,例如,如果DataReader3的参与者被限制为仅使用IP地址为10.10.100.121的NIC,那么这将是DataReader3通告的唯一NIC,因此DataWriter将仅将数据发送到地址10.10.100.121的DataReader3。 但是,在将数据发送到与DataReader3位于同一子网的DataReader2时,DataWriter仍可能使用其10.10.100.188 NIC。

How restricting interfaces on the DomainParticipant affect the DataWriter Restricting interfaces has no effect on DataWriters as far as unicast data is concerned. As mentioned earlier for unicast data, an application cannot control which NIC card is used by a DataWriter to send data. Generally speaking and independently of DDS, there is no way to control which interface IP data is sent at the application level. This is entirely controlled by the OS routing table.

就单播数据而言,限制DomainParticipant上的接口如何影响DataWriter限制接口对DataWriters没有影响。 如前面提到的单播数据,应用程序无法控制DataWriter使用哪个NIC卡发送数据。 一般而言,与DDS无关,无法控制在应用程序级别发送哪个接口IP数据。 这完全由OS路由表控制。

For multicast data, the DomainParticipant will only send out multicast packets using the interfaces that it’s been allowed to use.

对于组播数据,DomainParticipant将仅使用允许使用的接口发送组播数据包。

NOTE: by default, a DomainParticipant is only able to announce the first 4 interfaces that it finds as the default set of addresses to which other DomainParticipants should send it data.

注意:默认情况下,DomainParticipant只能宣告它找到的前4个接口作为其他DomainParticipants应向其发送数据的默认地址集。

Hope this helps clarify how DDS works with multiple NICs and the controls that users have.

希望这有助于阐明DDS如何与多个NIC以及用户拥有的控件配合使用。

原网站地址:https://community.rti.com/forum-topic/how-do-i-configure-dds-work-multiple-network-interfaces

****** 有对DDS技术了解,学习,开发和培训需求的,请加入QQ群:707895641(DDS专业技术辅导) ******

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/448264.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用可靠多播与OPENDDS进行数据分发

介绍 也许应用程序设计人员在创建分布式系统时面临的最关键决策之一是如何在感兴趣的各方之间交换数据。通常&#xff0c;这涉及选择一个或多个通信协议并确定向每个端点分派数据的最有效手段。实现较低级别的通信软件可能是耗时的&#xff0c;昂贵的并且容易出错。很多时候&a…

margin为负值的几种情况

1、margin-top为负值像素 margin-top为负值像素&#xff0c;偏移值相对于自身&#xff0c;其后元素受影响&#xff0c;见如下代码&#xff1a; 1 <!DOCTYPE html>2 <html lang"zh">3 <head>4 <meta charset"UTF-8" />5 &l…

事件EVENT,WaitForSingleObject(),WaitForMultipleObjecct()和SignalObjectAndWait() 的使用(上)

用户模式的线程同步机制效率高&#xff0c;如果需要考虑线程同步问题&#xff0c;应该首先考虑用户模式的线程同步方法。但是&#xff0c;用户模式的线程同步有限制&#xff0c;对于多个进程之间的线程同步&#xff0c;用户模式的线程同步方法无能为力。这时&#xff0c;只能考…

axios 中文文档、使用说明

以下内容全文转自 Axios 文档&#xff1a;https://www.kancloud.cn/yunye/axios/234845 ##Axios Axios 是一个基于 promise 的 HTTP 库&#xff0c;可以用在浏览器和 node.js 中。 Features 从浏览器中创建 XMLHttpRequests从 node.js 创建 http 请求支持 Promise API拦截请…

数据库 -- 02

引擎介绍 1.什么是引擎 MySQL中的数据用各种不同的技术存储在文件&#xff08;或者内存&#xff09;中。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术&…

OpenDDS用idl生成自定义数据类型时遇到的一个问题

问题&#xff1a;这里会提示LNK2005重复定义的错误 解决方案&#xff1a; 解决后&#xff1a;

Docker 方式安装 Nexus 私服

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1. 从Docker 官方仓库查找镜像&#xff1a; docker search nexus 2. 拉取镜像&#xff1a; docker pull 你选中的镜像的名字  pull…

shader飞线改进版

项目github地址&#xff1a;https://github.com/ecojust/flyline 前面写过一个飞线(基于THREE.Line进行的颜色变化)&#xff0c;只是简单地将可视区片元颜色的alpha通道值设为1.0&#xff0c;不在可视区的设为0.0。效果是这样的&#xff1a; 做得很粗糙&#xff0c;而且因为线是…

C++获取本机所有ip地址,可区分类型是有线无线虚拟机还是回环

一个小程序&#xff0c;可以获取本地所有ip地址&#xff0c;包括有线&#xff0c;无线&#xff0c;虚拟机&#xff0c;环回接口网卡&#xff0c;等。 如图&#xff0c;一台机器多个网卡&#xff1a; 程序执行结果&#xff1a; #include"stdio.h" #include"…

Mybatis 在 IDEA 中使用 generator 逆向工程生成 pojo,mapper

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 使用mybatis可以逆向生成pojo和mapper文件有很多种方式&#xff0c;我以前用的是mybtais自带的generator包来生成&#xff0c;连接如下&…

C++11多线程----线程管理

说到多线程编程&#xff0c;那么就不得不提并行和并发&#xff0c;多线程是实现并发&#xff08;并行&#xff09;的一种手段。并行是指两个或多个独立的操作同时进行。注意这里是同时进行&#xff0c;区别于并发&#xff0c;在一个时间段内执行多个操作。在单核时代&#xff0…

Shell编程入门基础上

前言 为什么学 Shell Shell 脚本语言是实现 Linux/UNIX 系统管理及自动化运维所必备的重要工具&#xff0c; Linux/UNIX 系统的底层及基础应用软件的核心大都涉及 Shell 脚本的内容。每一个合格 的Linux 系统管理员或运维工程师&#xff0c;都需要能够熟练地编写 Shell 脚本语言…

宝宝不开心 : 减肚子大战进行中、持续更新,看看一个月后能不能把腰瘦下来 ...

公司研发中心离家很近&#xff0c;于是来这边后就天天回家吃吃、喝喝、睡睡 ... 中午一个半小时休&#xff0c;吃完就滚上床铺&#xff1a;睡午觉&#xff0c;就这样 天天过得好不惬意 ... // 每周也会发零售&#xff0c;大家都吃得乐呵呵的&#xff0c;晚上加班都是组上好些个…

【融云分析】选择IM云服务,需要看哪些核心技术指标?

IM&#xff08;即时通讯&#xff09;云服务已发展数年&#xff0c;不少企业与开发者都倾向于选择第三方IM云服务&#xff0c;短平快地为应用添加即时通讯能力&#xff0c;但如何选择服务商却是个难题&#xff0c;单从简单的功能介绍来看无法判断&#xff0c;因为IM云服务接入后…

Nginx 配置详解

序言 Nginx是lgor Sysoev为俄罗斯访问量第二的rambler.ru站点设计开发的。从2004年发布至今&#xff0c;凭借开源的力量&#xff0c;已经接近成熟与完善。 Nginx功能丰富&#xff0c;可作为HTTP服务器&#xff0c;也可作为反向代理服务器&#xff0c;邮件服务器。支持FastCGI…

jeeCMS首页加载流程

版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。 https://blog.csdn.net/gyshun/article/details/79669293 如果JEECMS部署完毕之后&#xff0c;在浏览器中输入http://localhost:8080/jeecms&#xff0c;系统直接会按照以下步骤执行&#xff1a; 首…

VSCode 汉化、设置为 中文语言显示 、中文界面

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 Vscode是一款开源的跨平台编辑器。默认情况下&#xff0c;vscode使用的语言为英文(us)&#xff0c;如何将其显示语言修改成中文了&#…

Python-21-socket编程

一、基础知识 1. C/S架构 C/S架构即客户机/服务器模式。 它可以分为客户机和服务器两层&#xff1a; 第一层: 在客户机系统上结合了界面显示与业务逻辑&#xff1b; 第二层: 通过网络结合了数据库服务器。 简单的说就是第一层是用户表示层&#xff0c;第二层是数据库层。 这里…

解决:VScode 汉化后 、设置中文后 还显示英文的问题

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 按f1 搜索 Configore Display Language 设置 zh-cn 关闭软件重启。 如果重启菜单等还是英文的&#xff0c;在商店查看已安装的插件&…

linux :Docker 方式 安装 zookeeper、阿里服务器上 Docker 运行 zookeeper

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1. 查找官方镜像&#xff0c;并下载镜像&#xff1a; # 搜索镜像&#xff1a; docker search zookeeper# 拉取镜像&#xff1a;docker …