3

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

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

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
4

2 回答 2

1

尝试使用以下两个 IP 地址:

  • 192.168.64.1
  • 192.168.64.2

我不确定这是不是问题,但 1.2.3.4 和 5.6.7.8 不在同一个子网上。(因为当您将掩码应用于每个掩码时,您不会获得相同的网络地址,因为 Dest 列向您显示。)

于 2010-02-19T21:39:02.307 回答
1

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

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

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

于 2010-02-19T21:40:33.180 回答