路由器如何使用出口接口路由命令知道将数据包发送到哪里?

网络工程 路线
2021-07-07 06:19:19

配置 Cisco 路由器时,可以使用以下命令添加静态路由:

  • ip route 192.0.2.128 255.255.255.128 192.0.2.48
  • ip route 192.0.2.128 255.255.255.128 f0/0

如果我使用第二个选项,当 R1 想要到达 192.0.2.0/25 网络时,它如何知道谁是下一个主机以及它应该使用哪个 MAC 地址作为目的地?对于 /30 网络,很容易假设下一跳是子网中唯一剩余的地址,但是对于如下例所示的更大子网,我不明白这是如何工作的。

两个路由器 R1 和 R2 共享一个 /25 网络的网络拓扑,以及 R2 与另一个 /25 网络

1个回答

第二种选择是要避免的。对于串行或隧道接口等点对点接口是可以接受的,但在广播媒体(如以太网)上,使用“接近非法”(无论直接连接的子网是 /25、/30 还是/31)。

如果以这种方式配置路由完全可行(我似乎记得最近基于 IOS 和 IOS-XE 的路由器不允许这样做),路由器将尝试对要发送的数据包的目标 IP 地址进行ARP 解析转发

另一个(思科)路由器可能会响应该请求,如果 a) 它在给定的接口 [1] 上启用了代理 arp,并且 b) 它有到实际目的地的路由。

然而,该广播域上的任何其他系统可能响应该 ARP 广播,并可能“吸引”流量给自己(并且可能会用它做各种有趣的事情,因为它只是让自己陷入了一个中间人- 中间位置免费)。

简而言之:不要那样做。

当我们这样做时:也不要使用第一个选项(除非您使用的是 NX-OS)。正确配置的静态路由如下所示:

ip route <destination network> <destination subnet mask> <egress interface> <next hop ip>

或 - 在你的情况下

ip route 192.0.2.128 255.255.255.128 fastEthernet0/0 192.0.2.48

推理:在没有出口接口的情况下,将进行递归路由查找以找到通往给定下一跳的出口接口。大多数情况下,这将是直接连接子网的接口。

但是,如果通向下一跳(本地)子网的通常“向上”接口出现故障,并且如果下一跳的子网仍然通过某些动态路由协议获知,则可能会发生一些奇怪的事情:那么给定的静态路由可能不会从路由表(因此将继续重新分配到可能存在的动态路由协议中,导致各种奇怪的效果)。

如果给出了出口接口,则不是这样。如果出现故障,静态路由在所有情况下都会从路由表中消失。


[1] ceterum ceneo:代理 arp 在遇到它的任何地方都应该被禁用(除非它真的、真的、真的需要)。