为什么我需要两端的默认网关?

为什么我需要两端的默认网关?

我尝试从 Pc0 ping 到 Pc1,我在 Pc0 中指定了默认网关,但没有在 Pc1 中指定。我的问题是为什么 Pc1 会丢弃 ICMP 数据包?我知道这是因为我没有给它指定默认网关,但在如此简单的拓扑中,为什么 Pc1 不将回复发送到他从中接收帧的端口?在这种情况下可能出现什么问题?谢谢。

拓扑

答案1

为什么 Pc1 丢弃了 ICMP 数据包?

在大多数情况下,它不会丢弃数据包;它成功接收了数据包,但无法响应它(即它丢弃了回复它生成了但无法发送的消息)。很多时候,这种区别很重要。

为什么 Pc1 不直接将回复发送到他收到帧的端口

大多数 IP 堆栈都是故意设计成无状态的。没有任何东西可以将 ICMP Echo Reply 数据包标记为“回复”IP 层– 这是一个全新的 IP 数据包,与提示它的数据包没有任何关系。

请注意,仅记住接口是不够的——以太网不是点对点链路,它具有 MAC 层寻址,因此主机还需要记住要回复的 MAC 地址。

此类方法过去一直使用。例如,Mikrotik SwitchOS(用于其“管理”访问)过去没有网关配置,并且确实总是通过相同的接口和相同的 MAC 地址回复它从中接收数据包。

虽然这对于高度受限的固件来说是有意义的,但如果主机的 IP 堆栈已经有能力“标准” IP 路由——没有必要只是为了避免设置默认路由而添加整个第二种机制。

过去常见的另一种类似方法是允许主机发送任何数据包(而不仅仅是响应)的方法是依赖“代理 ARP”——主机将通过其唯一的接口发送所有内容,对它想要通信的每个目的地进行 ARP 查询(就像它是本地的一样),路由器将代表远程目的地回答查询。但这有点缺点,主机将为每个目的地积累单独的 ARP 缓存条目,而不是只有一个涵盖所有内容的“默认网关”路由表条目。

最后,拥有单独的“默认网关”设置比其他选择更简单、更高效,并且自动分发此类信息已经是 DHCP(甚至 BOOTP)已解决的问题。


正如 Journeyman Geek 指出的那样,这并不完全是默认主机需要的网关;它只需要A网关专门针对它想要响应的目的地。因此,即使它只有 PC0&lr;Router 子网的路由,或者只有 PC0 的地址,它仍然能够响应。

(此类信息也可以使用 RIP 或 OSPF 自动分发 - 例如,主机侦听 RIP 广播并不罕见,而在 IPX 或 AppleTalk 等其他网络类型中,这甚至是正常的操作方式。)

相关内容