关于RIP协议中的Route Poison

网络工程 协议理论 撕裂
2021-07-27 05:52:01

在此处输入图片说明

我有一个关于 Poison reverse 概念的大问题。

从图片中可以看出 A 和 T 之间的链接已断开。

现在 A 立即向 B 和 E 发送触发更新,并且 B、E 将路由发送回 A。

这里的问题是,B 和 E 将只向 A 发送毒路由还是将发送整个数据库,E、D 和 B、C 之间的通信将如何?

If the Router C sends an update to B with metric 4 then B accepts it ?
2个回答

我做了一个实验室来测试与你的拓扑相同的行为。R1宣布了三个网络:

1.1.1.1/32
2.2.2.2/32
3.3.3.3/32

RIP实验室

R1正在向 R2 发送完整更新。这是关闭 IP 为 1.1.1.1 的 Lo0 之前的最终更新。

RIP 捕获 1

然后R1发送触发更新:

Dec  9 10:22:37.797: %LINK-5-CHANGED: Interface Loopback0, changed state to administratively down
Dec  9 10:22:37.809: RIP: sending v2 flash update to 224.0.0.9 via FastEthernet0/0 (12.12.12.1)
Dec  9 10:22:37.809: RIP: build flash update entries
Dec  9 10:22:37.809:    1.1.1.1/32 via 0.0.0.0, metric 16, tag 0

R1只是毒化了这条路线。

R1中毒路线

R1也从R2接收中毒路由

Dec  9 10:22:39.853: RIP: received v2 update from 12.12.12.2 on FastEthernet0/0
Dec  9 10:22:39.853:      1.1.1.1/32 via 0.0.0.0 in 16 hops  (inaccessible)

R1稍后会以固定间隔(30 秒)发送完整更新。

Dec  9 10:23:01.276: RIP: sending v2 update to 224.0.0.9 via FastEthernet0/0 (12.12.12.1)
Dec  9 10:23:01.276: RIP: build update entries
Dec  9 10:23:01.276:    1.1.1.1/32 via 0.0.0.0, metric 16, tag 0
Dec  9 10:23:01.280:    2.2.2.2/32 via 0.0.0.0, metric 1, tag 0
Dec  9 10:23:01.280:    3.3.3.3/32 via 0.0.0.0, metric 1, tag 0

现在看看其他路由器上会发生什么。

R3 :

Dec  9 10:22:39.857: RIP: received v2 update from 23.23.23.2 on FastEthernet0/0
Dec  9 10:22:39.861:      1.1.1.1/32 via 0.0.0.0 in 16 hops  (inaccessible)

然后R3将其发送给R4R2

Dec  9 10:22:41.861: RIP: sending v2 flash update to 224.0.0.9 via FastEthernet0/0 (23.23.23.3)
Dec  9 10:22:41.861: RIP: build flash update entries
Dec  9 10:22:41.861:    1.1.1.1/32 via 0.0.0.0, metric 16, tag 0
Dec  9 10:22:41.865: RIP: sending v2 flash update to 224.0.0.9 via FastEthernet0/1 (34.34.34.3)
Dec  9 10:22:41.865: RIP: build flash update entries
Dec  9 10:22:41.865:    1.1.1.1/32 via 0.0.0.0, metric 16, tag 0

R4 :

Dec  9 10:22:41.916: RIP: received v2 update from 34.34.34.3 on FastEthernet0/0
Dec  9 10:22:41.920:      1.1.1.1/32 via 0.0.0.0 in 16 hops  (inaccessible)
Dec  9 10:22:43.908: RIP: received v2 update from 45.45.45.5 on FastEthernet0/1
Dec  9 10:22:43.908:      1.1.1.1/32 via 0.0.0.0 in 16 hops  (inaccessible)

R4将其发送至R5R3

Dec  9 10:22:43.920: RIP: sending v2 flash update to 224.0.0.9 via FastEthernet0/0 (34.34.34.4)
Dec  9 10:22:43.920: RIP: build flash update entries
Dec  9 10:22:43.920:    1.1.1.1/32 via 0.0.0.0, metric 16, tag 0
Dec  9 10:22:43.924: RIP: sending v2 flash update to 224.0.0.9 via FastEthernet0/1 (45.45.45.4)
Dec  9 10:22:43.924: RIP: build flash update entries
Dec  9 10:22:43.924:    1.1.1.1/32 via 0.0.0.0, metric 16, tag 0

