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 秒实验
- 算一下:2000 台主机的网里,组播省下多少次唤醒?
- 想一下:为什么 RIP2 不改 15 跳的上限?
- 想一下:明文认证为什么几乎没用?
常见误区
- 以为「RIP2 比 RIPv1 快」。 机制完全一样,周期、跳数上限都没变。
- 以为「组播省带宽」。 省的是主机侧的唤醒,网段内的字节数一样。
- 以为「明文认证能防伪造」。 抓包就能看到口令,真正有用的是 MD5。
自测三问(点开对答案)
1. RIP2 补了哪四样? —— **掩码、认证、组播、下一跳。** 跳数上限没改。 2. 组播到底省了什么? —— **省的是「不该处理它的主机的唤醒」**,不是带宽。 3. 为什么 RIP2 不改 15 跳? —— **改了就不兼容 RIPv1**,那就该叫新协议了。下一节换到另一种算法:OSPF 的「代价」怎么算。
- ☐ (本节完,下一节 7.5.1 OSPF是链路状态型路由协议)