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

RIP2 不是「更快的 RIP」:跳数上限还是 15,周期还是 30 秒。 它只补了四个洞:掩码、认证、组播、下一跳。

📝 本节和前面几节的关系

7.4.3 那个「没有掩码」的灾难,这一节给出解药。 RIP 这条线到这就结束了,下一节换到链路状态的 OSPF。

一、补的四样东西

RIP2 相对 RIPv1,实质性的改动只有四处:

项目 RIPv1 RIPv2 补上之后
掩码 没有 有 能传子网
认证 没有 明文或 MD5 防伪造
传送 广播 组播 224.0.0.9 少打扰
下一跳 不支持 支持 能绕行

第一行是 RIP2 存在的首要理由:有了掩码字段,10.1.0.0/24 就还是 /24,不会再被压成 /8。 7.4.3 讲的「不连续子网」问题,在 RIP2 里自然消失了。 第二行是安全: RIPv1 谁发都信,一台笔记本插上网线就能宣告「8.8.8.0/24 在我这儿」,整网的流量就被引走了。 RIP2 加了认证,至少要求「知道口令」。 注意「明文认证」几乎没用(抓包就能看到口令),真正有用的是 MD5。

二、组播省的是 CPU,不是带宽

从广播换成组播 224.0.0.9,很多人以为是「省带宽」——其实省的是「不该处理它的人的 CPU」。 带宽上,广播和组播在同一个网段里传的字节数是一样的。 区别在接收侧:广播要「所有主机的网卡都收下来,交给协议栈判断一次」; 组播是「网卡按 MAC 过滤,没加入这个组直接丢」。 所以一台只上网的电脑,收到广播会多一次中断和处理,收到组播则完全无感。 2000 台主机的网里,省下的是 99.7% 的无用唤醒——这个数字在虚拟化环境里更重要: 一台物理机上跑两百个虚拟机,广播会把两百个虚拟网卡全叫醒一次。 所以「换组播」这件事,收益主要在「大规模主机」的场景。

三、为什么跳数上限没改

这是最值得琢磨的一点:RIP2 补了掩码、补了认证,为什么偏偏不改「15 跳」这个最致命的限制? 因为改了就「不兼容」:RIP 的一大优势是「所有老设备都能跑」, 如果 RIP2 把度量改成 32 位,那它就跟 RIPv1 完全不能互通了—— 等于造了一个新协议,而不是「RIP 的第二版」。 设计者的取舍是「保持互通,把规模问题留给 OSPF」。 这个取舍在标准演进里很常见: 一个协议如果「改到不兼容」,那它就该换个名字(OSPF 就是新名字)。 RIP2 的名字里带 2,说明它想「兼容地修bug」——那就只能在「不改度量」的前提下修补。 所以「RIP2 还是 15 跳」不是失误,是定位。

四、RIP 这条线的终点

RIP 的历史到 RIP2 基本结束了,后面还有个 RIPng,只是把地址换成 IPv6、端口换成 521, 机制一点没变。 所以「RIP 值不值得学」这个问题,答案是「值,但别用它」: 它是最好的「距离向量教学样本」—— 四行算法、一张表、几个定时器,就能把「传闻式路由」的优缺点全演一遍。 理解了 RIP,再看 OSPF 的「为什么不这样」,就一通百通。 实际工程里,RIP 还剩两个场景:一是「只能跑 RIP 的老设备」, 二是「临时搭的实验网」(配起来只要两行)。除此之外,选 OSPF 是默认答案。

五、动手 Demo:RIP2 补上了哪几个洞

把 RIPv1 和 RIPv2 并排比,再算组播到底省了多少次唤醒。 注意「跳数上限」那一行没变。

rows = [
    ('掩码',     '没有', '有',            '能传子网'),
    ('认证',     '没有', '明文或 MD5',    '防伪造'),
    ('传送方式', '广播', '组播 224.0.0.9','少打扰'),
    ('下一跳',   '不支持','支持',         '能绕行'),
    ('跳数上限', '15',   '15',            '没改'),
]
for r in rows:
    print('%-10s %-8s %-16s %s' % r)

