动态路由概述
动态路由协议是在网际网络中用于交换路由和连通信息的一组过程,算法和消息。如果没有动态路由协议,所有网络(与路由器直连连接的网络除外)均必须采用静态方式定义。动态路由协议可以对网络条件变化(如链路故障)做出响应。
路由
所有的路由协议都有相同的用途:获取远程网络的信息,并在网络拓扑结构发送变化时快速做出调整。路由协议实现该目的的方法有该协议使用的算法及其运行特征来决定。动态路由协议的性能因路由协议类型的不同而有所不同。
路由协议为路由器提供最新的路由表,代价是对路由器的内存和处理能力提出了更多要求。首先,交换路由信息增加了网络带宽的消耗开销。这种开销可能是个问题,特别是对路由器之间带宽不高的链路。其次,当路由器获得路由信息之后,路由协议需要处理接收的信息。因此,使用这些协议的路由器只有拥有足够的资源,才能实现协议的算法和及时执行数据包的路由和转发。
路由域
路由域是一种自治系统(AS), 它是接受统一管理的一.组路由器。公司内部网络及其与ISP之间的互连就是一个典型路由域的例子。ISP与公司内部网络由不同管理部门控制。因此,需要采用互连方式。这种场景往往采用静态路由。但是,如果公司与ISP之间存在多条链路,会发生什么情况?如果公司使用多个ISP,又会怎样?这时,静态路由协议恐怕并不适合。为了连接这些实体,必须与不同管理部门负责管理的机构建立通信。再如,合并、收购或建立要保留自身IT资源的子公司。原有的网络可能需要连接网络,但也可能需要将网络作为独立实体运营。必须在两者之间建立--条沟
通渠道。第三个例子与第一-个例子 关系密切,那就是公共互联网。还有很多不同的实体相互交织。图3-1展示了3种自治系统,其中一个系统用于私营公司,另外两个用于ISP。
要适应这些类型的场景,需要采用以下两类路由协议。
- 内部网关协议(IGP):这类路由协议用于在自治系统内交换路由信息。EIGRP 、IS-IS (中间系统到中间系统)协议、RIP (路由信息协议)和OSPF (开放式最短路径优先)协议都是IGP的典型例子。
- 外部网关协议( EGP ): 这类路由协议用于在自治系统之间进行路由。BGP (边界网关协议)是目前网络首选的EGP。外部网关协议设计于1982年,是首个EGP。如今,人们开始渐渐转向BGP,认为EGP已经过时。BGP是公共互联网上使用的一种路由协议。
建立EIGRP邻居关系
EIGRP是作为比较老的内部网关路由协议(Interior Gateway RoutingProtocol,IGRP)的增强版本进行开发的,与高级内部网关协议有许多相同的特点,比如高速收敛、部分更新以及支持多个网络层协议的能力。配置EIGRP的第一步是在多种接口类型上建立EIGRP邻居参数和不同的WAN技术是如何影响会话建立的。
EIGRP的特征
EIGRP不同于其他路由协议的关键性能包括快速收敛、支持可边长子网掩码(Variable-Lengt Subnet Masking,VLSM)、部分更新以及支持多种网络层协议。有关这款协议的设计及其架构的基本描述,已通过指导性RFC的形式进行了发布,因此Cisco得以在控制EIGRP和客户体验的同时,将这项协议开发给其他厂商,以提升EIGRP的互操作性。
EIGRP是Cisco的私有协议,这项协议将链路状态型协议和距离矢量型协议的优势结合了起来。不过,EIGRP是一种距离矢量路由协议。EIGRP包含了很多RIP等其他距离矢量协议中所没有的高级特性,这也正是EIGRP被称为高级距离矢量路由协议的原因。
EIGRP和它的前身IGRP一样容易配置,而且适用于大量的网络拓扑。但是,让EIGRP成为高级距离矢量协议的原因,在于这项协议中增加了许多链路状态协议的特性,比如动态的邻居发现等。EIGRP是增强型的IGRP,因为它在任何时候都可以进行快速收敛,并且保证拓扑是无环的。这项协议的特性包括下面这些。
- 快速收敛: EIGRP 使用扩散更新算法(Diffusing Update Algorit hm, DUAL)来实现快速收敛。运行EIGRP的路由器会将自己邻居的路由表储存起来,因此可以快速适应网络的变化。如果本地路由表中没有合适的路由,且拓扑表中也没有合适的备份路由,EIGRP才会询问邻居来发现替换路由。直至找到替换路由或者确定没有替换路由存在时,EIGRP才会停止发送查询消息。
- 部分更新:EIGRP发送部分触发更新而不是周期更新。只有当路径发生变化或路由度量值发生变化时才会发送。这些更新消息中只会包含变化的链路信息,而不会包含整个路由表中的信息。部分更新的传播会被自动限制,以便保证唯有需要这些信息的路由器才会接收到这些更新。因此,与IGRP相比,EIGRP所消耗的带宽显著降低。这种工作方式也与链路状态协议的工作方式不同,链路状态协议会将变化发送更新给区域内的所有路由器。
- 支持多种网络层协议:EIGRP使用负责特定网络层协议需求的模块来支持IP第4版(IPv4) 和IP第6版(IPv6)。 在IPv4和IPv6网络中部署EIGRP时,它的快速收敛及复杂的度量计算系统可以提供优越的性能和稳定性。
- 使用组播和单播: EIGRP会使用组播和单播,而不是广播来建立路由器之间的通信。因此,终端站点不会受到路由更新或查询消息的影响。IPv4的EIGRP使用的组播地址是224. 0. 0.10而IPv6的EIGRP使用的组播地址则是FF00::A。
- 支持VLSM:EIGRP是一种无类路由协议,所以它会通告每个目的网络的子网掩码。因此,EIGRP可以支持不连续的子网和VLSM。
- 跨越所有数据链路层协议和拓扑的无缝连通性:EIGRP不需进行特殊的配置就能跨越任何2层协议进行工作。其他路由协议,比如开放最短路径优先(Open ShortestPath First, OSFP)协议,则在配置方面对于以太网和帧中继等不同的2层协议存在不同的要求。EIGRP 的设计初衷是在LAN和WAN环境中进行有效的操作。EIGRP的标准中包含了对WAN专用点到点链路和非广播多路访问(NonBroadcastMulti -Access ,NBMA)拓扑的支持。在跨越WAN链路建立邻居关系时,EIGRP可以适应不同类型的介质和速率,并且可以通过配置来限制协议在WAN链路上使用的带宽总量。
- 复杂的度量值: EIGRP是通过32位数来表示度量值的,因此足够精确。EIGRP支持非等价度量负载分担,因此管理员可以在网络中更加高效地分配流量。
- 通过发送和接收Hello包来建立和维护邻居关系。
- 采用组播(224.0.0.1)或单播进行路由更新。
- EIGRP的默认管理距离为90或170。
- 采用无触发更新和部分更新,减少带宽消耗。
- 是无类别的路由协议,支持VLSM和不连续子网,默认开启路由自动汇总功能,支持在任意运行EIGRP协议的接口手工汇总。
- 使用协议独立模块(Protocol Dependent modules, PDM)来支持IP、IPX和AppleTalk等多种网络层协议。对每一种网络协议,EIGRP都维持独立的邻居表、拓扑表和路由表,并且存储整个网络拓扑结构的信息,以便快速适应网络变化。
- 采用带宽、延迟、可靠性和负载计算度量值,度量值的颗粒度精细(32位)范围为1~4294967296。
- EIGRP使用扩散更新算法(Diffusing Update Algorithm,DUAL)来实现快速收敛并确保没有路由环路。
- 使用可靠传输协议(Reliable Transport Protocol,RTP)保证路由信息传输的可靠性和有序性,它支持组播和单播的混合传输。
- 支持等价负载(Equal-cost)和非等价(Unequal-cost)的负载均衡(Load Balancing)。
- 于数据链路层协议无缝连接,EIGRP不要求针对第二层协议做特殊的配置。
EIGRP特性
EIGRP中使用的关键技术之- -是可靠传输协议( Reliable Transport Protocol, RTP),这项技术的作用是实现可靠的信息交换。
如图2-1所示,EIGRP 直接运行在IP层上,其协议号为88。RTP是EIGRP中的一项组件,负责把EIGRP数据包可靠、有序地传输给所有邻居设备。它支持将组播或单播数据包混合进行传输。在网络段上使用组播时,数据包会被发送给EIGRP的预留组播地址:在IPv4中,这个地址为224.0.0.10,在IPv6中为FF02::A。
由于效率原因,RTP仅会采用可靠的方式来发送特定的EIGRP数据包,接收方需要发送一条EIGRP确认消息。例如,在以太网这类有组播能力的多路访问网络中,不需要以可靠方式单独向所有邻居发送Hello包。此时,EIGRP会发送-一个组播Hello包,其中包含一个标识符,告知接收方这个数据包不需要确认。其他类型的包,比如更新包,则包含表.示需要确认的标识符。可靠传输协议可以快速发送组播包,即使还有数据包未经确认也会继续发送。在链路拥有多种速率的情况下,协议的这项特性有助于将网络收敛时间保持在一个比较低的水平。
EIGRP包含的4个基本组件
- 邻居发现/恢复。
- 可靠的传输协议。
- DUAl有限状态机。
- 基于协议的模块。
邻居发现/恢复是指路由器用来动态了解直连网络.上的其他路由器的过程。当邻居无法到达或运行不正常时,路由器也必须执行发现操作。只需定期发送小型数据包,在开销极低的情况下即可完成此过程。只要收到hello数据包,路由器便可确定邻居处于活动状态并正常运行。- -经确认,相邻的路由器间就能交换路由信息。
可靠的传输协议(不要与实时协议(RTP) 混淆,用于通过IP通信传输语音)负责通过可靠有序的方式将EIGRP数据包传输到所有邻居。支持同时使用组播数据包或单播数据包。只须完美传输部分EIGRP数据包。为了提高效率,仅在必要时提供可靠性。例如,在具有多项组播功能(如以太网)的多路访问网络上,无需通过可靠方式将hello数据包分别发送给所有邻居。因此,EIGRP在发送每个多播hello数据包时,会在数据包中随附说明,通知接收方无需对该数据包进行确认。其他类型的数据包(如更新)需要确认,数据包中将予以指示。当存在等待确认的未确认数据包时,可靠的传输协议还可以快速发送多播数据包。这样可确保存在变速链路时,依然能够保持较短的收敛时间。
DUAL有限状态机在所有路由计算中均纳入了决策过程。跟踪所有邻居通告的所有路由。DUAL使用距离信息(称为“度量”)选择有效的无环路路径。DUAL选择将要基于可行后继路由插入路由表的路由。后继路由是指用于转发数据包的相邻路由器,它具有到达路由环路外的目的地的最低成本路径。当没有可行后继路由,但邻居通告该目的地时,必须重新进行计算。在此过程中,确定新的后继路由。重新计算路由所需的时间量会影响收敛时间。即使重新计算并不需要占用大量处理器资源,最好也要尽可能避免重新计算。当拓扑发生变化时,DUAL测试可行后继路由。如果有可行后继路由,则会使用发现的任意可行后继路由,以避免所有不必要的重新计算。稍后,将详细介绍可行后继路由。
基于协议的模块负责满足网络层的协议特定需求。例如,IP-EIGRP 模块负责收发封装在IP中的EIGRP数据包。IP-EIGRP负责解析EIGRP数据包并通知DUAL接收到新的信息。IP-EIGRP 要求DUAL做出路由决策,决策结果被存储到IP路由表中。IP-EIGRP负责充分分配其他IP路由协议学习的路由。
EIGRP术语
- 后继(Successor):是一个直接连接的邻居路由器,通过它到达目的网络的度量值最小。后继是提供主要路由的路由器,该路由器被放入拓扑表和路由表中。对于同一目的的网络可存在多个后继。
- 可行后继(Feasible Successor): 是一个直接连接的邻居路由器,但是通过它到达目的地的度量值比通过后继路由器的高,而且它的通告距离小于通过后继路由器到达目的网络:的可行距离。可行后继是提供备份路由的路由器,该路由仅被放入拓扑表中。对于同一目的网络,可存在多个可行后继。
- 可行距离(Feasible Distance,FD):到达目的网络的最小度量。
- 通告距离(Reported Distance,RD):邻居路由器所通告的它自己到达目的网络的最小的度量值,也有资料把RD称为AD(Advertised Distance)。
- 可行性条件(Feasible Condition,FC)是EIGRP路由器更新路由表和托盘表的依据。可行性条件可以有效阻止路由环路,实现路由的快速收敛。可行性条件的公式为RD<FD。
- Hello: 以组播的方式定期发送,用于建立和维持邻居关系。Hello包的确认号始终为0,因此不需要确认。默认情况下,在点到点链路或者带宽大于T1的多点链路上,EIGRP Hello .数据包每5s发送一次。 在带宽小于T1的低速链路上, EIGRP Hello数据包每60s发送一次。保持时间是收到此数据包的EIGRP邻居在认为发出通告的路由器发生故障之前应该等待的最长时间。默认情况下,保持时间是Hello间隔的3倍。到达保持时间后,EIGRP将删除邻居以及从邻居学到的所有拓扑表中的条目。
- 更新(Update):当路由器收到某个邻居路由器的第一个Hello包时,以单播传送方式发送一个包含它所知道的路由信息的更新包。当路由信息发生变化时,以组播的方式发送只包含变化路由信息的更新包。
- 查询(Query): 当一条链路失效,并且在拓扑表中没有可行后继路由时,路由器需要重新进行路由计算,路由器就以组播的方式向它的邻居发送--一个查询包,以询问它们是否有一条到目的地的路由。查询包通常是组播包,但是也有时候是单播包。
- 答复(Reply):以单播的方式回复查询方,对查询数据包进行应答。
- 确认(ACK):以单播的方式发送的Hello包,包含一个不为0的确认好,用来确认更新、查询和答复数据包。ACk不需要确认。
EIGRP操作概述
EIGRP协议的操作是基于存储在三个表中的信息来实现的:邻居表、拓扑表和路由表。
存储在邻居表中的主要信息是一组EIGRP路由器已经与之建立邻接关系的邻居设备。标识邻居的是其主IP地址和指向该邻居的直连接口。
拓扑表包含邻居路由器通告的所有目的路由。拓扑表中的每个条目都与通告该目的网络的那些邻居相互关联。拓扑表中会记录每个邻居所通告的度量值。这个度量值是邻居存储在路由表中,标识到达特定目的的度量值。另一个重要的信息是这台路由器到达同-一个目的网络的度量值。这个度量值是邻居通告的度量加上到达邻居的链路开销。到达目的网络度量值最优的路由称为后继路由(successor),这种路由会被放在路由表中并通告给其他邻居。
在EIGRP中,建立和发现邻居路由的过程会同时进行。以图2-2中的拓扑为例,这个
过程可以概括为如下所示。
- 一台新的路由器(此例中为路由器R1)在链路上启动,并通过所有配置EIGRP的接口对外发送Hello包。
- 在一个接口,上接收到Hello包的路由器(R2)通过更新数据包进行应答,这个数据包中包含了路由表中的所有路由,但不包含通过该接口学习到的路由(水平分割)。R2向R1发送一个更新包1,但在R2发送Hello包给R1之前,邻居关系尚未建立。来自R2的更新包设置了初始化位,表示这是初始化过程。更新包中会包含邻居(R2)所知道的路由信息,其中包括邻居为每个目的通告的度量值。
- 在两台路由器都交换了Hello包且邻居邻接关系也已经建立起来之后,R1会向R2回复一个ACK数据包,表示自己接收到了更新信息。
- R1提将所有更新包的信息提取到拓扑表中。拓扑表包含所有相邻的邻接路由器通告的目的网络。表中会列出每个目的、所有可以到达目的的邻居,以及它们对应的度量值。
- R1给R2发送一个更新包。
- 收到更新包后,R2向R1发送一个ACK(确认)数据包。
在R1和和R2成功交换更新包之后,它们就可以使用拓扑表中的后继路由来更新增加的路由表。
EIGRP的数据包类型
EIGRP使用以下5种数据包。
- Hello/ACK。
- 更新。
- 查询。
- 应答。
- 请求。
正如前文所说,hello 消息是邻居用于发现/恢复的组播。无需确认。空hello数据包也可用作确认(ACK)。ACK往往通过单播地址进行发送,并且其中包含非零确认号。
更新用于提供路由相关信息。当发现新邻居时,发送更新数据包,这样邻居可以自行构建EIGRP拓扑表。在这种情况下,更新数据包为单播形式。其他情况下(如链路成本调整),更新数据包为组播形式。
查询和应答用于查找和传输路由。查询始终为组播形式,除非因响应接收查询而发送。查询ACK始终以单播形式传回发出查询的后继路由。应答往往为响应查询而发送,用于指示发送方无需进人活动状态,因为其具有可行后继路由。应答将以单播形式发送到查询发送方。查询和应答均需要以可靠的方式传输。
EIGRP数据包格式
每个EIGRP数据包都是由EIGRP数据包头部和TLV (类型/长度/值)构成。EIGRP数据包头部和TLV被封装到一个IP数据包中。在该IP数据包中,协议字段被设为88以代表EIGRP。如果EIGRP数据包为组播包,则目的地址被设为组播地址“224.0.0.10”; 如果EIGRP数据包被封装在以太网帧内,则组播目的MAC地址为“01-00-5E-00-00-0A”。EIGRP数据包格式如图3-1所示
每个EIGRP数据包都包含EIGRP数据包头部,它是每个EIGRP数据包的开始部分,各
字段的含义如下所述。
- 版本:始发EIGRP进程处理的版本。
- 操作码: EIGRP 数据包的类型。
- 校验和:基于除了IP 头部的整个EIGRP数据包来计算的校验和。
- 标记:通常设置为0x0000001.
- 序列号:用在RTP中的32位序列号。
- 确认序列号:是本地路由器从邻居路由器那里收到的最新的一一个32位序列号。
- 自治系统号: EIGRP路由进程的ID。
1.带EIGRP参数的TLV
EIGRP头部的后面就是多种类型的TLV字段,如图3-2所示的是EIGRP度量参数(类型为0x0001)的TLV,它用于传递度量值计算的权重和保持时间。具体的度量值计算方法稍后介绍。