我有两个网络:192.168.13.0/24(蓝色)和 192.168.15.0/24(绿色)。
计算机 A 仅连接到 13 网络。计算机 B 有两个接口,每个网络一个。
第三台计算机充当路由器,将 13 网络连接到 15 网络(仅在此方向)。
现在,我想ping 192.168.15.100从计算机 A 到 B。不幸的是,从来没有回复。但是当我使用集线器而不是交换机时,它就可以工作了。
我认为 ping 数据包通过交换机传输到路由器(这是 A 的默认路由/网关)。路由器将数据包发送回交换机到 B。B 可能在其 15 个网络接口上接收数据包,但用其第 15 个接口进行应答?这可能吗?
问题是,B 可能只有一个网关 192.168.13.50 - 但我对此不太确定(B 是一个嵌入式系统,配置可能性有限)。
有人能解释一下这里发生了什么吗?谢谢!
答案1
在这两种情况下,ping 都以arp
请求获取路由器的 MAC 地址开始。然后 ping 消息被包装在第二层数据包中,以路由器为目的地。
当您使用时会发生什么hub
:
- ping 消息被广播到所有客户端(B x 2 和路由器),
- B.13.100 接口丢弃数据包,
- 但是它的 15.100 接口获取到了它,可能处于混杂模式(忽略了 MAC 目标),
- 因此 B 通过其 13.100 接口直接回复 A。
用一个switch
,
- B 不直接获取数据包。交换机知道A 数据包被直接发送到路由器(由于其目标 MAC 地址)并且不涉及其他端口。
- 路由器通常会在其 13.50 接口上获取数据包,
- 并应通过其 15.50 接口将其转发至 B。
- B 应该在其 15.100 接口上获取它,并从其 13.100 接口回复
- A 应该直接得到它,但是没有。
路由器可能出了问题。使用交换机
尝试从 A 发出命令。traceroute
答案2
你可能看到的是这样的:
- 数据包从 A 接口出去(13.10)
- 通过路由器路由到 B(通过路由器到 15.100)
- 被 B 接收(15.100)
- B 回复说“哦,嘿,我在同一个网络上!”
- 数据包从 B 接口出去(13.100)
- 被 A 接收(13.10)
- 我说我没有想到会有 13.100 丢包
您可以通过在发送 ping 时在 A 和 B 上运行数据包跟踪来确认这一点,查看标头并检查源地址和目标地址。
解决这个问题的唯一真正方法是在主机 B 上添加 /32 路由条目,以强制数据包出 15.100,但这种方法扩展性不佳。
答案3
a) 从计算机 A 到计算机 B 执行 a 操作tracert
,应该会显示其所采用的跳数
b) 计算机 B 上设置的默认网关是什么?
c) 它是什么类型的交换机? 第 2 层,还是第 3 层?
d) 您是否可以尝试完全禁用计算机 B 上的 13.100 NIC,然后重新启动该机器并 ping 它以查看是否有效?