为什么 RIP 发送无类别更新?
RIP 仅在network路由过程中的命令意义上是有类的。该network命令不接受掩码,并自动采用您输入的 IP 的有类掩码。
RIP 不通告网络掩码。事实上,它只发布网络 ID。此外,RIP 仅公布它知道的与传出接口的子网掩码匹配的网络的网络 ID 。
接收路由器将采用接收到的通告网络 ID 并应用属于接收接口的子网掩码。
我在reddit 帖子上写了关于具体工作的文章。我将在此处添加以获取更多详细信息/上下文。
引自https://www.reddit.com/r/ccna/comments/7ce90v/what_rip_advertises_definitive_proof/
RIP 实际宣传的内容:
关于 RIP 以及它通告路由的内容/方式存在一些混淆,所以我想我应该把这个小例子放在一起来明确地解决这个问题。
RIP (v1) 是在 FLSM 时代构建的路由协议 - 固定长度子网掩码。这就是在 VLSM(可变长度子网掩码)之前构建网络的方式。
在 FLSM 中,网络中的每个子网都具有相同的大小。这使路由协议免于不得不与每个通告的网络共享子网掩码的负担。因此,当 RIP 发布路由时,它只共享网络 ID——不包括子网掩码。但让我们证明...
拓扑和基本配置
这是我们正在使用的拓扑:
+----------+ +----------+ +----------+ | |e0/0 | |e0/1 | | | R1 +-----------+ R2 +-----------+ R3 | | | e0/0| | e0/1| | +----------+ +----------+ +----------+R1和R2之间的链接:
172.20.12.0/27R2和R3之间的联系:
172.20.23.0/29R1 配置了以下环回:
interface Loopback25 ip address 172.20.125.1 255.255.255.128 interface Loopback26 ip address 172.20.126.1 255.255.255.192 interface Loopback27 ip address 172.20.127.1 255.255.255.224 interface Loopback28 ip address 172.20.128.1 255.255.255.240 interface Loopback29 ip address 172.20.129.1 255.255.255.248R2 配置了以下环回:
interface Loopback25 ip address 172.20.225.2 255.255.255.128 interface Loopback26 ip address 172.20.226.2 255.255.255.192 interface Loopback27 ip address 172.20.227.2 255.255.255.224 interface Loopback28 ip address 172.20.228.2 255.255.255.240 interface Loopback29 ip address 172.20.229.2 255.255.255.248广告网络
您会注意到 R1 和 R2 有五个不同大小的环回,但都来自相同的
172.20.0.0/16. 我们将使用它在路由器上的所有接口上启用 RIP:router1(config)#router rip router1(config-router)#network 172.20.0.0 router2(config)#router rip router2(config-router)#network 172.20.0.0 After giving RIP a few minutes to converge, here are the results: router1#show ip route rip R 172.20.227.0/27 [120/1] via 172.20.12.2, 00:00:25, Ethernet0/0 router2# show ip route rip R 172.20.127.0/27 [120/1] via 172.20.12.1, 00:00:05, Ethernet0/0您会注意到,尽管在 172.20.0.0/16 范围内有 5 个环回,但每个路由器只通告了其中一个环: R1 Advertisementd
172.20.127.0/27和 R2 Advertisementd172.20.227.0/27。原因是RIP 仅在网络与传出接口的子网掩码匹配时才发布网络。R1 和 R2 之间是 /27,因此在 R1 和 R2 之间只通告了 /27 环回。
请记住,RIP 是为 FLSM 时代编写的,这意味着RIP 期望每个网络都具有相同的大小。
向 R3 宣传什么?
现在让我们在 R3 上启用 RIP,看看会发生什么。回想一下,R2 和 R3 之间的链接是
172.20.23.0/29。router3(config)#router rip router3(config-router)#network 172.20.0.0在让 RIP 收敛几分钟后,R3 学到了以下内容:
router3# show ip route rip R 172.20.229.0/29 [120/1] via 172.20.23.2, 00:00:06, Ethernet0/1请注意,尽管 R2 从 RIP 中从 R1 获知了 /27 网络,但 R2 并未将该路由转发给 R3,因为R2 和 R3 之间的链路是 /29,因此 R2 仅将 /29 网络转发给 R3。
R3 没有 /29 网络(除了它直接连接的网络)没有任何东西可以向 R2 做广告。因此,当我们在 R3 上启用 RIP 时,R2 的路由表没有改变:
router2# show ip route rip R 172.20.127.0/27 [120/1] via 172.20.12.1, 00:00:18, Ethernet0/0通过最终测试证明行为:
最后展示的部分确实只是肯定了 RIP 的行为。让我们继续 MISconfigure R1 和 R2 之间的链接:
router1(config)#int eth0/0 router1(config-if)#ip address 172.20.12.1 255.255.255.240R1 刚刚配置为
172.20.12.1/28,R2 将配置为172.20.12.2/27. 是的,网络大小不同,但路由器仍然可以相互 ping 通:router2#ping 172.20.12.1 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 172.20.12.1, timeout is 2 seconds: !!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 1/4/6 ms我还继续通过执行 a
no router rip然后在所有路由器上使用该network 172.20.0.0命令重新启用它来“反弹”RIP 进程。几分钟后,我们将看看 R1 和 R2 从彼此身上学到了什么:
router2# show ip route rip | i ^R R 172.20.128.0/27 [120/1] via 172.20.12.1, 00:00:14, Ethernet0/0结果:R1的接口IP在一个
/28网络中,并且通告了--R1的唯一/28环回的网络ID 。172.20.128.0当 R2 收到网络 ID
172.20.128.0时,它应用自己的接口子网大小为/27. 因此假设(错误地)接收到的广告是针对172.20.128.0/27实际上这个网络实际上是 /28 的。另一边也发生了同样的事情:
router1#show ip route rip | i ^R R 172.20.227.0/28 [120/1] via 172.20.12.2, 00:00:13, Ethernet0/0R2 的接口 IP 在
/27网络中,因此公布了网络 ID——172.20.227.0这是 R2 唯一知道的 /27 的网络 ID。当 R1 收到它时,它会应用本地接口的大小并
/28因此添加172.20.227.0/28到路由表中。这明确地证明了 RIP 选择宣传什么,以及它宣传它的庄园。总结如下。
摘要/ TLDR
RIP 将通告与传出接口的子网大小匹配的所有网络的网络 ID。
接收路由器会将本地接口的子网掩码大小应用于所有接收到的网络 ID。
*以上内容并未说明或揭示 RIP 的摘要是如何工作的。以上所有操作都是在启用摘要的情况下完成的(RIPv1 的默认行为)。
这是由于 RIP 对更新进行的处理。
为了进一步理解,作为 RIPv1 的类路由协议在路由更新中不包括子网掩码。然而,路由表包括 RIPv1 路由,其网络地址与子网掩码相同。
运行 RIPv1 的路由器如何确定它必须应用于添加到路由表的路由的子网掩码?
这里我们有处理 RIPv1 路由的规则:
- 如果一个路由更新和接收它的接口属于同一个主网络,则它将接口的子网掩码应用于路由更新中的网络。
- 如果路由更新和接收路由更新的接口属于不同的主网,则它将带有网络类别的子网掩码应用于路由更新中的网络。
(仅在 RIP 中是有类的? - 必须查一下) RIPv1 使用有类路由,这是不应再使用它的原因之一。
RIPv2 (RFC 2080) 使用 CIDR,不会一遍又一遍地传输完整的路由表,利用多播(v1 使用广播)并且应该始终优先于 RIPv1。
在更大的网络上,您应该考虑使用像 OSPF 这样的链路状态路由协议,而不是陈旧的距离矢量概念。

