如何使用网络适配卡连接同一子网中的 3 台设备

如何使用网络适配卡连接同一子网中的 3 台设备

我已经组装了 1 台装有 Ubuntu 版本 20.04.3.LTS 的 PC。该 PC 需要用于连接 3 台摄像机,这些摄像机通过以太网连接发送数据,使用 TCP 协议进行配置,使用 UDP 进行图像流传输。因此,我为 PC 配备了以太网网卡 (产品链接) 有额外的以太网端口。我可以单独配置每个端口,可以看到 4 个额外的以太网端口 (enp9s0f0/1/2/3) 并且它们都单独完美地工作: 我的 Ubuntu 网络参数

我有 3 个摄像头,它们都有自己的可配置 IP 地址:

  • 192.168.0.81
  • 192.168.0.88
  • 192.168.0.82

(它们还有特定的地址,可以为 UDP 流媒体 IP 地址或端口设置)

我正在尝试让 2 个摄像头协同工作作为起点。我开发了一个程序,使用 API 连接到这些摄像头并捕获通过 UDP 协议发送的图像。通常我只需要为以太网端口设置一个固定 IP,并通过在我的代码中指示正确的 IP 地址,API 就可以从摄像头中获取数据。

我注意到,如果连接了 1 个摄像头,我就可以毫无问题地工作。但是当我在网卡上添加另一个摄像头时,就无法连接它了。

我连接到适配卡的第二个摄像头始终可见,但它不会响应 ping 命令等。无法访问。

我认为这可能是因为摄像机位于同一个网络子网上,但我对此不太确定。

看来可以使用一些网络表系统来解决,但我对此并不熟悉。

是否有可能以某种方式完成这项工作?

答案1

通常,每个网络接口在第 2 层都是独立的 - 这基本上意味着每个接口在物理上都是一个单独的“子网”。 (这就是为什么它们都有单独的 IP 配置!)

尝试配置具有相同 IP 子网号的多个独立接口将无法按预期工作 - 只有其中一个接口将用于全部向整个子网发送出站数据包(IP 路由表中 3 条相同路由中ip r最终设置了最低度量值的路由)。主机不会尝试探测所有接口来确定哪个接口允许到达您想要的 IP 地址 - 它只会对所有接口使用相同的第一个接口。

有两种方法可以实现您想要的目标(将所有内容保持在同一个子网中),两者都涉及相同类型的第 2 层连接:

  • 创建一个虚拟接口并将所有 4 个物理以太网接口添加为“桥接端口”。只有桥接端口应配置来自子网的 IP 地址。

  • 购买便宜的 5 端口以太网交换机,将其连接到物理以太网端口,并将所有摄像头连接到该交换机。保持其他接口断开连接,或将它们用于其他用途(不同的子网)。

由于您的设备主要与 PC 通信而不是相互通信,因此第一个选项(软件桥)就足够了。

NetworkManager 支持创建网桥,但是标准 Ubuntu 网络设置应用程序没有该选项 - 相反,您需要使用nm-connection-editor(来自网络管理器-gnome 包)或nmcli con add type bridge

(不要忘记在桥接器的设置中禁用 STP;否则,Linux 使用的过时的 STP 版本将花费约 30 秒来了解网络状态,这很烦人。)

(此方法如果设备是 PC 和 NAS 等想要直接相互通信的设备,仍然可以工作,但物理以太网交换机会提供更好的性能,因为它不依赖于 CPU 来进行 L2 桥接。)

答案2

我可以按照以下方式配置摄像机使其工作:

  1. Camera1:设备IP = 192.168.0.1,流媒体IP = 192.168.0.2,enp9s0f0固定IP = 192.168.0.2
  2. Camera2:设备IP = 192.168.1.1,流媒体IP = 192.168.1.2,enp9s0f1固定IP = 192.168.1.2
  3. 摄像头3:设备IP = 192.168.2.1,流媒体IP = 192.168.2.2,enp9s0f2固定IP = 192.168.2.2

归根结底这很简单。关键是将它们放在不同的子网上,并为设备和流数据 IP 使用相同的子网。

有了这种配置,我不需要额外的硬件,也不需要 Linux 下的 Bridge 配置。

相关内容