R5 :

Dec  9 10:22:41.888: RIP: received v2 update from 56.56.56.6 on FastEthernet0/1
Dec  9 10:22:41.888:      1.1.1.1/32 via 0.0.0.0 in 16 hops  (inaccessible)

R5将其发送至R6R4

Dec  9 10:22:43.891: RIP: sending v2 flash update to 224.0.0.9 via FastEthernet0/0 (45.45.45.5)
Dec  9 10:22:43.891: RIP: build flash update entries
Dec  9 10:22:43.891:    1.1.1.1/32 via 0.0.0.0, metric 16, tag 0
Dec  9 10:22:43.895: RIP: sending v2 flash update to 224.0.0.9 via FastEthernet0/1 (56.56.56.5)
Dec  9 10:22:43.895: RIP: build flash update entries
Dec  9 10:22:43.895:    1.1.1.1/32 via 0.0.0.0, metric 16, tag 0

R6 :

Dec  9 10:22:39.869: RIP: received v2 update from 26.26.26.2 on FastEthernet0/0
Dec  9 10:22:39.869:      1.1.1.1/32 via 0.0.0.0 in 16 hops  (inaccessible)

R6将其发送至R2R5

Dec  9 10:22:41.873: RIP: sending v2 flash update to 224.0.0.9 via FastEthernet0/0 (26.26.26.6)
Dec  9 10:22:41.873: RIP: build flash update entries
Dec  9 10:22:41.873:    1.1.1.1/32 via 0.0.0.0, metric 16, tag 0
Dec  9 10:22:41.877: RIP: sending v2 flash update to 224.0.0.9 via FastEthernet0/1 (56.56.56.6)
Dec  9 10:22:41.877: RIP: build flash update entries
Dec  9 10:22:41.877:    1.1.1.1/32 via 0.0.0.0, metric 16, tag 0

因此可以看出,该路由已中毒并作为闪存更新发送。这仅包含中毒的路线。稍后定期发送完整更新,其中包含路由和 16 的度量。

如果另一个路由器以更好的度量发送 1.1.1.1/32 网络会发生什么?

R4开始通告 1.1.1.1/32 网络:

R4(config)#int lo0
R4(config-if)#ip add 1.1.1.1 255.255.255.255
R4(config-if)#router rip
R4(config-router)#net 1.0.0.0

Dec  9 10:57:23.275: %LINEPROTO-5-UPDOWN: Line protocol on Interface Loopback0, changed state to up

Dec  9 10:57:32.079: RIP: sending v2 flash update to 224.0.0.9 via FastEthernet0/0 (34.34.34.4)
Dec  9 10:57:32.079: RIP: build flash update entries
Dec  9 10:57:32.079:    1.1.1.1/32 via 0.0.0.0, metric 1, tag 0
Dec  9 10:57:32.083: RIP: sending v2 flash update to 224.0.0.9 via FastEthernet0/1 (45.45.45.4)
Dec  9 10:57:32.083: RIP: build flash update entries
Dec  9 10:57:32.083:    1.1.1.1/32 via 0.0.0.0, metric 1, tag 0

R5安装这条路线:

Dec  9 10:57:16.771: RIP: received v2 update from 56.56.56.6 on FastEthernet0/1
Dec  9 10:57:16.771:      1.1.1.1/32 via 0.0.0.0 in 16 hops  (inaccessible)
Dec  9 10:57:16.775: RT: del 1.1.1.1/32 via 56.56.56.6, rip metric [120/3]
Dec  9 10:57:16.775: RT: delete subnet route to 1.1.1.1/32
Dec  9 10:57:16.775: RT: NET-RED 1.1.1.1/32
Dec  9 10:57:16.779: RT: delete network route to 1.0.0.0
Dec  9 10:57:16.779: RT: NET-RED 1.0.0.0/8
Dec  9 10:57:32.079: RIP: received v2 update from 45.45.45.4 on FastEthernet0/0
Dec  9 10:57:32.083:      1.1.1.1/32 via 0.0.0.0 in 1 hops
Dec  9 10:57:32.083: RT: add 1.1.1.1/32 via 45.45.45.4, rip metric [120/1]
Dec  9 10:57:32.083: RT: NET-RED 1.1.1.1/32

请注意,此行为取决于路由是否已进入抑制状态。要在按住时捕获路线,必须有被动故障。

