互联网的路由选择协议
当IP数据报在互联网上传输时,我们希望经过的时延最短,这就需要具体的算法,而且在互联网上,为了便于管理,我们一般将网络划分成层次结构,这样的话,就出现了内部网关和外部网关的说话,相应的协议也不一样。
1、内部网关协议(IGP):
内部网关协议主要有两种:(1)RIP协议(2)OSPF协议
(1)RIP协议:
这里我们先讨论内部网关协议RIP
RIP距离向量算法:
对每一个相邻路由器发过来的RIP报文进行如下操作:
(1)把 “下一跳”字段中的地址都改为X,并把所有的“距离”字段的值加1,每一个项目都 有三个关键数据,即:到目 的网络N,距离是d,下一跳路由器是X;. (便于进行本路由表的更新,假设从位于地址X发来的相邻路由器发来的RIP报文某一个项目是"NET2 ,3, Y",意思是:我经过路由器Y到NET2的距离是3,那么本路由器可推断出,我通过X路由器到达NET2的距离应该是3+1=4)
(2)对修改后的RIP报文中的每一个项目,进行下述步骤:
若原来的路由表中没有目的网络N,则把该项目添加到路由表中,否则查看下一跳路由器地址; (表明这是新的网络,应该加入路由表) 若下一跳路由器地址是X,则把收到的项目替换原路由表中的项目; (为什么要替换?,要以最新的地址为准,到目的网络的距离可能增大也可能减小,所以应该以最新的更新) 否则若收到的项目中的距离d小于路 由表中的距离,则进行更新,否则,什么也不做。 (例如若路由表已有项目"NET2 ,5,P",就要更新为:"NET2,4,X",因为距离从5变到4更短了,)
(3)若三分钟没有收到相邻的路由器的更新路由表,则把相邻路由器记为不可达路由器,即把距离置为16(距离为16
表示不可达)。
(4)返回。 流程如下如:
虽然所有的路由器最终都拥有了整个自治系统的全局路由信息,但由于每一个路由器的位置不同,它们的路由表当然也应当是不同的。
- RIP协议存在的一个问题是:当网络出现故障时,要经过比较长的时间才能将此信息传送到所有的路由器。以图2为例,设三个路由器都已经建立了各自的路由表,现在路由器R1和网1的连接线路短开。路由器R1发现后,将到网1的距离改为16,并将此信息发给路由器R2。由于路由器R3发给R2的信息是:“到网1经过R2距离为2”,于是R2将此项目更新为“到网1经过R3距离为3”,发给R3。R3再发给R2信息:“到网1经过肉距离为4”。这样一直到距离增大到16时,R2和R3才知道网1是不可达的。RIP协议的这一特点叫做:好消息传播得快,而坏消息传播得慢。像这种网络出故障的传播时间往往需要较长的时间,这是RIP的一个主要缺点。
首先来看RIP协议报文格式:
(2)OSPF协议:
OSPF的包类型:
(1)类型一:问候(hello)分组,用来发现和维护临站的可达性。
(2)类型二:数据库描述分组,向临站给出自己的链路状态数据库中的所有链路状态项目的摘要信息。
(3)类型三:链路状态请求分组,向对方请求发送某些链路状态项目的详细信息
(4)类型四:链路状态更新分组,用洪泛法对全网更新链路状态。
(5)类型五:链路状态确认分组,对链路状态更新分组的确认。
OSPF协议的工作过程:
1)每台路由器学习激活的直接相连的网络。
2)每台路由器和直接相连的路由器互交,发送Hello报文,建立邻居关系。
3)每台路由器构建包含直接相连的链路状态的LSA(Link-State Advertisement,链路状态通告)。链路状态通告(LSA)中记录了所有相关的路由器,包括邻路由器的标识、链路类型、带宽等。
4)每台路由器泛洪链路状态通告(LSA)给所有的邻路由器,并且自己也在本地储存邻路由发过来的LSA,然后再将收到的LSA泛洪给自己的所有邻居,直到在同一区域中的所有路由器收到了所有的LSA。每台路由器在本地数据库中保存所有收到的LSA副本,这个数据库被称作"链路状态数据库(LSDB,Link-State Database)"
5)每台路由器基于本地的"链路状态数据库(LSDB)"执行"最短路径优先(SPF)"算法,并以本路由器为根,生成一个SPF树,基于这个SPF树计算去往每个网络的最短路径,也就得到了最终的路由表。
2、边界网关协议BGP
边界网关协议BGP是一种外部网关协议,主要用来解决当分组再几个AS外部传输时的问题。
边界网关协议BGP只能是力求寻找一条能够达到目的网络且比较好的路由,而并非寻找一条最佳路由。BGP采用了路径向量选择协议。
在配置BGP时,我们往往选择一个AS的边界路由器作为BGP的区域发言人,然后在这些BGP区域发言人中使用路径向量选择协议。选出一条可达的路由,但是不一定最优。