我想在Linux中用交叉电缆连接的两个以太网接口之间发送数据。两个以太网接口在同一个盒上。我将以太网接口定义为具有不同的静态ip地址(1.2.3.4和5.6.7.8),并一直使用套接字将字节从一个IP地址发送到另一个IP地址。我想强调的是,我希望数据从盒子的一个接口离开,并在同一盒子的另一个接口上接收。这样做的一个后果是拔掉电缆将阻止同一机器上的客户端和服务器之间的通信。
我猜内核比我聪明,它认为它不需要在网络上发送信息,直接在内部套接字之间路由数据,从而否定了测试。我曾尝试使用SO_BINDTODEVICE强制客户端从特定接口发送数据,但服务器永远看不到它。我真的被卡住了,这看起来不应该这么难。
路由-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发布于 2010-02-20 05:40:33
如果不通过路由器,您无法在1.2.3.4/24到5.6.7.8/24之间使用IP通信。问题是IP只能与同一网段中的其他计算机通信。要计算网络地址,您需要在接口地址和子网掩码之间执行逻辑AND运算。这将为您提供网络地址。如果两个网络地址不同,则需要路由器。在您的示例中,您的网络地址为1.2.3.0和5.6.7.0。因为它们是不同的,所以它将发送数据。
更重要的是,大多数网络堆栈足够智能,可以看到如果两个接口都在同一台计算机上,它不会将数据完全发送到物理接口。它可能只会通过IP堆栈发送消息。但同样,它需要是有效地址才能工作。
您甚至应该能够仅使用环回网络设备来测试类似的设置。(虚拟网卡。)
发布于 2010-02-20 05:39:02
尝试使用以下两个IP地址:
我不确定这就是问题所在,但1.2.3.4和5.6.7.8不在同一子网上。(因为当您将掩码应用于每个掩码时,您不会获得与Dest列显示的相同的网络地址。)
https://stackoverflow.com/questions/2299564
复制相似问题