📚 第七章 路由协议
📄 一句话概括

RIP 没有「邻居」这个概念:它只是定时把整张表喊出去。 每 30 秒一次,用 UDP 520 端口,一个包最多装 25 条路由。

📝 本节和前面几节的关系

7.3.1 讲了距离向量的算法,这一节讲它落地成 RIP 之后长什么样。 这里说的「广播」会一直用到 7.4.5 的 RIP2——那一版把广播换成了组播。

一、它连「邻居」都不建

这一点最容易误解:OSPF、BGP 都要先「建邻居」,握手、协商参数、维持状态;RIP 什么都不做。 它只是每 30 秒往广播地址发一份整表,谁听见算谁的。 所以「RIP 邻居」这个词其实不准确——它没有邻居表,只有路由表。 一台路由器甚至不知道对面那台是不是也在跑 RIP,它只是「听见了就学,听不见就等超时」。 这个设计的好处是「简单到不可能配错」: 开起来就工作,不需要匹配区域号、不需要对齐认证、不需要指定对端。 坏处是「没法控制」: 同一段线路上任何一台设备发 RIP 通告,都会被采信—— 这就是 RIP 容易被「伪造路由」攻击的原因,也是 RIP2 要加认证的原因。

二、为什么是 30 秒

30 秒是「带宽」和「收敛」的折中。 当年的链路大多是 9.6 kbps 到 64 kbps,一条 512 字节的通告在 9.6 kbps 上要传将近半秒。 周期太短,光通告就占满了带宽。 算一下就知道当年有多紧:

路由器数 每 30 秒总字节 在 9.6k 上占带宽
5 520 0.14%
50 25,200 7%
200 100,800 28%

200 台路由器就把 9.6k 的线路吃掉将近三成——而这条线路上还要跑业务数据。 所以 RIP 的适用规模,从带宽角度看也只有几十台,和 15 跳的上限刚好对得上。 今天带宽涨了几万倍,30 秒这个数字却没改—— 不是因为还缺带宽,是因为「改了会破坏兼容性,而 RIP 已经不需要优化」。

三、为什么一包只能装 25 条

RIP 报文的结构决定了这个上限:4 字节首部,每条路由 20 字节, 25 条就是 500 字节,加首部 504 字节。 再往上加,UDP 载荷就会超过 512 字节的惯例上限,老设备可能处理不了。

部分 字节 说明
RIP 首部 4 命令、版本、保留
一条路由 20 地址族、标记、地址、掩码、下一跳、度量
25 条 500 一个包的上限
加首部 504 UDP 载荷

所以「路由表超过 25 条」并不意味着 RIP 崩了,它会分成多个包发,每个包算一次。 但「分包」这件事有代价:报文数变多、丢一个包就少一批路由、而且这些包可能乱序到达。 所以表越大,RIP 越不稳——这也是「RIP 只适合小网」的物理原因之一。

四、三个定时器要一起看

RIP 的稳定运行靠三个定时器配合:

定时器 时长 作用
更新 30 秒 到点就发整表
超时 180 秒 6 个周期没听到,判为不可达
清除 120 秒 判不可达之后再等这么久,才真正删掉

「超时」是 6 个周期,不是 1 个, 因为「偶尔丢一个通告」是正常的——如果一丢就判死,网络会天天抖。 6 个周期意味着「连续六次都没收到」才认定出事, 代价是「最长要 180 秒才发现」——三分钟里,流量一直往一个死掉的方向送。 「清除」这个 120 秒很反直觉:判了不可达,为什么不立刻删? 因为「立刻删掉」会让这条路由从表里消失,如果它其实只是临时抖动,一会儿又得重新学。 所以先标成「不可达(度量 16)」但保留,等 120 秒确认没救再删—— 这是「先观察再动手」的思路,代价是表里会有一段「僵尸条目」。

五、动手 Demo:RIP 每 30 秒要发多少字节

