在介绍 RIP、OSPF、BGP 等协议之前,我们必须先介绍一下互联网中的两大类路由选择协议。
而在这之前又必须简单介绍一下自治系统 🉑。
一、自治系统 🌕
自治系统 AS
(Autonomous System) :
自治系统就是几个路由器组成了一个小团体 👨👩👧👧,小团体内部使用专用的协议进行通信,而小团体和小团体之间也使用专用的协议进行通信。
就像这样一样:
值得一提的是,尽管一个 AS 内部使用了路由选择协议,但是一个 AS 对其他 AS 还是相当于两个普通的路由器在通信。
二、路由选择协议 🌖
互联网中有两大类路由选择协议,他们分别是:
- 1️⃣
内部网关协议
IGP (Interior Gateway Protocol) - 2️⃣
外部网关协议
EGP (External Gateway Protocol)
其中内部网关协议就是我们之前说的在路由器的小团体之间进行通信所使用的协议,如 RIP
和 OSPF
等。
而外部网关协议则是小团体与小团体之间交流所使用的协议,目前使用的协议就是 BGP
。
到此为止我们要讲述的猪脚就登场了 !💨
自治系统之间的路由选择也叫作域间路由选择 (interdomain routing),在自治系统内部的路由选择叫作域内路由选择 (intradomain routing) 。
三、内部网关协议 RIP 🌗
好了,下面我们进入第一块内容 RIP 协议。
1、工作原理
全称是路由信息协议
RIP (Routing Information Protocol) 。
- ✅ 它是一种分布式的、
基于距离向量
的路由选择协议。 - ✅ 它要求网络中的每一个路由器都要维护从它自己到其他每一个目的网络的距离记录。
关于距离的定义:
- 从一个路由器到直接连接的网络的距离定义为 1。
- 从一个路由器到非直接连接的网络的距离定义为所经过的路由器数加 1。
- “距离” 也称为 “跳数”(hop count),因为每经过一个路由器,跳数就加 1。
- 这里的“距离”实际上指的是“最短距离”。
RIP 认为一个好的路由就是它通过的路由器的数目少,即“距离短”。
RIP 允许一条路径最多只能包含 15 个路由器。
❌这意味着 RIP 只会选择一个具有最少路由器的路由(即最短路由),哪怕还存在另一条高速(低时延)但路由器较多的路由。
RIP 协议的三个特点
- 1️⃣ 仅和相邻路由器交换信息。
- 2️⃣ 交换的信息是当前本路由器所知道的全部信息,即自己的路由表。
- 3️⃣ 按固定的时间间隔交换路由信息,例如,每隔 30 秒。
❓ 那么在小团体(自治系统)之内的路由器是怎么建立路由表的呢?
- 路由器在刚刚开始工作时,只知道到直接连接的网络的距离(此距离定义为1)。它的路由表是空的。以后,每一个路由器也只和数目非常有限的相邻路由器交换并更新路由信息。
- 经过若干次更新后,所有的路由器最终都会知道到达本自治系统中任何一个网络的最短距离和下一跳路由器的地址。
- RIP 协议的
收敛
(convergence) 过程较快。“收敛”就是在自治系统中所有的结点都得到正确的路由选择信息的过程。
2、距离向量算法
距离向量算法的基础就是 Bellman-Ford 算法(或 Ford-Fulkerson 算法)。这是一种贪心算法。
该算法可以大致描述如下:
设X是结点 A 到 B 的最短路径上的一个结点。若把路径 A→B 拆成两段路径 A→X 和 X→B,则每一段路径 A→X 和 X→B 也都分别是结点 A 到 X 和结点 X 到 B 的最短路径。
❓ 它是用来干什么的呢?
是用来更新路由表的,因为 RIP 本身就是保证每一个路由器到每一个目的网络的路由都是最短的(即跳数最少)。因为每一个路由器的位置不同,所以他们的路由表也不同。
下面我们先来简单的描述一下该算法在 RIP 中的应用,然后举一个栗子理解它。
我们假设一个路由器收到相邻路由器(其地址为 X)的一个 RIP 报文:
- 1️⃣ 先修改此 RIP 报文中的所有项目:把“下一跳”字段中的地址都改为 X,并把所有的 “距离” 字段的值加 1。
- 2️⃣ 对修改后的 RIP 报文中的每一个项目,重复以下步骤:
- 若项目中的目的网络不在路由表中,则把该项目加到路由表中。
- 否则 💨
- 若下一跳字段给出的路由器地址是同样的,则把收到的项目替换原路由表中的项目。
- 否则 💨
- 若收到项目中的距离小于路由表中的距离,则进行更新
- 否则,什么也不做。 💨
- 3️⃣ 若 3 分钟还没有收到相邻路由器的更新路由表,则把此相邻路由器记为不可达路由器,即将距离置为 16(表示不可达)。
- 4️⃣ 返回。
可能大家只记住了什么也不做 💫,下面我们来看一个栗子 👇 。
总之就是要一直维持距离始终是最小的。
3、RIP2 协议的报文格式
要点:
- ✅ RIP2 报文由
首部
和路由部分
组成。 - ✅ RIP2 报文中的路由部分由若干个路由信息组成。
- ✅ 地址族标识符(又称为地址类别)字段用来标志所使用的地址协议。
- ✅ 路由标记填入自治系统的号码,这是考虑使 RIP 有可能收到本自治系统以外的路由选择信息。
- ✅ 再后面指出某个网络地址、该网络的子网掩码、下一跳路由器地址以及到此网络的距离。
一个 RIP 报文最多可包括 25 个路由,因而 RIP 报文的最大长度是 4+20×25=504字节。如超过,必须再用一个 RIP 报文来传送。
RIP2 具有简单的鉴别功能
- 若使用鉴别功能,则将原来写入第一个路由信息(20字节)的位置用作鉴别。
- 在鉴别数据之后才写入路由信息,但这时最多只能再放入 24 个路由信息。
对于 RIP 来说,好消息传播得快,而坏消息传播得慢。即网络出故障的传播时间往往需要较长的时间(例如数分钟)。这是 RIP 的一个主要缺点。
四、内部网关协议 OSPF 🌘
开放最短路径优先
OSPF (Open Shortest Path First) 是为克服 RIP 的缺点在1989
年开发出来的。
OSPF 的原理很简单,但实现起来却较复杂。
1、OSPF 协议的基本特点
- “开放”表明 OSPF 协议不是受某一家厂商控制,而是公开发表的。
- “最短路径优先” 是因为使用了 Dijkstra 提出的最短路径算法 SPF
OSPF 的区域 (area) :
- 为了使 OSPF 能够用于规模很大的网络,OSPF 将一个自治系统再划分为若干个更小的范围,叫作
区域
。 - 每一个区域都有一个 32 位的区域标识符(用点分十进制表示)。
- OSPF 使用层次结构的区域划分。在上层的区域叫作主干区域 (backbone area)。
- 主干区域的标识符规定为
0.0.0.0
。主干区域的作用是用来连通其他在下层的区域。
OSPF 直接用 IP 数据报传送:
- ✅ OSPF 不用 UDP 而是直接用 IP 数据报传送。
- ✅ OSPF 构成的数据报很短。好处是可以不必将长的数据报分片传送。
- ✅ 支持可变长度的子网划分和无分类编址 CIDR。
2、OSPF 分组
OSPF 的五种分组类型
- 1️⃣ 类型1:问候 (Hello) 分组。
- 2️⃣ 类型2:数据库描述 (Database Description) 分组。
- 3️⃣ 类型3:链路状态请求 (Link State Request) 分组。
- 4️⃣ 类型4:链路状态更新 (Link State Update) 分组,用洪泛法对全网更新链路状态。
- 5️⃣ 类型5:链路状态确认 (Link State Acknowledgment) 分组。
五、外部网关协议 BGP 🌚
最后我们来看一下 BGP 协议。
BGP 是不同自治系统的路由器之间交换路由信息的协议。
还记得 BGP 协议是用来干什么的吗? 他是用于在小团体和小团体之间进行通信的。
一个 BGP 发言人与其他自治系统中的 BGP 发言人要交换路由信息,就要先建立 TCP 连接,然后在此连接上交换 BGP 报文以建立 BGP 会话(session),利用 BGP 会话交换路由信息。
BGP-4 共使用四种报文
- 1️⃣ 打开 (OPEN) 报文:用来与相邻的另一个BGP发言人建立关系。
- 2️⃣ 更新 (UPDATE) 报文:用来发送某一路由的信息,以及列出要撤消的多条路由。
- 3️⃣ 保活 (KEEPALIVE) 报文:用来确认打开报文和周期性地证实邻站关系。
- 4️⃣ 通知 (NOTIFICATION) 报文:用来发送检测到的差错。