目的IP地址 | 下一跳IP地址 |
IP1 | IP4 |
IP2 | IP5 |
IP3 | IP6 |
... | ... |
问题来了:
1、下一跳地址是怎么来的?
2、下一跳地址是唯一的吗?
3、下一跳地址是最佳的吗?
4、路由器那么多,它们如何协同工作?
那么用什么样的算法去解决此问题呢?
- 每一个顶点表示一个网络、路由器或计算机
- 每一条边表示一条网络路劲
该算法必须满足以为下条件:
- 算法是正确的、完整的
- 算法在计算上应该尽量简单
- 算法可以适应网络中的变化
- 算法是稳定的和公平的
距离矢量(DV)算法
每一个节点使用两个向量Di和Si
Di描述的是当前节点到别的节点的距离
Si描述的是当前节点到别的节点的下一个节点
每一个节点遇相邻的节点交换向量Di和Si的信息
每一个节点根据交换的信息更新自己的节点信息
例如:
下面详细解释距离矢量算法的过程
以节点A为基准,记录A的距离矢量信息,即A到所有节点的距离。然后记录收到的距离矢量信息,A附近只有BCDF这4个节点,所以记录了B到每个节点的距离,C到每个节点的距离,D到每个节点的距离以及F到每个节点的距离
把A的距离矢量信息和收到的距离适量信息合并起来
我们会有疑问,A到B的距离适量信息是11,B到A的距离矢量信息是9,怎么回事呢?
这个A到B的距离是11,可能是A->C->B = 11 , B到A的距离是9,可能是B->C->D->A = 9 可能当时的旧网络结构只有某条路可以走,还没有优化,所以节点信息还没有更新。这个过程提现了距离矢量算法可以使每一个节点根据交换的信息更新自己的节点信息。
下面的图具体来描述距离矢量算法的过程
① A到B的距离原本是11,但是某一天网络通信的时候,可能优化了网络,发现路劲更加短了,变为6,于是更新A到B节点的距离。
② 计算A到C的距离:A->B->C 即A到B的距离加上B到C的距离,6+11=17,发现比这张表里面的12还要大,就不更新。
③ 计算A到D的距离:A->B->D 即A到B的距离加上B到D的距离,6+7=13,发现比这张表里面的10还要大,也不更新。
④ 计算A到E的距离:A->B->E 即A到B的距离加上B到D的距离,6+17=23,发现比这张表里面的21还要大,还是不更新。
⑤ 计算A到F的距离:A->B->F 即A到B的距离加上B到F的距离,6+11=17,发现和这招表里面原本的17一样,更新它。
下面几张图原理相同
RIP协议的过程
RIP协议是使用DV算法的一种路由协议
RIP协议把网络的跳数作为DV算法的距离
RIP协议每隔30s交换一次路由信息(包括Di和Si)
RIP协议认为跳数>15的卤藕则为不可达路由
1、路由器初始化路由信息(两个向量Di和Si)
2、对相邻路由器x发过来的信息,对信息的内容进行修改(下一跳地址设置为x,所有距离加1)
首先要清楚这些路由表的描述对象是那个路由器,
第一张蓝色路由表描述对象为N路由器,
第二张蓝色路由表描述对象为路由器X,
第三张蓝色路由表描述对象为插入后或更新信息后的路由器N,
第四张灰色路由表是指路由器N操作路由表的内容
i.检索本地路由,将信息中新的路由插入到路由表里面
ii.检索本地路由,对于下一跳为x的,更新为修改后的信息
iii.检索本地路由,对比相同目的的距离,如果新信息的距离更小,则更新本地路由表
3、如果3分钟没有收到相邻的路由信息,则把相邻路由设置为不可达(16跳)
RIP协议存在的问题
- 随便相信"隔壁老王"
- "自己不思考","视野不够"
一开始,路由器A、B、C都正常工作。
路由器B的路由表记录着,到达目的路由器A的距离为1
路由器C的路由表记录着,到达目的路由器A的距离为2
当路由器A宕机以后,B认为C通过2跳以后能达到路由器A,于是信以为真,而恰恰好与C相邻,那么到达目的路由器A的距离就是1+2 = 3,那么B就会更新路由表,更新为经过3跳以后可以到达A
C又以为B说的对,B可以通过3跳,就可以到达A,而恰好与B相邻,于是到达A的距离是1+3 = 4
这样下去,就会一直循环,直到16跳直接中断通信
RIP协议的特点
RIP协议:实现简单,开销很小
RIP协议: 限制了网络的规模
RIP协议:"坏消息传的慢",更新收敛时间过长