我遇到了一个奇怪的问题,如果你们能添加信息我将不胜感激。
我配置了两个不同的子网,并进行了测试。我尝试从另一台计算机 10.10.11.1/30(位于另一个子网)ping 一台位于 10.10.11.9/30(位于一个子网)的计算机。ping 不成功(这是理所当然的)。
但是,当我尝试在 Wireshark 中检测相同情况时,它没有显示“无法访问”消息,而是显示正常的 ICMP 请求和回复。就好像数据包正在寻找路径一样……
我确实尝试计算 IP 数据包中的头校验和,但即使这样做,Wireshark 中捕获的数据包的校验和似乎是正确的——而 ping 显示所有数据包都丢失了。
有人可以添加信息吗?
多谢
答案1
假设您的设置实际上与您描述的一样(没有任何意外配置错误):除非客户端 10.10.11.1/30 有一些关于如何路由到 10.10.11.9/30 的信息(通过默认网关、静态路由等),否则不应发送任何 ICMP 数据包。
在 Cisco Paket Tracer 上尝试一下。设置一个包含两个客户端和一个交换机的网络。只要没有配置默认网关(并且客户端位于不同的广播域中),客户端甚至不会发送任何 ARP 数据包。
这意味着您当前的配置提供了某种“路由解析”,因此 ICMP 数据包实际上正在被发送和接收。可能通过默认网关、静态路由等。检查第 2 层,将帧设置为哪个 MAC 地址?直接发送到客户端还是路由器?正如我在评论中所写:
ICMP 包必须通过路由器、静态路由、一些“特殊”配置(如“proxy-arp”)等发送。第 2 层会发生什么?IP 地址如何解析为 MAC 地址?我认为这将引导您找到为什么首先会有响应(不应该有)的解决方案。
为什么接收到的数据包没有显示在 ping 统计信息中又是另外一回事。可能是防火墙阻止了它们(我猜是因为 ping 命令不会给出任何错误或关于单个 ping 的确认信息,它只会提供摘要)。
我唯一能想到的另一种解释是,有某种其他奇怪的配置扰乱了系统(例如,第二个客户端的 IP 地址与目标相同,并且与源位于广播域内等)。您也可以在第 2 层检查这一点,方法是将帧的 MAC 地址与实际客户端的 MAC 地址进行比较。
事后思考:您是否设置了默认网关、静态路由等?路由器是否有 24 位网络掩码?在这种情况下,尽管子网不同,但路由器和客户端的广播域重叠。这可以解释当前的行为。
答案2
您的网络状况不佳,可能是因为网络掩码混淆了:
ICMP 请求之前有一个 ARP 请求,紧接着或之前某个时间。显然 ARP 请求成功了,所以某个节点知道它在哪里
10.10.11.9
并返回了它的 MAC 地址,否则 ICMP 就永远不会被发送。PING 请求应该返回“网络不可达”(或至少“主机不可达”),但事实并非如此。因此 ICMP 请求已成功发送并返回成功代码。
问题仍然是为什么 ping 命令仍然报告 100% 的数据包丢失。
我只能推测 ping 命令本身已经丢弃了答案,也许是因为它来自另一个网络。
我的结论是,网络上的一些其他节点正在使用
10.10.11.x/24
,因此正在传递 ping 消息,从而给该10.10.11.1/30
节点造成了很大的混乱。