gpt4 book ai didi

c++ - 在同一个盒子上的两个以太网接口(interface)之间发送数据

转载 作者:太空狗 更新时间:2023-10-29 22:53:30 24 4
gpt4 key购买 nike

我想在 Linux 中用交叉电缆连接的两个以太网接口(interface)之间发送数据。两个以太网接口(interface)在同一个盒子上。我将以太网接口(interface)定义为具有不同的静态 IP 地址(1.2.3.4 和 5.6.7.8),并且一直在使用套接字将字节从一个 IP 地址发送到另一个 IP 地址。我想强调的是,我希望数据从盒子的一个接口(interface)离开盒子,并在同一个盒子的另一个接口(interface)上被接收。这样做的一个后果是拔掉电缆会阻止同一盒子上的客户端和服务器之间的通信。

我猜内核比我聪明,它决定不需要通过线路发送信息,而是直接在内部套接字之间路由数据,从而否定了测试。我曾尝试使用 SO_BINDTODEVICE 强制客户端从特定接口(interface)发送数据,但服务器从未看到它。我真的被卡住了,这似乎不应该这么困难。

route-n表中有两条

Dest       Gateway    Genmask        flags  metric  use  interface
1.2.3.0 0.0.0.0 255.255.255.0 U 0 0 eth0
5.6.7.0 0.0.0.0 255.255.255.0 U 0 0 eth1

最佳答案

如果不通过路由器,您无法在 1.2.3.4/24 到 5.6.7.8/24 之间使用 IP 进行通信。问题是IP只能和同一网段的其他电脑对话。要计算网络地址,您需要在接口(interface)地址和子网掩码之间执行逻辑AND。这将为您提供网络地址。如果两个网络地址不同,则需要路由器。在您的示例中,您将拥有网络地址 1.2.3.0 和 5.6.7.0。因为这些不同,所以它会发送数据。

更重要的是,大多数网络堆栈都足够智能,可以看出如果两个接口(interface)都在同一台计算机上,它就不会将数据一路发送到物理接口(interface)。它可能只会通过 IP 堆栈发送消息。但同样,它需要是有效地址才能工作。

您甚至应该能够仅使用环回网络设备来测试类似的设置。 (虚拟网卡。)

关于c++ - 在同一个盒子上的两个以太网接口(interface)之间发送数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2299564/

24 4 0
文章推荐: C++ MiniDumpWriteDump - FullMemoryDump 没有给我太多信息
文章推荐: c# - 工作线程上的 MessageBox
文章推荐: java - 如何在 Clojure 中调用重载的 Java 方法
文章推荐: c# - 当对象具有集合属性时投影 IQueryable 时 Automapper 失败