共计 3259 个字符,预计需要花费 9 分钟才能阅读完成。
文章内容概览
外部网关路由协定之 RIP 协定
间隔矢量(DV)算法
在介绍 RIP 协定之前,先理解一下 DV 算法,因为该协定是通过 DV 算法进行实现的
该算法是运行在图中的
- 每一个节点应用两个向量 Di 和 Si
- Di 形容的是以后节点到别的节点的 间隔
- Si 形容的是以后节点到别的节点的 下一个节点
对于该算法,它是如何运行的?
- 每一个节点和相邻的节点替换向量 Di 和 Si 的信息
- 每一个节点依据替换的信息,更新本人的节点信息
- Di1 示意从节点 i 到节点 1 的间隔
- Si1 示意从节点 i 到节点 1 的下一个节点
- n示意节点的数量
对于 DV 算法,他其实就是计算 D 的间隔的最小值。比方 Dij 的最小值就等于:min(Dix+Dxj)。通过一个例子来了解这个 DV 算法
图中有 A、B、C、D、E、F 这六个顶点和若干条边,对于这六个节点,就有左边这样的 Di 和 Si 的间隔矢量信息。对于 Di,它有六个元素,别离是 Dia、Dib… 到 Dif,他示意的是,i 这个节点到 A、B、C、D、E、F 这六个节点的间隔。对于 Si,它也有六个元素,别离是 Sia、Sib… 到 Sif,他示意的是,i 这个节点到 A、B、C、D、E、F 这六个节点的下一个节点是什么
下边会以 A 这个节点为例来展现 DV 算法是如何运行的,也就是求 Da 和 Sa 这两个向量。假如 A 的间隔矢量信息(Da)如下
它示意的是 A 到其它的每个节点的间隔别离为右侧列的值。在上边介绍 DV 算法时有提到,该算法会与 相邻 的节点替换 Da 和 Sa 的信息。假如 A 收到了来自 B、C、D、F 这四个相邻节点的信息,并且在接管到间隔矢量信息的时候,晓得了 A 到各个相邻节点的直线间隔是多少
为了更加不便的理解 DV 的过程,将 A 的间隔矢量信息和 A 到其它四个相邻节点的矢量信息合在一起
图中的每一列示意的是某一个节点达到 A、B、C、D、E、F 节点的间隔是什么
可能大家对表中的数据有疑难,为什么 A 到 B 的间隔是 11,而 B 到 A 的间隔却是 9。这个是因为里边的间隔矢量信息并不是最新的。比如说,A 到 B 的间隔可能是通过 A ->C->B 所失去的,因而这里 A 到 B 的间隔可能是 11。而 B 到 A 的间隔可能是通过 B ->C->D->A 所失去的,所以这里 A 到 B 的间隔矢量信息能够和 B 到 A 的间隔矢量信息不一样
列出 A 的 S 向量,默认初始化为 空,S 向量示意的是 A 到其它几个节点的下一个节点是什么
假如此时 A 在和 B 这个节点替换信息,A 就失去了 B 这个节点的信息,也就是失去了 B 到每一个节点的间隔
A 失去这些信息之后,首先会进行运算。因为 A 和 B 是间接进行通信的,所以 A 晓得 A 到 B 的间隔是什么。而后会通过从 B 那里失去的 B 到其它节点的间隔,来计算 A 到其它节点的间隔
A->B = 6
A->B->C = 6+11 = 17
A->B->D = 6+7 = 13
A->B->E = 6+17 = 23
A->B->F = 6+11 = 17
以上就是 A 失去 B 的数据之后进行的运算,而后他会把失去的这些数据和本人的间隔矢量进行比拟, 如果比本人到其它节点的间隔更小,那么它就会把它填充到本人的间隔矢量中。所以拿到 B 的数据,通过计算之后,发现 A 到 B 的间隔 6,比本人原来的 11 小,所以把本人原来的 11,替换成 6;而后发现自己原来 A 到 F 的间隔为 17,和计算之后 A 到 F 的间隔 17 相等,那么 A 也会进行替换。替换为完之后, A 就会把相应的下一个节点设为 B 。以上就是 A 获取到 B 的信息之后的整个过程,如下图
接下来 A 又接管到了节点 C 的信息,这其中就包含 C 到 A、B、C、D、E、F 的间隔。A 接管到 C 的信息之后,也会进行和之前一样的运算
A->B->C = 9+9 = 18
A->C = 9
A->C->D = 9+8 =17
A->C->E = 9+11 = 20
A->C->F = 9+10 = 19
通过计算之后,也会和本人现有的间隔矢量进行比拟。比方 A ->C 的间隔为 9,要比 A 之前到 C 的间隔 12 小,所以就会用 9 把原来的 12 替换掉,并且对应的 S 会填充为 C,后边的同理,如图:
A 和 D、F 替换信息的过程也是和上边截然不同的。当 A 和每一个相邻的节点替换完信息之后,失去如下的后果
以上就是 DV 算法的整个过程,回看前边介绍的 DV 算法,再来了解它的定义会好明确很多
- 每一个节点应用两个向量 Di 和 Si
- Di 形容的是以后节点到别的节点的 间隔
- Si 形容的是以后节点到别的节点的 下一个节点
- 每一个节点和相邻的节点替换向量 Di 和 Si 的信息
- 每一个节点依据替换的信息,更新本人的节点信息
RIP 协定的过程
- RIP(Routing Information ProtoCol)协定
- RIP 协定是应用 DV 算法的一种路由协定
- RIP 协定把网络的跳数 (hop) 作为 DV 算法的间隔(其实就是跳数越多,间隔就越长)
- RIP 协定 每隔 30s替换一次路由信息(这里的路由信息就蕴含 Di 和 Si)
- RIP 协定认为 跳数 >15的路由则为不可达路由
应用 RIP 协定的路由器
- 路由器会初始化路由信息(两个向量 Di 和 Si)
- 依据 相邻路由器 X 发过来的信息,对信息的内容进行批改(下一跳地址设为 X,所有间隔加 1。意思就是,通过 X,它能够达到 X 所发过来信息的每一个节点,只须要将间隔加 1 就能够了)
- 批改了之后,首先检索本地路由,将信息中新的路由插入到路由表里边(因为有些目的地,本地路由表里边可能是没有的)
- 检索本地路由,对于下一跳为 X 的,更新为批改后的信息
- 检索本地路由,比照雷同目的地的间隔,如果新信息的间隔更小,则更新本地路由表
- 如果 3 分钟没有收到相邻的路由信息,则把相邻的路由设置为不可达(也就是设置为 16 跳)
通过例子来了解上边的形容。假如路由中初始化的信息如下最右边局部:
第一步:检索本地路由,将信息中新的路由插入到路由表里边
初始化路由表中的信息,示意路由到 D 的间隔为 2,并且其下一跳地址为 A。假如此时收到来自路由器 X 发来的信息。信息有达到 A 的间隔 4,下一跳地址为 C。达到 B 的间隔为 2,下一跳地址为 C。收到这些信息之后,路由器会对本身信息进行批改,将所有的间隔都加一,并且将下一跳地址都设为 X。接下来就会检索本地的路由,发现 A、B 都是原来路由里边没有的,所以会把 A、B 的信息插入到路由表中。就失去了更新之后的路由表
第二步:检索本地路由,对于下一跳为 X 的,更新为批改后的信息
假如初始化的路由信息如下最右边局部:
当初始路由器,收到两头的路由信息,该路由信息首先会进行批改,批改之后,就会依据接管到的路由信息对本身进行批改,因为这是最新的信息,所以会把原来的笼罩掉
第三步:检索本地路由,比照雷同目的地的间隔,如果新信息的间隔更小,则更新本地路由表
这一步其实就是前边介绍的 DV 算法过程,当初始路由收到另一个路由信息之后,另一个路由的信息先进行更新,而后和初始路由进行比照,如果新信息的间隔更小,则更新本地路由表
以上便是 RIP 协定的残缺过程
RIP 协定的毛病
通过一个例子来理解一下 RIP 协定的毛病。假如有 A、B、C 三个节点,并且他们是线性连贯的。B、C 达到 A 的间隔别离是 1 和 2,B 是间接达到 A,C 是通过 B 达到 A
假如在某一个时刻,路由器 A 宕掉了,即 A 不可达。此时,B 发现 A 不可达之后,就会询问 C,询问 C 之后发现,通过 C 能够达到 A,因而把下一跳设置为 C,并且间隔加一(也就是 3)。C 在某一个时刻也发现 A 不可达了,那么 C 也会询问 B,发现 B 通过 3 跳之后能够达到 A,所以它也会更新本人的路由信息,将达到 A 的间隔设为 4,并且下一跳设置为 B,此时就会死循环上来,始终到间隔为 16(上边有介绍到,最多 16 跳,会认为指标不可达),才发现是不可达的
所以 RIP 协定最致命的毛病是:故障信息传递慢
RIP 为什么会有这个特点?
- 轻易置信“隔壁老王”(不论是 B 还是 C,如果说 B 失去了 C 的路由信息,它将会无条件的置信 C。同样,如果是 C,他也会无条件置信 B,因而就会导致循环,直到跳数为 16,才发现不可达)
- “本人不思考”、“视线不够”(对于 RIP 协定,每一个路由器只看到相邻路由的信息,看不到更远的信息)
因为网络中经常出现故障,如果每一次故障,都须要这么多跳能力发现的话,会导致整个网络十分不可控,这就是 RIP 协定致命的毛病
在疾速变动的技术中寻找不变,才是一个技术人的外围竞争力。知行合一,实践联合实际