R2R1应用 ACL以过滤掉 RIP 更新:

R2#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
R2(config)#ip access-list extended NO-RIP
R2(config-ext-nacl)#deny udp any any eq 520
R2(config-ext-nacl)#permit ip any any
R2(config-ext-nacl)#int f0/0
R2(config-if)#ip access-group NO-RIP in

在路由变为无效并进入抑制状态之前,大约需要 180 秒。R2 的这个输出是无效之前的最后一个:

R2#sh ip route 1.1.1.1
Routing entry for 1.1.1.1/32
  Known via "rip", distance 120, metric 1
  Redistributing via rip
  Last update from 12.12.12.1 on FastEthernet0/0, 00:03:00 ago
  Routing Descriptor Blocks:
  * 12.12.12.1, from 12.12.12.1, 00:03:00 ago, via FastEthernet0/0
      Route metric is 1, traffic share count is 1

然后抑制计时器激活:

R2#sh ip route 1.1.1.1
Routing entry for 1.1.1.1/32
  Known via "rip", distance 120, metric 4294967295 (inaccessible)
  Redistributing via rip
  Last update from 12.12.12.1 on FastEthernet0/0, 00:03:01 ago
  Hold down timer expires in 178 secs

当抑制过期时,可以安装路由:

R2#sh ip route 1.1.1.1
Routing entry for 1.1.1.1/32
  Known via "rip", distance 120, metric 1
  Redistributing via rip
  Last update from 23.23.23.3 on FastEthernet0/1, 00:00:07 ago
  Routing Descriptor Blocks:
  * 23.23.23.3, from 23.23.23.3, 00:00:07 ago, via FastEthernet0/1
      Route metric is 1, traffic share count is 1

结论:当一个接口出现故障时,会发送一个触发的闪存更新,以 16 的度量对该路由进行中毒。此更新发送到所有启用 RIP 的接口。因为路由中毒了,路由器可以随意安装其他路由。

如果路由没有中毒而是依靠计时器,那么 180 秒的抑制计时器必须先到期,然后才能安装其他路由。

Poison reverse 是水平分割规则的一个额外附加组件,它在与您描述的情况完全相同的情况下覆盖水平分割。具有无限度量的路由从 A 发送到 B 和 E,从 B 和 E 发送到它们连接的邻居,包括 A。重点是让整个网络进入一个收敛的理解,即 T 和它后面的任何网络都不是更远可达。

这是来自维基百科页面的一段关于水平分割的引用,我用谷歌搜索不到 5 秒就找到了(我们仍然没有得到提示吗?):

带毒物反向的水平分割路由是水平分割路由通告的一种变体,其中路由器通过将路由度量设置为无限(RIP 为 16),主动通告路由不可到达的接口,通过该接口获知路由。这种公告的效果是在大多数循环路由可以通过网络传播之前立即删除它们。据说路由器通过向共享此类更新的其他设备发送“错误”(无限)度量值来毒害网络。毒物逆转的主要缺点是在某些相当常见的网络拓扑中,它可以显着增加路由公告的大小,但它允许在发生故障时提高网络的整体效率。水平分割表示如果相邻路由器向路由器发送路由,接收路由器不会将此路由传播回同一接口上的广告路由器。对于路由毒化,当路由器检测到其连接的其中一条路由失败时,路由器将通过为其分配无限度量并将其通告给邻居来毒化该路由。当路由器向其邻居通告中毒路由时,其邻居违反水平分割规则并将相同的中毒路由发送回始发者,称为中毒反向。为了给路由器足够的时间来传播中毒路由,并确保在传播过程中不会出现路由环路,路由器实施了抑制机制。路由器将通过为其分配无限度量并将其通告给邻居来毒化该路由。当路由器向其邻居通告中毒路由时,其邻居违反水平分割规则并将相同的中毒路由发送回始发者,称为中毒反向。为了给路由器足够的时间来传播中毒路由,并确保在传播过程中不会出现路由环路,路由器实施了抑制机制。路由器将通过为其分配无限度量并将其通告给邻居来毒化该路由。当路由器向其邻居通告中毒路由时,其邻居违反水平分割规则并将相同的中毒路由发送回始发者,称为中毒反向。为了给路由器足够的时间来传播中毒路由,并确保在传播过程中不会出现路由环路,路由器实施了抑制机制。