RIP、OSPF 协议详解
1、路由协议简介
在互联网中,一个自治系统 (AS) 是一个有权自主地决定在本系统中应采用何种路由协议的小型单位。这个网络单位可以是一个简单的网络也可以是一个由一或多个普通的网络管理员来控制的网络群体,它是一个单独的可管理的网络单元(例如一所大学,一个企业或者一个公司个体)。 一个自治系统将会分配一个全局的唯一的 16 位号码,有时我们把这个号码叫做自治系统(ASN)。
在进行三层通信时,除了静态配置路由信息,还可以通过动态获取路由条目,而这就需要使用路由协议来帮助我们了。
根据管理范围的不同,路由协议可以分为两个大类:
1、IGP: 内部网关协议(Interior Gateway Protocol)
内部网关协议(IGP)是一种专用于一个自治网络系统(比如:某个当地社区范围内的一个自治网络系统)中网关间交换数据流转通道信息的协议。网络 IP 协议或者其他的网络协议常常通过这些通道信息来决断怎样传送数据流。目前最常用的内部网关协议分别是:路由信息协议(RIP)和最短路径优先路由协议(OSPF)分级的链接状态路由协议(ISIS)。
2、EGP:外部网关协议(Exterior Gateway Protocol)
外部网关协议(EGP)是一种在自治系统的相邻两个网关主机间交换路由信息的协议。 EGP 通常用于在因特网主机间交换路由表信息。它是一个轮询协议,利用 Hello 和 I-Heard-You 消息的转换,能让每个网关控制和接收网络可达性信息的速率,允许每个系统控制它自己的开销,同时发出命令请求更新响应。路由表包含一组已知路由器及这些路由器的可达地址以及路径开销,从而可以选择最佳路由。每个路由器每间隔 120 秒或 480 秒会访问其邻居一次,邻居通过发送完整的路由表以示响应,代表协议是边界网关协议(BGPv4)。
如果按照算法分,也可以分成两个大类:
(1)距离矢量型路由协议,代表:RIP
(2)链路状态路由协议,代表:OSPF
在本节中,主要梳理 RIP 协议与 OSPF 协议。
2、RIP 协议
2.1 概述
RIP (Routing Information Protocol,路由信息协议)是一种内部网关协议(IGP),是一种动态路由选择协议,用于自治系统(AS)内的路由信息的传递。
RIP 被定义为距离矢量路由协议,而距离矢量路由协议的根本特征就是自己的路由表是完全从其它路由器学来的,并且将收到的路由条目一丝不变地放进自己的路 由表,以供数据转发。正因为如此,对于路由是否正确,对于目标是否可达,RIP 全然不知。
“距离” 的定义: 从一路由器到直接连接的网络的距离定义为 1。 从一个路由器到非直接连接的网络的距离定义为所经过的路由器数加 1。
RIP 使用跳数作为 metric,跳数就是到达目标网络所需要经过的路由器个数,因为直连网络不需要经过任何路由器,所以直连网络的 metric 为 0。RIP 所支持网络的最大跳数为 15,也就是 metric 值最大为 15,一旦大于 15,如 16,被 RIP 认为目标不可达,由此可见,RIP 并不适合大型网络。
RIP 协议的管理距离为**120。**当路由表中出现了多条目标网段、子网掩码相同的路由信息时,优先选择管理距离小的协议所生成的路由信息。
RIP 协议一共有两个版本:
- Version 1 有类路由协议,广播更新。(由于不支持 VLSM,RIPV1 已经被淘汰,以 RIPv2 为主)
- Version 2 无类路由协议,支持 VLSM
RIPv1 和 RIPv2 的区别: 1.RIPv1 是有类路由协议,RIPv2 是无类路由协议 2.RIPv1 不能支持 VLSM,RIPv2 可以支持 VLSM 3.RIPv1 没有认证的功能,RIPv2 可以支持认证,并且有明文和 MD5 两种认证 4.RIPv1 没有手工汇总的功能,RIPv2 可以在关闭自动汇总的前提下,进行手工汇总 5.RIPv1 是广播更新(255.255.255.255 ),RIPv2 是组播更新(224.0.0.9), 6.RIPv1 对路由没有标记的功能,RIPv2 可以对路由打标记(tag),用于过滤和做策略 7.RIPv1 发送的 updata 最多可以携带 25 条路由条目,RIPv2 在有认证的情况下最多只能携带 24 条路由 8.RIPv1 发送的 updata 包里面没有 next-hop 属性,RIPv2 有 next-hop 属性,可以用与路由更新的重定
RIP 是应用层协议, 使用 UDP 数据报传送,端口号 520 将路由条目从开启了 RIP 进程的接口上发出,ver1 使用广播地址 255.255.255.255 发出,而 ver 2 使用组播地址 224.0.0.9 发出。
无论是 ver 1 还是 ver 2,都会将路由表每30 秒定期向网络中发送,RIP 没有邻居的概念,所以自己并不知道发出去的路由更新是不是有路由器收到,而收到的路由更新,RIP 并不会绝对接受,只有当路由的发送 IP 地址和自己接收的接口 IP 地址处于同网段时,才会接收,否则忽略。如果路由表中的路由超过180 秒都没有再次收到更新,则被标记为不可用,如果连续240 秒没收到更新,最后将相应路由从路由表中删除。
RIP 协议的三个要素:
(1)仅和相邻路由器交换信息。
(2)交换的信息是当前本路由器所知道的全部信息,即自己的路由表。RIP 交换的是本路由器上完整的路由表。
(3)按固定的时间间隔交换路由信息,例如,每隔 30 秒。
2.2 RIP 协议工作原理及流程
2.1.1 RIP 协议工作流程图
RIP 协议在整个工作流程中主要使用四个定时器:
-
更新定时器(Update timer):
当此定时器超时时,立即发送更新报文。(30s)
-
老化定时器(Age timer):
RIP 设备如果在老化时间内没有收到邻居发来的路由更新报文,则认为该路由不可达。(180s)
-
垃圾收集定时器(Garbage-collect timer):
如果在垃圾收集时间内不可达路由没有收到来自同一邻居的更新,则该路由将被从 RIP 路由表中彻底删除。(240s)
- 抑制定时器(Suppress timer):
默认时长为 180s,当 RIP 设备收到对端的路由更新,其 cost 为 16,对应路由进入抑制状态,并启动抑制定时器。为了防止路由震荡,在抑制定时器超时之前,即使再收到对端路由 cost 小于 16 的更新,也不接受。当抑制定时器超时后,就重新允许接受对端发送的路由更新报文。
2.1.2 路由表的建立
路由器在刚刚开始工作时,只知道到直接连接的网络的距离 (此距离定义为 1)。路由表中也只有到直连网络的直连路由。 以后,每一个路由器也只和数目非常有限的相邻路由器交换并更新路由信息。 经过若干次更新后,所有的路由器最终都会知道到达本自治系统中任何一个网络的最短距离和下一跳路由器的地址。
路由表建立流程:
路由器在收到相邻路由器发来的路由表信息后,会执行距离矢量算法,算法过程描述如下:
(1)收到相邻路由器 (其地址为 X) 的一个 RIP 报文: RIP 报文内容:[路由器 IP(X),可达网络 (Y 网络),距离(Z)]
(2)根据收到的 RIP 报文内容创建一个新的路由信息: “下一跳” 字段中的地址为 X;“距离” 字段的值加 1,变为 Z+1。 每个项目中的三个关键数据:到目的网络 Y,距离为 Z+1,下一跳路由器是 X。
(3)对获得的新路由信息,进行以下步骤:
- 若原来的路由表中没有到目的网络 Y 的路由条目,则把该路由信息加到路由表中。
- 若原来的路由表中已经有到网络 Y 的路由条目,则比较新老路由条目信息: 若老路由条目中到 Y 网络的下一跳路由器地址也是 X,则直接用新的路由条目替换原路由表中的路由条目。 若新路由信息中的距离字段值小于路由表中的距离字段值,则进行更新,
- 否则,什么也不做。
(4) 若 3 分钟还没有收到相邻路由器的更新路由表,则把此相邻路由器记为不可达路由器,即将距离置为 16。
以下图为例,详细解释路由表形成:
1、刚开始,启动设备路由器 A、B、C,路由表中只有路由器直连的直连路由。
2、A、B、C 之间互相进行第一次路由表交换:
B 路由表交换给 A 后:
B 的路由表中目标网络为 2.0.0.0 的路由条目,与 A 路由表中原有条目相同,直接替换(因为相同,所以保持不变)
B 的路由表中目标网络位 3.0.0.0 的路由条目,A 路由表中不存在,因此,将 3.0.0.0 作为目的网络,路由器 B 的 RIP 报文发出端口的 IP(2.0.0.2)作为下一跳地址,原来 B 路由表中到达 3.0.0.0 网络的距离为 0,因此在 A 的路由表中,要对这个距离加 1,因此在 A 的路由表中,Metric 值为 1.
A 路由表交换给 B:
B 路由表交换给 C:
C 路由表交换给 B:
至此,第一次路由交换全部完成。此时只有 B 的路由表是完整的,A 和 C 的路由表并不完整,还需要第二次交换。
3、第二次交换
经过与第一次交换类似的流程后,三个路由器都形成了完整的路由表。
2.3 RIP 报文格式
2.3.1 RIPv1 报文格式
2.3.2 RIPv2 报文格式
- 命令域:指出 RIP 报文是一个请求报文还是对请求的应答报文
request 报文: RIP 的 request 消息在特殊情况下发送,当路由器需要时它可以提供即时的路由信息。 它可以请求全部的路由条目也可以请求具体的某些路由条目。最常见的例子是当路由器第一次加入网络时,通常会发送 request 消息,以要求获取相邻路由器的最新路由信息。 AFI 为 0 表示请求所有的路由条目且 metric 值为 16
response 报文: 当 RIP 接收到 request 消息,将处理并发送一个 response 消息。消息包含自己的整个路由表,或请求要求的条目,正常情况下路由器通常不会发送对路由信息有特殊要求的请求消息。RIP 会每 30 秒发送一个 response 消息,用于路由表更新
- 版本域:一般为 1,新版本为 2。
- 地址族标识符(又称为地址类别)字段用来标志所使用的地址协议。AFI 为 0 且 metric 值为 16 表示请求所有的路由条目。
- 路由标记:填入自治系统的号码,这是考虑使 RIP 有可能收到本自治系统以外的路由选择信息。再后面指出某个网络地址、该网络的子网掩码、下一跳路由器地址以及到此网络的距离。
2.3.3 RIPv2 认证功能
由于 RIP 没有邻居的概念,所以自己并不知道发出去的路由更新是不是有路由器收到,同样也不知道会被什么