动态路由协议
动态路由协议通过路由信息的交换生成并维护转发引擎所需的路由表。
当网络拓扑结构改变时动态路由协议可以自动更新路由表,并负责决定数据传输最佳路径。
在动态路由中,管理员不再需要与静态路由一样,手工对路由器上的路由表进行维护,而是在每台路由器上运行一个路由协议。这个路由协议会根据路由器上的接口的配置(如IP地址的配置)及所连接的链路的状态,生成路由表中的路由表项。
动态路由协议的作用:
1)维护路由信息。
(2)建立路由表。
(3)决定最佳路由。
动态路由协议的分类:
所有的动态路由协议在TCP/IP协议栈中都属于应用层的协议。但是不同的路由协议使用的底层协议不同。
1、OSPF将协议报文直接封装在IP报文中,协议号89
由于IP协议本身是不可靠传输协议,所以OSPF传输的可靠性需要协议本身来保证。
2、BGP使用TCP作为传输协议,提高了协议的可靠性,TCP的端口号是179。
3、RIP使用UDP作为传输协议,端口号520。
4、IS-IS协议是开放系统互联(OSI)协议中的网络层协议,
IS-IS协议基础是CLNP(Connectionless Network Protocol,无连接网络协 议)。
自治系统
一个自治系统就是处于一个管理机构控制之下的路由器和网络群组。它可以是一个路由器直接连接到一个LAN上,同时也连到Internet上;它可以是一个由企业骨干网互连的多个局域网。在一个自治系统中的所有路由器必须相互连接,运行相同的路由协议,同时分配同一个自治系统编号
RIP
概念:
RIP(Routing Information Protocol,路由信息协议)是一种内部网关协议(IGP),是一种动态路由选择协议,用于自治系统(AS)内的路由信息的传递。
RIP协议常用的端口号是520。
RIP协议基于距离矢量算法(DistanceVectorAlgorithms),使用“跳数”(即metric)来衡量到达目标地址的路由距离。这种协议的路由器只关心自己周围的世界,只与自己相邻的路由器交换信息,范围限制在15跳(15度)之内(在默认情况下,距离就是通往目的站点所需经过的链路数,取值为0~16,数值16表示路径无限长)
路由表结构:
每个路由表项包括以下各域:
目的IP地址域
距离-向量度量域
下一跳IP地址域
路由变化标志域
路由计时器域
-
目的IP地址域
任何路由表中所包含的最重要信息是到所知目的地的I P地址。一旦一台RIP路由器收到一个数据报文,就会查找路由表中的目的I P地址以决定从哪里转发那个报文。 -
度量标准域
路由表中的度量域指出报文从起始点到特定目的地的总耗费。路由表中的度量是从路由器到特定目的地之间网络链路的耗费总和。 -
下一跳IP地址域
下一跳IP地址域包括至目的地的网络路径上下一个路由器接口的IP地址。如果目的IP地址所在的网络与路由器不直接相连时,路由器表中才出现此项。 -
路由变化标志域
路由变化标志域用于指出至目的I P地址的路由是否在最近发生了变化。这个域是重要的,因为R I P为每一个目的I P地址只记录一条路由。 -
路由计时器域
有两个计时器与每条路由相联系,一个是超时计时器,一个是路由刷新计时器。这些计时器一同工作来维护路由表中存储的每条路由的有效性
RIP的工作过程:
1、初始化
在启动一个路由守护程序时,它先判断启动了哪些接口,并在每个接口上发送一个请求报文,要求其他路由器发送完整路由表。在点对点链路中,该请求是发送给其他终点的。如果网络支持广播的话,这种请求是以广播形式发送的。目的UDP端口号是520(这是其他路由器的路由守护程序端口号)
2、接收到请求
如果这个请求是刚才提到的特殊请求,那么路由器就将完整的路由表发送给请求者。否则,就处理请求中的每一个表项:如果有连接到指名地址的路由,则将度量设置成我们的值,否则将度量值设为16(度量为16是一种称为“无穷大”的特殊值,它意味着没有到达目的的路由)。然后发出响应。
3、接收到响应
使响应生效,可能会更新路由表。可能会增加新表项,对已有表项进行修改,或者将已有表项删除。
4、定期选路更新
每过30秒,所有或部分路由器会将其完整路由表发送给相邻路由器。发送路由表可以是广播形式的(如在以太网上),或是发送给点对点链路的其他终点。
5、触发更新
每当一条路由的度量发生变化时,就对它进行更新。不需要发送完整的路由表,而只需要发送那些变化的表项。
每条路由都有与之相关的定时器。如果运行 R I P的系统发现一条路由在 3分钟内未更新,就将该路由的度量设置成无穷大( 1 6),并标注为删除。这意味着已经在 6个3 0秒更新时间里没收到通告该路由的路由器的更新了。再过 6 0秒,将从本地路由表中删除该路由,以保证该路由的失效已被传播开。
RIP的缺点:
1、无法区分非零部分是子网部分还是主机地址
RIP没有子网地址的概念。例如,如果标准的B类地址中16 bit的主机号不为0,那么R I P无法区分非零部分是一个子网号,或者是一个主机地址。有一些实现中通过接收到的R I P信息,来使用接口的网络掩码,而这有可能出错。
2、可能会发生路由环路
在路由器或链路发生故障后,需要很长的一段时间才能稳定下来。这段时间通常需要几分钟。在这段建立时间里,可能会发生路由环路。在实现 R I P时,必须采用很多微妙的措施来防止路由环路的出现,并使其尽快建立。
3、度量为16,限制网络大小
采用跳数作为路由度量忽略了其他一些应该考虑的因素。同时,度量最大值为 1 5则限制了可以使用RIP的网络的大小。
OSPF
OSPF是除RIP外的另一个内部网关协议。它克服了RIP的所有限制。与采用距离向量RIP协议不同的是,OSPF是一个链路状态协议。
在一个链路状态协议中,路由器并不与其邻站交换距离信息。它采用的是每个路由器主动地测试与其邻站相连链路的状态,将这些信息发送给它的其他邻站,而邻站将这些信息在自治系统中传播出去。每个路由器接收这些链路状态信息,并建立起完整的路由表。
OSPF网络类型
广播多路访问型(Broadcast MultiAccess)
非广播多路访问型(None Broadcast MultiAccess,NBMA)
点到点型(Point-to-Point)
点到多点型(Point-to-MultiPoint)。
广播多路访问型网络如:Ethernet、Token Ring、FDDI。
NBMA型网络如:Frame Relay、X.25、SMDS。
Point-to-Point型网络如:PPP、HDLC。
OSPF的操作步骤:
1、建立路由器的邻接关系
所谓“邻接关系”(Adjacency)是指OSPF路由器以交换路由信息为目的,在所选择的相邻路由器之间建立的一种关系。 路由器首先发送拥有自身ID信息(Loopback端口或最大的 IP地址)的Hello报文。与之相邻的路由器如果收到这个Hello报文,就将这个报文内的ID信息加入到自己的Hello报文内。
如果路由器的某端口收到从其他路由器发送的含有自身ID信息的Hello报文,则它根据该端口所在网络类型确定是否可以建立邻接关系。
在点对点网络中,路由器将直接和对端路由器建立起邻接关系,并且该路由器将直接进入到第三步操作:发现其他路由器。若为MultiAccess 网络, 该路由器将进入选举步骤。
2. 选举DR/BDR
不同类型的网络选举DR和BDR的方式不同。
MultiAccess网络支持多个路由器,在这种状况下, OSPF需要建立起作为链路状态和LSA更新的中心节点。选举利用Hello报文内的ID和优先权(Priority)字段值来确定。优先权字段值大小从0到255,优先权值最高的路由器成为DR。如果优先权值大小一样,则ID值最高的路由器选举为DR, 优先权值次高的路由器选举为BDR。优先权值和ID值都可以直接设置。
3. 发现路由器
在这个步骤中,路由器与路由器之间首先利用Hello报文的ID信息确认主从关系,然后主从路由器相互交换部分链路状态信息。每个路由器对信息进行分析比较,如果收到的信息有新的内容,路由器将要求对方发送完整的链路状态信息。这个状态完成后,路由器之间建立完全相邻(Full Adjacency)关系,同时邻接路由器拥有自己独立的、完整的链路状态数据库。
在MultiAccess网络内,DR与BDR互换信息,并同时与本子网内其他路由器交换链路状态信息。
在Point-to-Point 或 Point-to-MultiPoint网络中,相邻路由器之间互换链路状态信息。
4. 选择适当的路由器
当一个路由器拥有完整独立的链路状态数据库后,它将采用SPF算法计算并创建路由表。OSPF路由器依据链路状态数据库的内容,独立地用SPF算法计算出到每一个目的网络的路径,并将路径存入路由表中。
OSPF 利用量度(Cost)计算目的路径,Cost最小者即为最短路径。在配置OSPF路由器时可根据实际情况,如链路带宽、时延或经济上的费用设置链路Cost大小。Cost越小,则该链路被选为路由的可能性越大。
5. 维护路由信息
当链路状态发生变化时,OSPF通过Flooding 过程通告网络上其他路由器。OSPF路由器接收到包含有新信息的链路状态更新报文,将更新自己的链路状态数据库,然后用SPF算法重新计算路由表。在重新计算过程中,路由器继续使用旧路由表,直到SPF完成新的路由表计算。新的链路状态信息将发送给其他路由器。值得注意的是,即使链路状态没有发生改变,OSPF路由信息也会自动更新,默认时间为30分钟。
OSPF路由器之间使用链路状态通告(LSA)来交换各自的链路状态信息,并把获得的信息存储在链路状态数据库中。各OSPF路由器独立使用SPF算法计算到各个目的地址的路由。
OSPF协议支持分层路由方式,这使得它的扩展能力远远超过RIP协议。当OSPF网络扩展到100、500甚至上千个路由器时,路由器的链路状态数据库将记录成千上万条链路信息。为了使路由器的运行更快速、更经济、占用的资源更少,网络工程师们通常按功能、结构和需要把OSPF网络分割成若干个区域,并将这些区域和主干区域根据功能和需要相互连接从而达到分层的目的。
环路避免
最大跳:一定有限的跳数来防止环路,例如RIP最多15跳,16跳上帝无穷大
水平分割:绝不把从一个来源处所学到的路由再会送给这个来源
路由毒化:路由器把无效路由的费用设置为无穷大
抑制定时器:路由器收到一条路由不可到达的消息后,会在路由表中将这条路由冻结,再冻结时间内,不接受其他路由器告诉他可达的消息,相反,再这段时间内将这条消息通知给网络中的其他路由器,最终达成全网的 一致
触发更新:当网络变化的时候,路由器立即触发路由更新数据包
毒性反转(反向毒化):通过向已经拥有到达该网络路由信息的路由器发送一个取值无穷大的路由更新信息,以使该路由的逆向路由达到抑制
比较
OSPF与RIP的不同:
链路状态协议比距离向量协议收敛的更快。收敛的意思是在路由发生变化后,例如在路由关闭或链路出故障后,可以稳定下来。
OSPF直接使用IP。也就是说,它并不使用UDP或TCP。对于IP首部的protocol字段,OSPF有其自己的值。
OSPF较RIP的优点:
OSPF可以对每个IP服务类型计算各自的路由集。这意味着对于任何目的,可以有多个路由表表项,每个表项对应着一个IP服务类型。
给每个接口指派一个无维数的费用。可以通过吞吐率、往返时间、可靠性或其他性能来进行指派。可以给每个IP服务类型指派一个单独的费用。
当对同一个目的地址存在着多个相同费用的路由时,O S P F在这些路由上平均分配流量。我们称之为流量平衡。
OSPF支持子网:子网掩码与每个通告路由相连。这样就允许将一个任何类型的IP地址分割成多个不同大小的子网。到一个主机的路由是通过全 1子网掩码进行通告的。默认路由是以IP地址为0.0.0.0、网络掩码为全0进行通告的。
路由器之间的点对点链路不需要每端都有一个IP地址,我们称之为无编号网络。这样就可以节省IP地址。
采用了一种简单鉴别机制。可以采用类似RIP-2的方法指定一个明文口令。
OSPF采用多播,而不是广播形式,以减少不参与OSPF的系统负载。