首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在同一机器上的两个以太网接口之间发送数据

在同一机器上的两个以太网接口之间发送数据
EN

Stack Overflow用户
提问于 2010-02-20 05:06:18
回答 2查看 3.6K关注 0票数 3

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

我猜内核比我聪明,它认为它不需要在网络上发送信息,直接在内部套接字之间路由数据,从而否定了测试。我曾尝试使用SO_BINDTODEVICE强制客户端从特定接口发送数据,但服务器永远看不到它。我真的被卡住了,这看起来不应该这么难。

路由-n表中有两个条目

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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堆栈发送消息。但同样,它需要是有效地址才能工作。

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

票数 1
EN

Stack Overflow用户

发布于 2010-02-20 05:39:02

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

  • 192.168.64.1
  • 192.168.64.2

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2299564

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档