动态路由和 RIP
这节课必须记住的
- 优先级数值越小越优先:直连 0、OSPF 10、静态 60、RIP 100
- 优先级管跨协议选路,开销管同协议选路;两个都是越小越优,不同协议的 cost 不能互比
- RIP 开销=跳数,工作半径 15 跳,16 表示不可达(毒药值)
- RIP 四个计时器:更新 30s、老化 180s、抑制 180s、垃圾收集 120s
- RIPv1 有类别不带掩码、广播发送;RIPv2 无类别带掩码、组播 224.0.0.9
- RIP 封装:UDP,源/目的端口都是 520
- 华为 RIP 默认跑 v1,做 VLSM 实验必须
version 2+undo summary
静态路由和动态路由
两种路由要解决的问题一样,都是让路由器学到自己不直连的网段。不同在于路由是谁写进去的。
静态路由是管理员手工配的。好处:选路自己说了算、不占设备资源、不存在协议报文被伪造的问题。麻烦有三个:
- 配置量大,网络一大,每台设备都要手写一堆条目
- 不能自动收敛。某个网段的线断了,R1 上那条静态路由还是指着原来的下一跳,路由表不会自己更新,包继续往死路上发。路由器本身不知道对面没了,除非人去改表
- 拓扑一变就要人工介入,人不在就一直是错的
动态路由是所有路由器跑同一种协议,互相交换信息自动算路由。好处是配置简单、拓扑一变能自动收敛:知道网段没了的路由器把消息扩散出去,别人收到就删掉那条路由,不再往那边发。
代价三个:
- 算出来的路不一定好。路径是协议用一种算法算的,算法有局限就绕远。最典型是 RIP,只看跳数不看带宽——从 R1 去 1.0 网段,上面千兆走 2 跳、下面百兆走 1 跳,RIP 选下面那条,慢十倍它也不管
- 占链路资源,也占 CPU 和内存(要发报文、要算、要维护邻居)
- 有安全问题,设备之间传数据,报文可能被伪造篡改,所以后来才有认证
动态路由能自动收敛,不代表全世界该跑同一种协议。例如某个机房拔一根线,消息要扩散到全球每台设备。所以实际网络必须分域分层,把收敛范围限制住——自治系统的由来。
自治系统 AS
AS 就是由一个组织或机构管理的一堆 IP 网络和设备。划分看谁管,不看地理位置,也不看技术架构。电信、移动、联通、广电各自管的机房、IP 段、设备,就分别是不同的 AS。
AS 号:标准是16 位二进制,范围 0~65535,其中0 和 65535 保留,实际可用1~65534。
补一点老师没讲的:64512~65534 是私有 AS 号,跟私有 IP 一个道理,只内部用不上公网。另有32 位扩展 AS 号解决号不够用。
协议按范围分两类:
- AS 内部跑 IGP(内部网关协议):RIP、OSPF、IS-IS、EIGRP
- AS 之间跑 EGP(外部网关协议):BGP
EIGRP 是思科私有协议,华为跑不了。OSPF、IS-IS、RIP 是开放标准,跨厂商能通。这门课重点学RIP 和 OSPF。
两大类:距离矢量型和链路状态型
如图
距离矢量型(RIP 为代表)
用贝尔曼-福特算法,外号"依据传闻的路由协议"。
干的事很直接:把自己路由表里的网段告诉邻居。R1 知道 1.0 和 12.0 就发给 R2,R2 知道 2.0 和 12.0 就发给 R1。收到后对一下自己的表,已有的不抄,没有的才写进去。
名字拆开看:距离=开销值(远近),矢量=方向(下一跳和出接口)。
问题在于无条件相信邻居,自己不做拓扑计算,所以容易出环、收敛慢。
链路状态型(OSPF 为代表)
传的不是路由信息,是 LSA(链路状态通告)。LSA 内容是"我这个接口连着谁、什么网段、开销多少",本质是拓扑信息。
每台路由器先把自己那块地图发出去,全网收齐后各自拼一张完整拓扑图,再用SPF 算法把图转成树,从树上算出怎么走,最后才写进路由表。
LSA ≠ 路由。LSA 只说接口连接情况,路由是每台路由器自己算出来的,不是别人给的。
必须收齐拓扑才能算,不能收到一条 LSA 就当路由用。
为什么链路状态型不容易出环:SPF 算出来的是以自己为根的树,从根到任一点只有一条路,不会绕回走过的点,环在结构上不可能出现。
代价是每台设备都要存全网拓扑、跑一遍 SPF,比 RIP 吃资源多。
优先级和开销(最容易记混的地方)
两个参数管的事不一样,必须分开看。
优先级 Preference:管不同协议之间
一台路由器可能同时从静态、RIP、OSPF 学到同一条网段,先比优先级,只留最好的那条进路由表,其余压根不加载。
规则:数值越小越优先。
华为默认值:直连 0、OSPF 10、静态 60、RIP 100。
所以静态和 RIP 都有同一条网段时,设备选静态(60 < 100),它更信人手工配的。RIP 排在 100,说明设备对传闻的信任度本来就不高。
开销 Cost:管同一协议内部
同一协议学到同一条网段但路径不同时,比开销,越小越好。
三个结论
- 先比优先级,再比开销;跨协议只比优先级,开销不参与跨协议比较
- 优先级和开销都是越小越优,别记反
- 不同协议的 cost 不能互比。RIP 的 cost 是跳数,OSPF 的是带宽换算值,两套度量没法放一起算。就像去西安,走路省钱但慢、飞机快但贵,这两种代价放一起算不出来
RIP 的基础
邻居有明确定义
已经能互通(接口同网段、能 ping 通)并且直接相连,才算邻居。所以两台路由器之间连 ping 都不通,它们不是邻居,不能直接交换路由信息。
路由信息只能在邻居之间传,然后一跳一跳往下走。R2 和 R3 不是邻居,但 R2 是 R1 的邻居、R1 是 R3 的邻居,那 R2 的 2.0 网段就能经 R1 传给 R3。这就是"传闻"——消息一层层传过去,不是自己看到的。
关键参数
- 优先级 100(华为默认)
- 开销=跳数,过一台路由器算 1 跳
- 工作半径 15 跳,开销 16 表示不可达
- 因为 15 跳限制和收敛慢,RIP 只能用在小型企业网
等价负载均衡
去同一目标有两条跳数相同的路径(比如都是一跳),RIP 认为开销一样,两条一起发,分担流量。
华为默认最多 4 条等价路径同时转发,最大能配到 16 条。
易错:"等价"专指跳数相等,不是带宽或延迟差不多。一条 1 跳一条 2 跳,就算两条都是千兆,也不会均衡。
优先级不随路由传递
RIP 传路由不传优先级。因为各设备各协议的优先级是本地定的,各家不一样,传过来也不能按原值用。优先级是本地概念,只在本机生效。
贝尔曼-福特怎么处理(讲义写了四条,其实是三种情况)
R2 把 2.0 网段发给 R1,R1 收到后:
情况一:表里没有这条路由→ 直接写进去。
"刷新"不是建个空条目,是按对端给的内容填:网段和掩码来自通告,跳数要在对端给的数上再加 1(过了一台路由器)。
情况二:表里有,且下一跳就是 R2→无条件刷新,不管内容变没变。
原则是以最新的为准,同一个来源说的话,永远信最新那次。
情况三:表里有,但下一跳不是 R2(出现冗余路径)→不能默认走 R2,必须比开销:
- 本地开销大于R2 发来的 → R2 更近,刷新,改走 R2
- 本地开销小于R2 发来的 → R2 更远,不刷新,保留原路
- 两边相等→ 两条都留,做负载均衡
这套"收到就比、比完就改",就是距离矢量协议的全部核心。简单好实现,但完全靠邻居传话,收敛慢、容易出环,这是先天毛病。
报文和封装
RIPv1、RIPv2 用于 IPv4;RIPng 用于 IPv6。
V1 和 V2 三个区别
区别一:有类别 vs 无类别(最本质)
- V1 有类别:传网段时不带子网掩码,接收方只能按地址的"出身"(A/B/C 类默认掩码)推范围
- V2 无类别:传的时候带掩码,接收方按明说的算范围,所以V2 支持 VLSM 和 CIDR
记法:有类别靠"出身"定掩码,无类别靠"明说"定范围。
华为 VRP 上 RIP 默认跑 v1。做 VLSM 实验必须进 RIP 进程敲
version 2,还要undo summary关掉自动汇总。否则学到的路由会被汇总成主类网段,会莫名其妙 ping 不通,查半天查不出原因。
区别二:手工认证,V1 不支持,V2 支持
就是邻居双方事先约好一个口令,发送方报文带上,接收方核对,对得上才用,对不上直接丢。
注意不加密,只是拿预共享口令对个暗号,属于很简单的防护。目的是防止有人伪造 RIP 报文往路由表里塞假路由。
区别三:V1 广播,V2 组播
封装细节
RIP 走传输层 UDP,源端口和目的端口都是 520。
V1 报文(R2 向 R1 通告 2.0 网段):
- 源 IP12.0.0.2(R2 出接口地址)
- 目的 IP255.255.255.255(广播)
- 源 MAC 是 R2 出接口 MAC,目的 MAC全 F
V2 报文:
- 源 IP12.0.0.2(出接口地址,换接口就变,不固定)
- 目的 IP224.0.0.9(RIP V2 专用组播地址,D 类,224~239)
- 目的 MAC01-00-5E-00-00-09
组播 MAC 怎么来的:不是随机生成,是组播 IP 映射出来的,规则固定——前 24 位写死01-00-5E,后 24 位直接抄组播 IP 的后 24 位。
224.0.0.9 → 十六进制E0 00 00 09→ 取后 24 位00 00 09→ 拼成01-00-5E-00-00-09。所有跑 RIPv2 的设备默认都加入了 224.0.0.9 这个组播组。
广播和组播的差别
链路上两者都不省。交换机对广播帧和组播帧的处理都是泛洪,从除入口外的所有端口发出去,链路上跑的数据量一样。
省的是终端设备的处理开销:
- 广播:所有终端都得收。收到全 F 的帧,解二层,看到三层目的 IP 是 255.255.255.255,觉得可能是找自己的,继续解三层;一直到四层看到端口号 520,才认出是 RIP 跟我没关系,丢掉。白解了两层封装,浪费终端 CPU
- 组播:终端先看目的 MAC 是不是组播地址、自己有没有加入对应组。没跑 RIP 没加组的,直接在二层就丢了,根本不用往上解
结论:广播靠端口号丢弃,组播靠 MAC 和加组状态丢弃。组播省的是设备处理资源,不是链路资源。
为什么要周期更新
两种报文:Request 是请求(索要路由信息),Response 是响应(真正带路由信息的就是它)。新设备起来发 Request 问一下,邻居回 Response 把路由内容给它,它抄下来,收敛就完了。
问题是收敛完了它还要每 30 秒发一次 Response,这叫周期更新。看着浪费,其实没办法,两个原因。
原因一:补确认机制的缺失。
"可靠"的定义是发送方知道对端到底收没收到,比如 TCP 每发一个包都要等 ACK。按这个标准往下看:
- 数据链路层没有确认,不可靠
- 网络层 IP 没有确认,不可靠
- 传输层如果跑 TCP 就可靠,但 RIP 用的是 UDP,还是不可靠
三层加传输层全不可靠,只能靠应用层自己补。DHCP 的补法是设计了 DHCP ACK 报文做显式确认,RIP 没有设计 ACK,只能靠每 30 秒重发一次这种笨办法,反复说,总有说清的时候。
原因二:补保活机制的缺失。
路由器得知道邻居还活着。RIP 没有专门的保活报文(OSPF 有专门的 Hello 包干这事),只能靠"你每 30 秒给我发一次,我就当你还活着",超过老化时间没收到才判定对方挂了。
而且周期更新必须是异步的。如果所有设备用同一个计时器、每 30 秒同时发一大批包,网络会周期性拥堵,规律性地卡一下。所以实际带随机偏移,理论 30 秒,真实在 25~35 秒浮动。
题目问"RIP 更新计时器多少秒",直接答 30 秒。** ±5 秒的偏差是因为机房设备经常统一上电,计时器起点差不多错不开,实测不是严格 30 秒。
四个计时器(必背)
更新计时器 30 秒——管周期性发 Response。
老化计时器 180 秒——每收到一次刷新就重置。正常 R2 每 30 秒发一次,计时器一直刷新;网段失效后 R2 不再发,计时器一直累加,到 180 秒归零才判定失效。
180 秒正好是 6 个更新周期(30×6),这就是"6 次容错"。设备就算因为死机有偏差,五六十秒才发过来,只要没超 180 秒,计时器照样刷新,不会误删。等这么久是为了避免网络稍微波动一下就误删路由。
归零之后分两步:先从路由表移除、停止转发,不再往失效网段送包;但不彻底删,条目留在缓存里,后面周期更新继续带着它,只是开销值要改成 16。
抑制计时器 180 秒——讲义里没写,老师口头提的。一条路由被判不可达后,抑制期内不接受同一网段的其他更新,防止网络震荡时路由条目反复上下翻动。
垃圾收集计时器 120 秒——讲义只有标题没内容,华为默认 120 秒。条目被标记不可达后还要在表里留 120 秒才彻底删掉。留着这段的作用是:万一还有邻居没收到"该网段没了"的消息,这期间还能把毒化信息继续发出去,让全网都能删干净。
带毒传输
为什么设成 16?因为RIP 只能通告可达的路由,没法直接说"这个不可达"——它没有"删除"这个动作,只有"我这儿有什么"。
所以只能变通:把开销设成 16,超出 15 跳的工作半径,等于宣告不可达,代表这条路"有毒"。邻居收到 16 就明白该网段没了,把对应条目删掉。
举个例子:2.0 网段突然消失,R2 不再向 R1 发这条路由。R1 不会立刻删,先等 180 秒老化。归零后 R1 把 2.0 从路由表移除但保留缓存,然后在周期更新里告诉其他邻居"2.0 的开销是 16",邻居跟着删。
这也看出RIP 笨在哪:收敛是逐跳慢慢传的。R3 要等 R1 老化完、再发毒化通告之后才知道 2.0 没了,整网收敛可能几十秒到几分钟。
RIP 怎么防环
讲义只提了一句"某些协议会算出环路",没说 RIP 自己怎么防。RIP 因为无条件相信邻居,天生容易出环,靠这几个机制压着:
最大跳数 15——16 就算不可达,把无限计数强制截断,环路最多绕 15 跳就停。
水平分割(Split Horizon)——从某个接口学到的路由,不再从这个接口发回去,不把消息还给它来时的方向。
毒性逆转(Poison Reverse)——水平分割的加强版,从某接口学到的路由反而从这个接口发回去,但开销置 16,明确告诉对方"这条路从我这儿走不通"。
触发更新(Triggered Update)——拓扑一变立刻发,不等 30 秒周期,加快收敛。
抑制计时器——防路由抖动时条目反复翻动。
这五个加起来能把环路危害压到能接受,RIP 收敛慢、规模小这两个·问题,所以大型网络一律用 OSPF 或 IS-IS。
实验部分复习
缺省路由0.0.0.0 0——不指定目标网段,匹配所有其他路由都匹配不上的包,是数据的最后退路,一般指向出口或运营商。
负载均衡——多条开销相同的路径一起转发分担流量,静态路由写两条同开销的就能做。
环回接口(LoopBack)——路由器上的虚拟接口,状态永远是 UP,不用接线,用来模拟挂终端的网段,做实验很方便。
手工汇总——把连续的、走同一跳可达的几个子网合成一条大网段,减少路由表条目。前提是地址连续、掩码一致。
路由黑洞——手工汇总时被括进汇总范围、但实际并不存在的地址。包进了黑洞路由器就没处去,被丢掉,白白耗链路资源。
空接口路由(NULL0)——在做了汇总的路由器上加一条指向汇总网段的 NULL0 路由。作用是当汇总段里某个具体地址根本不存在时,让它在本机就被丢掉,而不是顺着缺省路由发出去绕一圈再回来,防止缺省路由和路由黑洞相遇形成环路。
靠最长匹配原则:真实存在的明细路由掩码更长,优先匹配,不受影响;只有不存在的地址才会命中 NULL0 被丢。
浮动静态路由——给备用路由配更差的优先级(主路默认 60,备路preference 100),平时不活跃不进路由表,主路一断备路自动顶上。这就是用静态路由做主备切换。
实验整体流程:先规划 IP(骨干链路用/30省地址,环回用/28并做汇总)→ 配接口和环回 IP → 配路由(缺省 + 汇总 + NULL0 + 浮动)→ 逐台验证。