关于路由的一个小困惑

关于路由的一个小困惑

这是这个问题我在 SuperUser 上看到,但尚未提供任何答案。

用户删除了路由表中的第二条路由,

# ip route show
  default via 192.168.73.1 dev eth0  proto static 
  192.168.73.0/24 dev eth0  scope link 

只留下默认设置。他发现他可以连接ping网络上的其他电脑,但是它们无法ping支持路由表不完整的电脑。

我在真实网络上调查了这个问题(而不是原来的虚拟设置),方法是tcpdump:事实证明不完整pc 确实向 ping 返回了回复,但是这并没有到达原始的、完整的 pc。

因此,我尝试在两个方向上打开 ssh 会话,但现在两次尝试都失败了。这是 Wireshark 对失败连接的捕获:

PUSH(PSH/ACK)的存在和大量的重传清楚地表明任何一台 PC 都无法连接到另一台。

有人能详细解释一下原因吗?

答案1

我猜你忘记了另一个站点的返回路由。另一边的 PC 需要设置适当的网关才能访问网络,而不是使用默认网关。

答案2

[@moderators ecc,评论太长了,所以我只能打赌我的答案了。我会更新此内容]

由于现在无法进行全面测试,我只能猜测。缺少 eth0 子网上的路由意味着所有内容都应该通过默认网关。

实际上,我尝试在我的计算机上 ping 同一子网中的另一台主机和网关,但我看到的结果似乎与我的猜测一致。

来自我的机器(缺少本地子网的路由)的数据包与我 ping 的 IP 一致,但带有网关的 arp 地址。在 wireshark 中检查嗅探 arp 地址,以便我们可以获得更多数据。

清除 ARP 缓存后,进行清理测试,并在此发布您的发现。

我认为正在发生的事情是,网络堆栈需要 (nosubnet) 客户端 IP 上的路由才能知道在哪里可以自由“arp”,因为它无需网关即可访问。

拉出来,唯一可能的路线是默认GW,并且我认为该(无子网)机器上只有一个网络接口。

现在,考虑到您正在向网关发送 arp 数据包,这意味着向其 arp 地址发送数据包,该数据包是发往同一子网中具有另一个 IP(目标)的客户端的。

GW 在目标的 ARP 地址转发它们,具有正确配置的本地路由的目标回复发送主机(没有子网的主机)。

简而言之,不对称路由。

第一个主机(没有正确本地子网路由的发送方)将其视为格式错误的数据包(Alien),因为它将其发送到网关的 ARP 地址。

[/我希望没有网络人员会因为我最终的错误而严厉打击我]

相关内容