如何配置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,一经查实,立即删除!

相关文章

oracle赋予一个用户查询另一个用户中所有表

说明&#xff1a;让用户selame能够查询用户ame中的所有表&#xff08;不能添加和删除&#xff09;1.创建用户selamecreate user selame identified by Password;2.设置用户selame系统权限grant connect,resource to selame; 3.设置用户selame对象权限 grant select any table t…

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

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

考试 驾校

您的孩子在车里安全么&#xff1f;儿童座椅那点事儿 儿童安全座椅用最最普通的话来解释就是一种系于汽车座位上,供小童乘坐,有束缚设备,并能在发生车祸时,束缚着小童以保障小童安全的座椅。 儿童安全座椅在欧美发达国家已经得到了普遍使用&#xff0c;这些国家基本上都制定了相…

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拦截请…

汽车熄火是什么原因?

汽车熄火是什么原因&#xff1f; 近来看见很多车主被车子熄火所困扰&#xff0c;驾校一点通帮助您从以下也许可以找出原因。 1、自动档车型&#xff1a; 自动档的车型不会轻易出现熄火的现象&#xff0c;而手动档的车型由于驾驶水平不高&#xff0c;可能会经常出现熄火的现象。…

数据库 -- 02

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

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

注意&#xff1a;当WaitForMultipleObjects等待多个内核对象的时候&#xff0c;如果它的bWaitAll 参数设置为false。其返回值减去WAIT_OBJECT_0 就是参数lpHandles数组的序号。如果同时有多个内核对象被触发&#xff0c;这个函数返回的只是其中序号最小的那个。 如果bWaitAll …

设置 shell 脚本中 echo 显示内容带颜色

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 shell脚本中echo显示内容带颜色显示,echo显示带颜色&#xff0c;需要使用参数 -e 格式如下&#xff1a; echo -e "\033[字背景颜…

Visual C++ 编译器选项 /MD、/ML、/MT、/LD

前段时间编译一个引用自己写的静态库的程序时老是出现链接时的多个重定义的错误&#xff0c;而自己的代码明明没有重定义这些东西&#xff0c;譬如&#xff1a; LIBCMT.lib(_file.obj) : error LNK2005: ___initstdio already defined in libc.lib(_file.obj) LIBCMT.lib(_fi…

Delphi面向对象编程的20条规则

Delphi面向对象编程的20条规则 作者简介 Marco Cantu是一个知名的Delphi专家&#xff0c;他曾出版过《精通Delphi》系列丛书&#xff0c;《Delphi开发手册》以及电子书《精通Pascal》(该电子书可在网上免费获得)。他讲授的课题是Delphi基础和高级开发技巧。你可以通过他…

制动失灵怎么办?

定义 制动过程中&#xff0c;由于制动器某些零部件的损坏或发生故障&#xff0c;使运动部件(或运动机械)不能保持停止状态或不能按要求停止运动的现象。 制动失灵的原因 制动失灵的关键在于制动系统无法对汽车施加足够的制动力&#xff0c;包括制动液管路液位不足或进入空气、制…

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

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

解决:Connect to xx.xx.xxx.xx :8081 [/xx.xx.xx.xx] failed: Connection refu sed: connect -> [H

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1. 自行启动了个 Nenux 服务。想把本地工程推送到 个人私服&#xff0c;执行命令&#xff1a;mvn deploy 报错&#xff1a; Failed to…

ADOQuery 查询 删除 修改 插入

//利用combobox组件查询数据库表procedure TForm1.Button1Click(Sender: TObject);beginADOQuery1.Close;ADOQuery1.SQL.Clear;ADOQuery1.SQL.Add(select * from trim(ComboBox2.Text));ADOQuery1.Active:true;end&#xff1b; //查询记录procedure TForm1.Button1Click(Sender…

防爆胎,有妙招

对于大多数人来说&#xff0c;买车难,养车更难。许多人拥有了新车&#xff0c;却没有足够的知识去好好保养汽车&#xff0c;这实在是非常可惜。如何做好汽车的保养工作,让我们的爱车更好的为我们工作&#xff1f;夏天炽热的天气&#xff0c;是否让你为爆胎烦恼不已&#xff1f;…

Qt之QProcess(一)运行cmd命令

Qt提供了QProcess类&#xff0c;QProcess可用于完毕启动外部程序&#xff0c;并与之交互通信。 一、启动外部程序的两种方式&#xff1a; &#xff08;1&#xff09;一体式&#xff1a;void QProcess::start(const QString & program, const QStringList & arguments…

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;而且因为线是…