一、路由表的三种路由类型
路由表中的路由条目,根据其生成方式可分为三类:
-
直连路由 (Direct Routes)
-
来源 :路由器接口上配置了IP地址并激活 后,自动生成。
-
特点 :管理距离(AD)最小 (通常为0),优先级最高,不可更改。指向本接口直连的网络。
-
-
静态路由 (Static Routes)
-
来源 :由网络管理员手动配置。
-
特点:路径固定,不占用网络带宽和CPU资源,但无法适应网络拓扑变化。适合简单、稳定的网络。
-
-
动态路由 (Dynamic Routes)
-
来源 :路由器运行路由协议 (如RIP、OSPF、BGP),自动学习、计算并维护。
-
特点:可自动适应网络变化,但会消耗带宽和CPU资源。适合复杂、变化的网络。
-
一个典型的路由表 会同时包含这三种路由,路由器按照**"最长前缀匹配"** 原则选择最佳路径,当前缀长度相同时,则比较管理距离(来源优先级) 和度量值(路径开销)。
二、深入解析:静态路由与汇总路由
1. 静态路由有什么用?
静态路由虽然"笨",但在特定场景下不可或缺:
-
网络出口/默认路由 :指定去往互联网或未知网络的出口(
ip route 0.0.0.0 0.0.0.0 下一跳)。 -
连接末节网络:连接一个没有其他路由器的网络(如一个单独的服务器子网)。
-
强制流量走向:实现策略路由,让流量走特定路径(如经过防火墙)。
-
路由备份:作为动态路由的备份路径(浮动静态路由)。
-
简单环境:在小型、拓扑不变的网络中,配置简单,性能开销为零。
2. 汇总路由(路由聚合)有什么好?有什么不好?
汇总路由,即把多条连续的具体路由聚合成一条更宽泛的路由。
-
好处 (Pros):
-
减少路由表规模 :这是最大优点。在大网络中,成千上万条路由可被聚合成几十条,极大地节约了路由器内存和CPU资源 ,并加快查表速度。
-
增强网络稳定性 :聚合后的路由像一个"保护罩"。当聚合范围内的某条具体路由发生抖动(频繁翻动)时,这种抖动不会传播到聚合点之外,从而隔离故障,增强全网稳定性。
-
-
坏处 (Cons):
-
可能产生次优路径:汇总过于宽泛时,可能导致路由器选择一条并非最优的路径(如我们之前讨论的"路由环"背景)。
-
可能形成路由黑洞 :如果聚合的网络范围中,存在一些实际并不分配使用的地址块 ,发往这些地址的流量会被匹配到汇总路由,但下一跳路由器可能没有更具体的路由,导致数据包被丢弃 (黑洞)。解决方法就是在源头为这些未使用的地址配置指向
Null0的黑洞路由。
-
三、距离矢量 (DV) 路由与 RIP 协议
1. 距离矢量 (DV) 路由选择的基本工作原理
想象每个路由器都是一个"村庄",它们只和"隔壁村庄"(直连邻居)交流。
-
"距离" :通常指跳数(经过路由器的数量),也可以是带宽、延迟等综合度量。
-
"矢量" :指方向,即"下一跳"是谁。
工作流程(类比"村里传谣"):
-
初始:每个路由器只知道自己的直连网络(距离=0)。
-
定期广播 :每个路由器周期性地将自己知道的全部路由表(目标网络+距离+方向)广播给所有邻居。
-
学习与计算 :收到邻居的"情报"后,路由器相信 邻居所说的距离,加上自己到邻居的成本(通常是1跳),作为通过该邻居到达目标的新距离。
-
选路 :对同一个目标网络,比较从不同邻居学来的距离,选择距离最短的路径,写入自己的路由表。
-
循环往复:通过一次次周期性的广播,路由信息像"波浪"一样传遍整个网络。
核心特点 :"道听途说,只知远近,不知全貌"。每个路由器都没有全网的拓扑图,只知道自己到目标的"距离"和"下一跳"是谁。
2. RIP 是 DV 的一个实例,其运行有什么问题?
RIPv2/RIPng是DV协议的典型代表。其核心问题源于DV的工作原理:
-
收敛速度慢:依赖周期性广播(默认30秒),网络变化需要较长时间才能传遍全网。
-
计数到无穷 :**最大跳数限制(15跳)** 是应对环路的主要手段。当路由失效时,错误信息会像"谣言"一样被不断放大(距离值递增),直到达到最大值16(不可达),这个过程很慢。
-
路由环路风险 :虽然通过水平分割、毒性逆转、触发更新、抑制定时器等机制(我们之前详细讲过)来缓解,但环路风险是DV协议的固有缺陷。
-
以跳数为度量:仅以跳数衡量路径好坏,不考虑带宽、延迟、负载等因素,可能导致选择低带宽、高延迟的次优路径。
3. RIP 消失了吗?
没有完全消失,但应用范围已大幅缩小。
-
现状 :在大型企业网、运营商网络的核心和汇聚层,RIP因其收敛慢、规模限制(15跳)和度量简单等缺点,已被OSPF、IS-IS、EIGRP等更先进协议取代。
-
存活场景 :在一些小型网络、教学实验环境、或对兼容性有极高要求的传统设备 上仍有使用。其配置简单的优点在极简网络中依然有价值。
-
RIPng:在纯IPv6或双栈的简单网络中,RIPng作为为数不多的动态IGPv6协议,仍有一席之地。
四、链路状态 (LS) 路由与 OSPF 协议
1. 链路状态 (LS) 路由选择的基本工作原理
LS协议的工作方式与DV完全不同,它像每个路由器都在绘制一张"网络地图"。
-
发现邻居,建立关系:路由器通过发送Hello报文,发现并确认与直连路由器的邻接关系。
-
泛洪链路状态 :每个路由器将自己直连链路的状态信息 (如连接了谁、链路开销等)打包成一个LSA ,可靠地泛洪给区域内的所有其他路由器。
-
构建拓扑数据库 :每个路由器收集全网所有的LSA,组合成一个完全一致的链路状态数据库 。每个路由器都拥有一张完全相同的、完整的网络拓扑图。
-
运行SPF算法 :每个路由器以自己为根,在这张完整的拓扑图上独立运行最短路径优先算法,计算出一棵到达所有目标网络的最短路径树。
-
生成路由表:根据SPF树的结果,生成最终的路由表。
核心特点 :"绘制地图,独立计算,全局视野"。每个路由器都知道全网拓扑,能独立计算出无环的最优路径。
2. OSPF 是 LS 的一个实例,另外一个常用的实例是什么?
-
OSPF :开放式最短路径优先协议 ,是应用最广泛的IGP链路状态协议。它划分区域,支持VLSM/CIDR,快速收敛,适合大型网络。
-
另一个常用实例 :IS-IS。它和OSPF是"孪生兄弟",同为链路状态协议,原理相似。区别在于:
-
OSPF 运行在IP层之上,直接封装在IP报文中。
-
IS-IS 运行在数据链路层,有自己的协议号。最初为OSI模型设计,后扩展支持IP。在大型运营商(特别是电信骨干网)中使用非常广泛。
-
3. OSPF 运行的最重要最基础的一步是什么?
最重要最基础的一步是建立邻接关系,并同步链路状态数据库。
只有成功建立了邻接关系的路由器之间,才会交换LSA,从而确保各自的LSDB完全同步。这是后续所有计算(SPF)和正确路由的基础。没有这步,就没有一致的"网络地图"。
4. OSPF 运行时用到的 Hello 报文有什么用?
Hello报文是OSPF的"心跳"和"信使",主要有四大作用:
-
发现邻居:通过在接口上组播发送Hello报文,来发现同一网段上的其他OSPF路由器。
-
建立和维护邻居关系:通过周期性发送Hello报文,告知对方"我还活着"。
-
传递关键参数 :Hello报文中携带Router ID、Area ID、认证信息、网络掩码、Hello/Dead间隔 等参数。只有这些参数匹配的两台路由器才能成为邻居。
-
在广播/NBMA网络中选举DR/BDR。
5. OSPF 运行时可能有 8 种状态,其中有三种稳态,分别是什么?
OSPF邻居关系建立需要经过一系列状态机变迁。三种关键的稳定状态是:
-
2-Way :双向通信状态 。双方都收到了对方的Hello报文,看到了自己的Router ID在对方的邻居列表中。这是点到点链路和点到多点链路的最终稳定状态。
-
Full :完全邻接状态 。双方已完全同步了链路状态数据库 。这是广播和NBMA网络中DR、BDR与其他路由器 的最终稳定状态,也是所有路由器之间交换路由信息的基础。这是最重要的稳定状态。
-
ExStart/Exchange/Loading 是达到Full状态前的过渡状态。Down, Init, Attempt 是建立前的状态。
简单记 :2-Way(确认过眼神)和Full(交换过家底)是两种主要的稳定工作状态。
6. 为什么要选举 DR?
在广播型多路访问网络 (如以太网)中,如果所有路由器都两两建立全毗邻关系,会产生n*(n-1)/2个邻接关系,LSA泛洪会造成大量重复流量。
选举指定路由器 和备份指定路由器 是为了优化网络泛洪过程:
-
DR :成为该网段的"中心发言人 "。所有其他路由器(DROther)只与DR和BDR建立Full邻接关系,彼此间只到2-Way状态。它们将LSA发送给DR,由DR负责泛洪给网段内所有路由器。
-
BDR:作为DR的备份,随时准备接替DR的工作。
好处 :大幅减少邻接关系数量,减少协议流量,提高网络收敛速度和稳定性。
总结对比
| 特性 | 静态路由 | 距离矢量 (RIP) | 链路状态 (OSPF/IS-IS) |
|---|---|---|---|
| 工作原理 | 手动配置 | 听邻居说,只知下一跳和距离 | 收集全网地图,自己独立计算 |
| 度量依据 | 无 | 跳数 | 带宽、延迟等综合开销 |
| 收敛速度 | 瞬时(配置即生效) | 慢(周期更新,计数到无穷) | 快(触发更新,SPF重算) |
| 环路避免 | 无环(人工保证) | 易产生,靠机制缓解 | 算法保证(SPF树无环) |
| 资源消耗 | 无 | 低(定期广播) | 高(维护LSDB,运行SPF) |
| 网络规模 | 任意 | 小(≤15跳) | 大(分层设计) |
| 配置复杂度 | 简单 | 简单 | 复杂 |