路由选择协议
自治系统(Autonomous Systems , AS)
单一技术管理下的一组路由器,这些路由器使用一种AS内部的路由选择协议和共同的度量来确定分组在AS内的路由,同时还使用一种AS之间的路由选择协议来确定分组在AS之间的路由。
内部网关协议(Interior Gateway Protocol , IGP)
在一个自治系统内部使用的路由选择协议
路由信息协议(Routing Information Protocol, RIP)
RIP是一个基于距离向量的路由选择协议,最大的优点是简单,工作在应用层,使用UDP协议
规定:
-
网络中的每个路由器都要维护从它自身到其他每个目的的网络的距离记录
-
距离也成为跳数,我们规定从一个路由器到直接连接的网络的距离是1,而每经过一个路由器,距离就增加1
-
RIP认为好的路由就是它通过的路由器的数目最少,也就是优先选择跳数少的路径
-
RIP在一条路径内能放的路由器最多15个,当距离等于16时,就表示这个网络不可抵达
-
RIP默认在任意两个使用RIP协议的路由器之间每30秒就得广播一次RIP路由更新信息
-
路由表的每个表项中有三个关键数据<目的网络,距离,下一跳路由地址>
特点:
-
仅和相邻的路由器交换信息
-
路由器交换的信息是当前路由器自己的路由表
-
按照固定的时间间隔交换路由信息,默认为每30秒交换一次
RIP收敛后,路由表内的路由一定是跳数最少的,但不一定是耗时最短的
距离向量算法:对于每个相邻路由器发来的报文,都执行以下操作
-
对地址为X的相邻路由器发来的报文,我们先把报文内的"下一跳路由地址"的所有项都改成X(也就是对于本路由器来说,下一跳的路由地址都是X)同时把所有路径的数值都加1(中间增加了X路由器,也就增加了一跳,数值上就要增加1)
-
当本路由器的原来的路由表里头没有目的网络地址为N的表项的话,我们直接在本路由器的路由表内增加这个表项
-
当本路由器的原来的路由表里头有目的网络地址为N的表项,并且下一跳的路由器的地址是X的话,我们就直接用新的表项覆盖原来的表项
-
当本路由器的原来的路由表里头有目的网络地址为N的表项,并且下一跳的路由器的地址不是X的话,我们对距离进行一个对比,保留距离较小的那一个表项
注意:
当180秒(RIP默认超时时间是180秒)都还没有收到相邻路由器的更新的路由表的时候,我们会认为相邻路由器出现了故障或者是相邻路由器没了,这个时候就把相应的路由器的地址设为16(16意味着不可达)。
RIP最大的优点就是实现起来很简单,开销很小,收敛过程很快(但是当链路出现了问题的话,会有一个慢收敛的现象)
"坏消息传得慢"
RIP选择的路径不一定是最快的,但一定是路由器最少的
开放最短路径(OSPF)
OSPF是使用分布式链路状态路由算法的典型代表,工作在网络层,使用IP协议(IP数据报首部字段为89)
使用OSPF协议的路由器向自治系统中的所有路由器发送信息,而使用RIP协议的路由器只向与自己相邻的几个路由器发送信息。而OSPF发送的信息内容是与本路由器相邻的所有路由器的链路状态,这只是路由器所知道的部分信息。(RIP发送的是整个路由表,也就是路由器所知道的全部信息)。"链路状态"是指本路由器和哪些路由器相邻以及两个路由器之间的链路的"度量"(代价)。
OSPF只有当链路状态发生改变的时候才会让路由器使用洪范法向所有路由器发送信息,并且更新过程收敛地很快(不会出现RIP的慢收敛的情况)
有多路径负载均衡的功能,也就是说,如果有多条目的地相同的最佳路径的话,这几条路径可以一起拿来传输数据
OSPF支持CIDR
OSPF基本工作原理:
由于各个路由器之间频繁地交换链路状态信息,因此所有的路由器最终都能建立一个链路状态数据库(实际上就是全网的拓扑结构图)。这个数据库在全网范围内是一致的。然后每个路由器根据这个拓扑结构图,使用Dijkstra最短路径算法计算从自己到各个目的网路的最佳路径,从而构造自己的路由表。后期只有链路状态发生变化之后,才会重新计算各个目的网络到自己的最佳路径,然后更新路由表。
OSPF可以将一个规模很大的自治系统划分为若干个更小的范围,我们把这些范围称为区域。如此一来,每个路由器在使用洪范法交换链路状态信息的时候,数据报只会在区域内广播,而不会传输到区域外。也就是每个区域内的路由器只知道自己所在区域的网络的拓扑结构,而不知道其他区域的网络拓扑结构。正因如此,OSPF才适合规模较大的自治系统。而区域也有层次之分,处在上层的区域负责连通其他的下层区域,同时还连接其他的自治域,我们把这个上层区域称为主干区域
OSPF的五种分组类型:
-
问候分组,用来发现和维持邻站的可达性(表示自己和对方还活着,并且可以互相联系到)
-
数据库描述分组,用来向邻站给出自己的链路状态数据库中的所有链路状态项目的摘要信息(给的不是整个路由表,而是路由表的摘要信息)
-
链路状态请求分组,向对方请求发送某些链路状态项目的详细信息(在收到发来的摘要信息后,和自己的路由表对照一下,发现有什么自己没有的,就发送这个报文来请求人家把详细的发过来)
-
链路状态更新分组,用洪范法对全网更新链路状态(这个就是详细的路由资料)
-
链路状态确认分组,对链路更新分组的确认(自己更新完之后,向对方发送这个数据报表示自己以及更新好了)
通常来说,每隔10秒,每两个相邻的路由器就要交换一次问候分组,从而知道哪些站点是可达的。
在路由器刚开始工作的时候,OSPF让每个路由器使用数据库描述分组和相邻路由器交换本数据库中已有的链路状态摘要信息。然后路由器使用链路状态请求分组向对方请求发送自己所缺少的某些链路状态项目的详细信息,经过一系列的这种分组交换,就建立了全网同步的链路数据库。
在网络运行的过程中,只要有一个路由器的链路状态发生变化,这个路由器就要使用链路状态更新分组,向全网更新链路状态。其他路由器在更新之后,发送链路状态确认分组对更新分组进行确认。
为了确保链路状态数据库与全网的状态保持一致,OSPF规定每隔一段时间后就刷新一次数据库中的路由状态。由于一个路由器的链路状态只涉及与相邻路由器的联通状态,所以和整个互联网的规模没啥关系。因此,当互联网规模很大时,OSPF要比RIP要好很多,并且OSPF没有"坏消息传得慢"的现象
外部网关协议(External Gateway Protocol, EGP)
在不同的自治系统之间使用的路由选择协议
边界网关协议(Border Gateway Protocol , BGP)
BGP是一种外部网关协议。边界网关协议常用于互联网的网关之间,工作在应用层,使用TCP协议。
BGP环境较为复杂,理由如下:
-
因特网的规模太大,使得自治系统之间的路由选择非常困难
-
对于自治系统之间的路由选择,要寻找最佳路由是不现实的
-
自治系统之间的路由选择必须考虑有关策略
BGP只能力求寻找一个能够到达目的网络并且比较好的路由(不兜圈子),而不是一个最好的路由。BGP采用的是路径向量路由选择协议,它同距离向量协议(RIP)和链路状态协议(OSPF)有很大的差别。
工作原理:
每个自治系统的管理员要选择至少一个路由器作为该自治系统的"BGP发言人"。一个BGP发言人与其他自治系统中的BGP发言人要交换路由信息,就要先建立TCP连接,然后在此连接上交换BGP报文以建立BGP会话,再利用BGP会话交换路由信息。当所有BGP发言人都相互交换网络可达性的信息后,各个BGP发言人就可以找出到达各个自治系统的比较好的路由。
注意,每个BGP发言人除了必须运行BGP以外,还必须运行该AS所用的内部网关协议,例如OSPF和RIP。BGP所交换的网络可达性信息就是要到达某个网络所要经过的一系列AS(网络我们用网络前缀表示)。
BGP交换路由信息的结点数量级是自治系统的数量级,要比自治系统中的网络数少很多
每个自治系统中BGP发言人(又称边界路由器)数目是很少的,这样就使得自治系统之间的路由选择不至于过分复杂
BGP支持CIDR,因此BGP的路由表也就应当包括目的网络前缀(网络地址)、下一跳路由器以及到达该目的网络所要经过的各个自治系统序列
在BGP刚运行的时候,BGP的邻站交换整个BGP路由表,但以后只需要在发生变化时更新有变化的部分。这样有利于节省网络带宽和减少路由器的处理开销。
BGP-4一共4种报文:
-
打开报文(Open):用来与相邻的另一个BGP发言人建立关系
-
更新报文(Update):用来发送某一路由的信息,以及列出要撤销的多条路由
-
保活报文(Keepalive):用来确认打开报文并周期性地证实邻站关系
-
通知报文(Notification):用来发送检测到的差错(报错用)
三个协议对比(RIP,OSPF,BGP)
协议 | RIP | OSPF | BGP |
---|---|---|---|
类型 | 自治系统内部 | 自治系统内部 | 自治系统之间 |
路由算法 | 距离-向量 | 链路状态 | 路径-向量 |
传递协议 | UDP | IP | TCP |
路径选择 | 跳数最少 | 代价最低 | 较好-非最佳 |
交换节点 | 和本节点相邻的路由器 | 网络中(区域)的所有路由器 | 和本节点相邻的路由器 |
交换内容 | 当前本路由器知道的全部信息,也就是自己的路由表 | 与本路由器相邻的所有路由器的链路状态 | 如果是第一次交换,就交换整个路由表,如果不是第一次,就只用交换有变化的部分就好了 |