for hosts, routers in ((20, 2), (100, 3), (2000, 6)):
    saved = 100.0 - 100.0 * routers / hosts
    print('主机 %5d  省下 %.1f%% 的唤醒' % (hosts, saved))

实跑输出:

--------------------------------------------------------------------
RIP2 补上了哪几个洞
--------------------------------------------------------------------
**RIP2 不是「更快的 RIP」**,**跳数上限还是 15,报文格式也几乎没变。**
**它只补了「RIPv1 缺的那几样东西」。**

  项目             RIPv1          RIPv2                  补上之后有什么用
  ----------------------------------------------------------------------------
  **掩码**         **没有**       **有(无类路由)**     **能正确传子网**
  **认证**         **没有**       **明文或 MD5**         **防伪造路由**
  **传送方式**     **广播**       **组播 224.0.0.9**     **少打扰别人**
  **下一跳**       **不支持**     **支持**               **能指定绕行**
  **路由标记**     **没有**       **有**                 **能和别的协议对接**
  **跳数上限**     **15**         **15**                 **没改**

**第一行解决的是 7.4.3 那个灾难**:**有了掩码字段,10.1.0.0/24 就还是 /24,不会再被压成 /8。**
**这一条是 RIP2 存在的首要理由。**

**第三行常被当成「小优化」,其实省的是全网的 CPU**:
**广播是「所有人都得收下来看一眼」,组播是「只有加入这个组的人才处理」。**

  网内主机数     跑 RIP 的路由器     广播唤醒     组播唤醒     省下
  -------------------------------------------------------------------
  20             2                   20           2            90.0%
  100            3                   100          3            97.0%
  500            4                   500          4            99.2%
  2000           6                   2000         6            99.7%

**一台只上网、不跑 RIP 的电脑,收到广播也得把包交给协议栈判断一次。**
**组播直接在内核就把它筛掉了。**
**2000 台主机的网里,省下的是 99.7% 的无用唤醒。**

**但第六行说明它没改本质**:**跳数上限还是 15,还是每 30 秒全量发一遍。**
**所以 RIP2 是「RIP 的修bug版」,不是「新协议」。**
**要跳数上限、要快收敛,还得看 OSPF。**

第一行解决的是 7.4.3 那个灾难:有了掩码字段,10.1.0.0/24 就还是 /24,不会再被压成 /8。 这一条是 RIP2 存在的首要理由。 最后一行说明它没改本质:跳数上限还是 15,还是每 30 秒全量发一遍。 所以 RIP2 是「RIP 的修bug版」,不是「新协议」。 要跳数上限、要快收敛,还得看 OSPF。 组播那个百分比要看清楚是「省下的唤醒次数比例」, 不是「省下的带宽」——同一个网段里,广播和组播占的字节数是一样的。这一点很多资料写混了, 实测一看就知道:抓包看长度,两种一模一样。

30 秒实验

  1. 算一下:2000 台主机的网里,组播省下多少次唤醒?
  2. 想一下:为什么 RIP2 不改 15 跳的上限?
  3. 想一下:明文认证为什么几乎没用?

常见误区

  1. 以为「RIP2 比 RIPv1 快」。 机制完全一样,周期、跳数上限都没变。
  2. 以为「组播省带宽」。 省的是主机侧的唤醒,网段内的字节数一样。
  3. 以为「明文认证能防伪造」。 抓包就能看到口令,真正有用的是 MD5。
自测三问(点开对答案) 1. RIP2 补了哪四样? —— **掩码、认证、组播、下一跳。** 跳数上限没改。 2. 组播到底省了什么? —— **省的是「不该处理它的主机的唤醒」**,不是带宽。 3. 为什么 RIP2 不改 15 跳? —— **改了就不兼容 RIPv1**,那就该叫新协议了。

下一节换到另一种算法:OSPF 的「代价」怎么算。

相关笔记