问题标签 [multihomed]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
winsock - 获取接收 recvfrom() UDP 数据包的接口的 IP (Microsoft)
在 Microsoft 多宿主 PC 上绑定到 INADDR_ANY 的套接字上使用 recvfrom()。当 recvfrom() 收到 UDP 数据包时:如何找到接收数据包的接口 (IP)?
sockets - 同一台 PC 上多个进程的 UDP 广播性能不佳
我们有一个应用程序,它使用 UDP 从服务器系统向运行在多台 Windows XP PC 上的客户端应用程序广播数据。这是在 LAN 上,通常是千兆位。这几年来一直运行良好。
我们现在需要在每台四核 PC 上运行两个(或更多)客户端应用程序,每个应用程序实例都接收广播数据。我用来实现这一点的方法是为每个客户端 PC 提供多个 IP 地址。然后,每个客户端应用程序使用相同的端口号但在不同的 IP 上连接到服务器。这在功能上有效,但由于某种原因性能非常差。我的数据传输率降低了大约 10 倍!
为了获得多个 IP 地址,我尝试了使用两个 NIC 适配器并在高级 TCP/IP 网络属性中将多个 IP 地址分配给单个 NIC。这两种方法似乎都给出了同样糟糕的性能。我还尝试使用几个不同制造商的 NIC,但这也无济于事。
我确实注意到的一件事是数据似乎更加分散。如果我向客户端发送 20kBytes 的数据,PC 上只有一个客户端,它几乎总是以一个块的形式接收所有数据。但是在两个客户端运行的情况下,数据似乎大多以帧大小(1500 字节)的块形式出现,因此我的代码必须迭代更多次。但我不认为这本身会造成如此戏剧性的性能冲击。
所以我想我的问题是有没有人知道为什么性能这么慢,是否可以采取任何措施来加快速度?
我知道我可以重新设计一些东西,以便服务器只向每台 PC 的一个客户端发送数据,然后该客户端可以将数据镜像到同一台 PC 上的其他客户端。但这是一项重大的重新设计和重新编码工作,所以我想把它作为最后的手段。
c# - 使用多个连接和多宿主下载文件
我是大学四年级的学生。我的毕业项目是一个下载管理器,我打算用 C# 编写代码。当检查 MSDN 文档时,该项目看起来很简单。但问题是我的老师希望我将多宿主纳入项目。他希望下载管理器:
- 将用户要下载的文件拆分为多个段。
- 对于每个段,DM 应该创建一个连接并从服务器请求该段。
- 在所有片段完成下载后,DM 应将片段合并为一个文件。
- 如果存在多宿主,则每个连接都应通过(或路由)不同的 ISP(如使用多宿主时,计算机通过多个网络适配器连接到多个 ISP),因为此过程应加速文件的下载。
我可以完成前三个步骤,但我找不到第四步的解决方案,所以任何人都可以帮助我或指导我通过正确的方式。
我不是经验丰富的网络和协议程序员,我只选择了 C#,因为它简化了发送和请求文件的过程。
c# - 为PC分配多个IP地址时如何获取默认IP地址
当多个 IP 地址分配给 PC 时,即如果 PC 是多宿主的,如何获得不包括 127.0.0.1 环回地址的默认 IP 地址。
以下代码在一台 PC 上返回正确的默认 IP 地址,但在另一台 PC 上返回不正确的 IP 地址,因此必须有其他解决方案。
java - JMX 和两个网络接口
在工作中,我们有两台装有 Windows XP 和 JDK 1.6.0_07 的 PC(目前无法更新 Java),都有两个网络接口 (NIC),第一个具有 190.1.XXX.XXX 形式的 IP(让我们调用它 IA),第二个有 190.2.XXX.XXX (IB)。“ipconfig /all”为两个 NIC 带来主机名 HOSTNAME,“nbtstat /a IA”和“nbtstat /a IB”也是如此。从 IB 到 IA 不存在 ping(我想,没有从 IA 到 IB,虽然没有检查)。为了健壮性,我们应该确保我们的实际应用程序在两个 NIC 上都使用 JMX。问题从这里开始。可以通过以下方式观察到相同的行为:
在第二台 PC 上,带上 JConsole 并使用以下之一附加到远程进程:IA:9000 或 IB:9000 或 HOSTNAME:9000。他们都工作。但是,如果我在第一台 PC(运行 Java2Demo 的地方)上禁用 IA,则根本不可能有任何附件(IB 和 HOSTNAME 都没有)。IB 的 Ping 有效,mstsc 也有效(因此 IB 建立了连接)。但是如果我禁用 IB,我会同时通过 IA 和 HOSTNAME 获得附件。
- 我只是不明白在这种情况下 JConsole 不会附加到 IB 上是怎么可能的。AFAIK,如果我们没有定义 java.rmi.server.hostname,JMX 使用 0.0.0.0 并监听两个 NIC。如果这与网络本身有关,请提供建议以向 IT 部门询问什么。
- 我们的实际应用程序有一个解决方法:在第一台 PC 上,它启动 2 个单独的进程,每个进程仅在一个 NIC 上具有 JMX,第三个进程将来自客户端的数据与第三个 JMX 合并。这三个进程分别从 .bat 文件启动。我真的很想改变这一点,在两个 NIC 上都有一个带有一个 JMX 的进程;或者至少,如果可能的话,用两个 JMX 启动一个进程,每个 NIC 一个。是吗?
非常感谢。
java - 如何在多宿主配置中控制源 IP
我在一个刀片上运行了 14 个 java 进程。每个进程都绑定到 ProxyServer (F5) 识别的虚拟 IP,因此当外部客户端调用 F5 时,他的调用重定向到 14 个进程之一。
最重要的是,我的进程(14 个中的一个)执行对在不同刀片上运行的另一个应用程序的调用。
这是一个问题:如何在 TCP 客户端上使用虚拟 IP 运行的 Java 进程上控制传出 TCP 数据包中的源 IP?换句话说,我正在寻找一种将虚拟 IP 设置为传出 TCP 数据包中的源地址的方法。(默认设置为刀片的物理 IP)。
linux - 使用多宿主配置本地虚拟网络
我需要测试一个连接数超过 64K 的应用程序。我想使用同一个主机。
今天我启动在 127.0.0.1 上侦听的服务器并从同一台机器连接到它,但当然它仅限于 64K 连接。
我想模拟一种情况,例如我有一台服务器和许多客户端连接到特定单个 IP 上的单个服务器。
因此,我需要设置一个具有多宿主的虚拟网络,以便客户端能够从多个寻址和侦听的服务器进行连接。
如何配置?在 Linux 上?
c++ - Qt5 在多宿主网络上绑定 TCP 套接字
我在使用 Qt5 中 QTcpSocket 类的新绑定功能时遇到了麻烦。任何解决此问题的帮助将不胜感激。
我有一个多宿主服务器,其中包含两个 NIC,每个 NIC 都有一个单独的 IP 地址。我已经在服务器上设置了路由,以便从源地址发送来自适当的 NIC,而不管目标远程地址如何。也就是说,无论数据发送给谁,从 xxx0 发送都通过 eth0 而 xxx1 通过 eth1 发送。这些 NIC 通过以太网连接到远程 Wifi 链路,然后连接到交换机。这些 wifi 链接充当透明网桥,可以看作是两条以太网电缆(但它们的带宽有限)。然后将交换机连接到计算机。目标是在服务器和计算机之间传输数据,并并行使用两个 wifi 链接来增加带宽。虽然服务器物理上是服务器,该软件将计算机作为软件服务器运行(当其他人连接到它时)。也就是说,物理服务器(软件客户端)打开 TCP 套接字并尝试连接到侦听计算机(软件服务器)。
我使用 Qt5 的绑定功能将一个 TCP 套接字绑定到 eth0 IP 地址,并将另一个 TCP 套接字绑定到 eth1 IP 地址。我已经验证这适用于其他程序,如 PING 或通过 SCP 传输文件。见http://qt-project.org/doc/qt-5.0/qtnetwork/qabstractsocket.html#bind
当我调用 bind 时,调用成功并且对本地 IP 地址的后续请求返回正确的值。例如socket->bind(ip) 返回true,然后socket->localAddress() 等于ip。但是,当我调用 connectToHost 时,localAddress 在开始连接尝试时会丢失,并且在连接后它有一个不同的 localAddress,这不是我想要的。
任何人都可以阐明正在发生的事情吗?我试图避免重写软件来颠倒软件客户端/服务器的角色,因为这些程序非常大。谢谢您的帮助。
node.js - 多宿主服务器上的流星?
有人有在多宿主服务器上运行 Meteor 的经验吗?我们正在将一个应用程序投入生产,并且有一些服务器每个都有两个网卡。eth0 上的一个接口通过我们的 Mongo 集群连接到我们的内部网络,另一个接口 eth1 连接到我们的 DMZ。我们已经完成了开发,并且处于捆绑后工作流程中。所以,这是一个仅在 eth1 上运行以下命令的问题:
MONGO_URL='mongodb://mongodb:27017/?replicaSet=meteor'PORT='80'ROOT_URL=' http: //app.domain.org'节点main.js
我对节点知之甚少,无法确切知道如何指定单个接口。这是用环境变量指定的吗?在我们的 /etc/network/interfaces 文件中?iptables?还有什么?
我在网上找到类似以下的资源,但我不确定我是否在正确的轨道上使用它们。让 node.js 服务器在特定接口上运行需要这种大惊小怪吗?有更简单的吗?
https://gist.github.com/logicalparadox/2142595
如何将node.js设置为私服上的服务?【无法访问node应用】
任何帮助将非常感激!谢谢!
阿比盖尔
sockets - 通过多个套接字和接口复用数据传输
我有两台机器,每台机器都有 12 个网络接口。每个接口通过点对点无线电链路连接到另一台机器上的相应接口(例如 machine1:intf0 -> machine2:intf0、machine1:intf1 -> machine2:intf1 等)。每个链接都可以被认为是具有自己的 MAC 地址的以太网链接,类似于多宿主服务器。
我正在尝试创建一个系统,在所有这些接口上对数据进行条带化,并能够处理一个或多个接口上的数据丢失和链路中断。
我感觉这个问题已经解决了很多次了。在开始重新发明轮子之前,我试图弄清楚是否有人知道可以在 Linux 系统上处理此类事情的开源库。
谢谢