算一条广播网段上,不同规模的路由器群每 30 秒要发多少数据、占多少带宽。 再看一个完整报文由哪些部分组成。

for n in (2, 5, 10, 50, 200):
    pkt = n * (4 + 20 * min(n, 25))   # 一包最多 25 条
    per = pkt * 8 / 30.0
    print('%4d  %8d 字节  %7.1f kbps' % (n, pkt, per / 1000))

# 一个完整报文
body = 4 + 20 * 25          # 504
total = body + 8 + 20 + 18  # 加 UDP、IP、以太网
print('整包:', total, '字节')

实跑输出:

--------------------------------------------------------------------
RIP 每 30 秒要发多少字节
--------------------------------------------------------------------
**RIP 的工作方式是「定时把整张表喊一遍」**。**喊得勤,收敛快;喊得勤,也真占带宽。**
**算一下一条广播网段上的开销。**

  网段上的路由器数     每 30 秒总字节     平均占用带宽
  -----------------------------------------------------
  2                    88                 23 bps
  5                    520                139 bps
  10                   2,040              544 bps
  50                   25,200             6.7 kbps
  200                  100,800            26.9 kbps

**200 台路由器的时候是二十几 kbps**,
**放在今天不算什么,放在 1990 年的 10M 以太网上就是实打实的一笔。**
**而且这里只算了一条网段**——**一台路由器有多少个接口,就要发多少份。**

**再看单个报文有多大**:

  部分           字节        说明
  ----------------------------------------------------
  RIP 首部       4           命令、版本、保留
  25 条路由      500         每条 20 字节
  UDP 首部       8           源端口 520、目的端口 520
  IP 首部        20          协议号 17
  以太网头尾     18          14 头加 4 校验
  **合计**       **550**     **一个完整的 RIP 报文**

**一个包最多装 25 条路由**:**25 乘 20 加 4 等于 504 字节。**
**所以路由表超过 25 条,一个包就装不下**——**RIP 会分成多个包发,每个包算一次。**
**这也是「RIP 只适合小网」的物理原因之一**:**表越大,要发的包越多,而它还是每 30 秒全量发一遍。**

200 台路由器的时候是二十几 kbps, 放在今天不算什么,放在 1990 年的 10M 以太网上就是实打实的一笔。 而且这里只算了一条网段——一台路由器有多少个接口,就要发多少份。 一台有 8 个接口的路由器,开销直接乘 8。 一个包最多装 25 条路由:25 乘 20 加 4 等于 504 字节。 所以路由表超过 25 条,一个包就装不下——RIP 会分成多个包发,每个包算一次。 这也是「RIP 只适合小网」的物理原因之一:表越大,要发的包越多,而它还是每 30 秒全量发一遍。

30 秒实验

  1. 算一下:200 台路由器在 9.6 kbps 线路上,RIP 占多少带宽?
  2. 想一下:为什么超时是 6 个周期(180 秒),而不是 1 个周期?
  3. 想一下:为什么判了不可达还要再等 120 秒才删除?

常见误区

  1. 以为「RIP 会跟邻居握手」。 它不建邻居关系,只是定时广播,听见就学。
  2. 以为「30 秒是性能优化出来的」。 是当年带宽算出来的折中,今天没改是为了兼容。
  3. 以为「路由表超过 25 条 RIP 就崩了」。 会分多个包发,只是报文变多、更不稳。
自测三问(点开对答案) 1. RIP 用什么协议和端口传? —— **UDP,端口 520。** 所以它不需要自己实现可靠传输。 2. RIP 的三个定时器是什么? —— **更新 30 秒、超时 180 秒、清除 120 秒。** 3. 为什么一个包只能装 25 条路由? —— **4 字节首部加 25 乘 20 等于 504 字节**,卡在 512 字节的惯例上限之下。

下一节看收到通告之后,那一步「加一比较」具体怎么做。

相关笔记