我已经组装了 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 命令。这是无法到达的。
我认为这可能是由于摄像机位于同一网络子网中,但我对此不太确定。
似乎可以通过使用一些网络表系统来解决,但我对此一点也不熟悉。
是否有可能以某种方式完成这项工作?
通常每个网络接口在第 2 层是独立的——这基本上意味着每个接口在物理上都是一个单独的“子网”。(这就是为什么它们都有单独的 IP 配置!)
尝试使用相同的 IP 子网号配置多个独立接口将无法按预期工作 - 只有其中一个将用于到整个子网的所有
ip r
出站数据包(IP 路由表中的 3 个相同路由中的哪一个最终具有最低度量放)。主机不会尝试探查所有接口以确定哪个接口允许到达您想要的 IP 地址——它只会对所有内容使用相同的第一个接口。有两种方法可以实现您想要的(将所有内容保持在同一个子网中),都涉及相同类型的第 2 层连接:
创建一个虚拟网桥接口并将所有 4 个物理以太网接口添加为“网桥端口”。只有网桥应配置子网中的 IP 地址。
购买一个便宜的 5 端口以太网交换机,将其连接到您的一个物理以太网端口,然后将所有摄像机连接到该交换机。保持其他接口断开连接,或将它们用于其他用途(不同的子网)。
由于您的设备主要与 PC 通信,而不是相互通信,因此第一个选项(软件桥接)就足够了。
NetworkManager 支持创建网桥,但标准的 Ubuntu 网络设置应用程序没有该选项 - 相反,您需要使用
nm-connection-editor
(来自 network-manager-gnome 包)或nmcli con add type bridge
.(不要忘记在网桥的设置中禁用 STP;Linux 使用的过时的 STP 版本将花费大约 30 秒来了解网络状态,这很烦人。)
(如果设备是 PC 和 NAS 等想要直接相互通信的设备,这种方法仍然有效,但物理以太网交换机会提供更好的性能,因为它不依赖您的 CPU 进行 L2 桥接.)
我能够通过以下方式配置相机使其工作:
最后很简单。关键是将它们放在不同的子网上,并为设备和流数据 IP 使用相同的子网。
我不需要具有此配置的额外硬件,也不需要 Linux 下的 Bridge 配置。