eigrp路由协议分析.doc

上传人:文库蛋蛋多 文档编号:2400322 上传时间:2023-02-17 格式:DOC 页数:25 大小:179KB
返回 下载 相关 举报
eigrp路由协议分析.doc_第1页
第1页 / 共25页
eigrp路由协议分析.doc_第2页
第2页 / 共25页
eigrp路由协议分析.doc_第3页
第3页 / 共25页
eigrp路由协议分析.doc_第4页
第4页 / 共25页
eigrp路由协议分析.doc_第5页
第5页 / 共25页
点击查看更多>>
资源描述

《eigrp路由协议分析.doc》由会员分享,可在线阅读,更多相关《eigrp路由协议分析.doc(25页珍藏版)》请在三一办公上搜索。

1、 目 录摘要1关键词1Abstract1Key words11 引言12 路由器简介12.1 什么是路由器12.2 路由器结构22.3 路由器分类22.4 路由器基本功能33 EIGRP33.1 EIGRP定义33.2 EIGRP的特点43.3 EIGRP路由协议对比43.4 EIGRP距离54 DUAL54.1 本地计算64.2 扩散计算64.3 完成扩散计算64.4 保持活动的路由75 EIGRP协议与OSPF协议简单比较76 EIGRP路由协议的实现76.1 实现的总体框架76.2 全局数据结构86.3 接口链路检测任务126.4 路由的插入与删除12致谢12参考文献12EIGRP路由协

2、议分析计算机科学网络工程专业 魏晓晖指导教师 吴俊华摘要:现如今,强大而丰富的网络世界离不开路由协议的存在,而在路由协议中,EIGRP路由协议则担当了很重要的角色。首先介绍了路由器基本组成与结构,并且重点对EIGRP路由协议进行了研究,分析其优越性以及适用环境等。然后将EIGRP路由协议与其他协议进行比较,形象对比突出了EIGRP协议的优点与特点。然后介绍了扩散更新算法DUAL,最后,系统的对EIGRP路由协议进行了分析,并且完成了EIGRP路由协议的实现,EIGRP数据包的接口检测任务以及路由的插入与删除等功能。关键词:路由器 路由协议 DUAL EIGRPEIGRP Routing Pro

3、tocol Analysis Student Majoring in Network engineering Wei Xiaohui Tutor Wu JunhuaAbstract: Now, the powerful and rich online world can not do without the presence of the routing protocol, routing protocol, EIGRP routing protocols play a very important role. First introduced the basic composition an

4、d structure of router, and focusing on the EIGRP routing protocol, analyze its advantages as well as the applicable environment. EIGRP routing protocol is compared with other protocols, image contrast highlights the advantages and characteristics of EIGRP protocol. DUAL (Diffused Update Algorithm, D

5、iffusing Update Algorithm), and then introduced the system EIGRP routing protocol analysis, and complete implementation of the EIGRP routing protocol, EIGRP packet interface detects the insertion and deletion of tasks and routing functions .Key words:Router;Routing Protocol;DUAL;EIGRP;1 引言在信息化时代的今天,

6、强大的网络系统对路由协议进行了考验。各种路由器的协同工作,也是对路由协议的使用与实现提出了挑战。而路由协议中,动态路由则显得格外重要。本文对路由协议进行简单介绍,并重点介绍EIGRP的特点与实现方法。对DUAL(Diffused Update Algorithm,扩散更新算法)的实现做出分析,以及EIGRP的具体使用做出全面解析。2 路由器简介2.1 什么是路由器路由器(Router)是连接因特网中各局域网、广域网的设备,它会根据信道的情况自动选择和设定路由,以最佳路径,按前后顺序发送信号的设备。 路由器是互联网络的枢纽、“交通警察”。目前路由器已经广泛应用于各行各业,各种不同档次的产品已成为

7、实现各种骨干网内部连接、骨干网间互联和骨干网与互联网互联互通业务的主力军。路由和交换之间的主要区别就是交换发生在OSI参考模型第二层(数据链路层),而路由发生在第三层,即网络层。这一区别决定了路由和交换在移动信息的过程中需使用不同的控制信息,所以两者实现各自功能的方式是不同的。路由器是工作在OSI参考模型第三层网络层的数据包转发设备。路由器通过转发数据包来实现网络互连。虽然路由器可以支持多种协议(如TCP/IP、IPX/SPX、AppleTalk等协议),但是在我国绝大多数路由器运行TCP/IP协议。路由器通常连接两个或多个由IP子网或点到点协议标识的逻辑端口,至少拥有1个物理端口。路由器根据

8、收到数据包中的网络层地址以及路由器内部维护的路由表决定输出端口以及下一跳地址,并且重写链路层数据包头实现转发数据包。路由器通过动态维护路由表来反映当前的网络拓扑,并通过与网络上其他路由器交换路由和链路信息来维护路由表。2.2 路由器结构2.2.1 路由器基本组件路由器中负责执行操作系统的指令是CPU,而防止RAM中内容断电丢失的随机访问存储器 (RAM)也起到了重要作用。路由器中还包括运行操作系统、运行配置文件、IP路由表、ARP 缓存以及数据包缓存区等。而保存开机自检软件,存储路由器的启动引导程序的则是我们所说的ROM,即只读存储器。路由器中不可缺少的bootstrap 指令以及基本的自检软

9、件也起到了重要作用。而存储启动配置非易失 RAM (NVRAM)中则包括IP地址,路由协议,主机名等。平常所说的闪存则是运行操作系统(Cisco IOS)。Interfaces拥有多种物理接口用于连接网络。路由器接口分类包括广域网接口、局域网接口以及配置接口。下面,以图表方式,系统介绍路由器各组件之间的联系:用户接口Dual UARTCF存储卡闪存默认为32MB启动ROMNVRAM2MB或4MB闪存用户接口Dual UART128MB(可扩展至348MB)系统控制ASICCPUM860处理器FastEthernet0/1FastEthernet0/0插槽1HWIC/WIC/VWIC插槽0HWI

10、C/WIC/VWIC图1路由器各组件联系图2.2.2 分层模型1977年,国际标准化组织(ISO)制定了开放系统互连基本参考模型(OSI),OSI参考模型采用分层结构技术,将整个网络的通信功能分为职责分明的七层,由高到低分别是:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。目前计算机网络通信中采用最为普遍的TCP/IP协议吸收了OSI标准中的概念及特征。TCP/IP模型由四个层次组成即应用层、传输层、网络层、数据链路层+物理层。只有对等层才能相互通讯。一方在某层上的协议是什么,对方在同一层次上也必须采用同一协议。路由器就工作在TCP/IP模型的第三层网络层,主要作用是为收到的报文

11、寻找正确的路径,并把它们转发出去。2.3 路由器分类当前路由器的分类方法有很多种,当然,各种分类方法有一定的关联,但是又并不是完全一致的。大致可以从以下几个层次上分类:从结构上分,路由器可分为模块化结构与非模块化结构,通常中高端路由器为模块化结构,低端路由器为非模块化结构。 从网络位置划分,路由器可分为核心路由器与接入路由器。核心路由器位于网络中心,通常使用高端路由器,要求快速的包交换能力与高速的网络接口,通常是模块化结构;接入路由器位于网络边缘,通常使用中低端路由器,要求相对低速的端口以及较强的接入控制能力。 从功能上划分,路由器可分为通用路由器与专用路由器。一般所说的路由器为通用路由器。专

12、用路由器通常为实现某种特定功能对路由器接口、硬件等作专门优化,例如接入路由器用作接入拨号用户,增强PSTN接口以及信令能力;VPN路由器增强隧道处理能力以及硬件加密;宽带接入路由器强调宽带接口数量及种类。 从性能上分,路由器可分为线速路由器以及非线速路由器。通常线速路由器是高端路由器,能以媒体速率转发数据包;中低端路由器是非线速路由器,但是一些新的宽带接入路由器也有线速转发能力。 在标准的制定中,路由器从能力上区分可分为:高端路由器和低端路由器等类别,背板交换能力大于20Gbit/s,包交换能力大于20Mbit/s的路由器称为高端路由器;包交换能力小于1Mbit/s的路由器称为低端路由器。以市

13、场占有率最大的Cisco公司为例,12000系列为高端路由器,7500以下系列路由器为低端路由器。显然上述划分存在空档:包交换能力1Mbit/s以上20Mbit/s以下的路由器没有参照标准。按照标准系列,应当有中档路由器规范。但是由于中档路由器没有特殊性,可以参照低端路由器或高端路由器,所以不再单独另立标准。2.4 路由器基本功能路由器的一个作用是连通不同的网络,另一个作用是选择信息传送的线路。选择通畅快捷的近路,能大大提高通信速度,减轻网络系统通信负荷,节约网络系统资源,提高网络系统畅通率,从而让网络系统发挥出更大的效益来。 从过滤网络流量的角度来看,路由器的作用与交换机和网桥非常相似。但是

14、与工作在网络物理层,从物理上划分网段的交换机不同,路由器使用专门的软件协议从逻辑上对整个网络进行划分。例如,一台支持IP协议的路由器可以把网络划分成多个子网段,只有指向特殊IP地址的网络流量才可以通过路由器。对于每一个接收到的数据包,路由器都会重新计算其校验值,并写入新的物理地址。因此,使用路由器转发和过滤数据的速度往往要比只查看数据包物理地址的交换机慢。但是,对于那些结构复杂的网络,使用路由器可以提高网络的整体效率。路由器的另外一个明显优势就是可以自动过滤网络广播。从总体上说,在网络中添加路由器的整个安装过程要比即插即用的交换机复杂很多。 一般说来,异种网络互联与多个子网互联都应采用路由器来

15、完成。 路由器的主要工作就是为经过路由器的每个数据帧寻找一条最佳传输路径,并将该数据有效地传送到目的站点。由此可见,选择最佳路径的策略即路由算法是路由器的关键所在。为了完成;这项工作,在路由器中保存着各种传输路径的相关数据路径表(Routing Table),供路由选择;时使用。路径表中保存着子网的标志信息、网上路由器的个数和下一个路由器的名字等内容。路径表可以是由系统管理员固定设置好的,也可以由系统动态修改,可以由路由器自动调整,也可以由主机控制。 3 EIGRP3.1 EIGRP定义EIGRP是Enhanced Interior Gateway Routing Protocol的缩写即增强

16、内部网关路由线路协议。也翻译为“加强型内部网关路由协议”。EIGRP是Cisco公司的私有协议。Cisco公司是该协议的发明者和唯一具备该协议解释和修改权的厂商。 EIGRP结合了链路状态和距离矢量型路由选择协议的Cisco专用协议,采用弥散修正算法(DUAL)来实现快速收敛,可以不发送定期的路由更新信息以减少带宽的占用,支持AppleTalk、IP、Novell和NetWare等多种网络层协议。3.2 EIGRP的特点EIGRP是Cisco的私有路由协议,它综合了距离矢量和链路状态两者的优点,它的特点使得EIGRP在路由协议中担当了重要角色:快速收敛:快速收敛是因为使用了散播更新算法,通过在

17、路由表中备份路由而实现,也就是到达目的网络的最小开销和次最小开销(也叫适宜后继, feasible successor)路由都被保存在路由表中,当最小开销的路由不可用时,快速切换到次最小开销路由上,从而达到快速收敛的目的。链路状态包(Link-State Packet,LSP)的转发是不依靠路由计算的,所以在大型网络中可以较为快速的进行收敛。它只宣告链路和链路状态,而不宣告路由,所以即使链路发生了变化,不会引起该链路的路由被宣告.但是链路状态路由协议使用的是Dijkstra算法,Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起

18、始点为中心向外层层扩展,直到扩展到终点为止。该算法比较复杂,并且占CPU和内存资源,EIGRP采用的弥散更新算法(Diffusing Update Algorithm),通过多个路由器并行的进行路由计算,可以在无环路产生的情况下达到快速的收敛的效果。减少带宽占用:EIGRP不作周期性的更新,它只在路由的路径和速度发生变化以后做部分更新.当路径信息改变以后,DUAL只发送那条路由信息改变了的更新,而不是发送整个路由表。和更新传输到一个区域内的所有路由器上的链路状态路由协议相比,DUAL只发送更新给需要该更新信息的路由器。在WAN低速链路上,EIGRP可能会占用大量带宽,默认只占用链路带宽50%,

19、之后发布的IOS允许使用命令ip bandwidth-percent eigrp来修改这一默认值。无缝连接数据链路层协议和拓扑结构:EIGRP不要求对OSI参考模型的2层协议做特别的配置。不像OSPF、OSPF对不同的两层协议要做不同配置,比如以太网和帧中继,EIGRP能够有效的工作在LAN和WAN中,而且EIGRP保证网络及不会产生环路(loop-free);而且配置起来很简单;支持VLSM;它使用组播和单播,不使用广播,这样做节约了带宽;它使用和IGRP一样的度的算法,但是是32位长的;它可以做非等价的路径的负载平衡。3.3 EIGRP路由协议对比在对EIGRP路由协议进行分析时,先介绍一

20、下路由协议的距离向量算法与链路状态算法以及两者所用于的协议和特点,并进行比对:距离向量路由算法(Bellman-Ford Routing Algorithm),也叫做最大流量演算法(Ford-Fulkerson Algorithm), 其被距离向量协议作为一个算法,如RIP, BGP, ISO IDRP, NOVELL IPX。用于IGRP(Interior Gateway Routing Protocol,内部网关路由协议),RIP(Routing Information Protocol,路由信息协议)和BGP(Border Gateway Protocol,边界网关协议)等协议,每个路由

21、器只知道其邻居提供的信息,路由器只用直接连接的邻居提供的信息作出路由决策,路由器也只向直接连接的邻居提供它所知道的路由信息,收到和发送的信息还可以因为安全原因或通信工程原因而进一步过滤。在距离向量路由算法中,相邻路由器之间周期性地相互交换各自的路由表备份。当网络拓扑结构发生变化时,路由器之间也将及时地相互通知有关变更信息。链路状态路由算法(Link State Routing)要求每个参与该算法的结点都有完全的网络拓扑信息,他们执行以下两项任务:第一,主动测试所有邻结点的状态。两个共享一条链接的结点是邻结点,他们连接到同一条链路,或者连接到同一广播型物理网络;第二,定期地将链路状态传播给所有其

22、他的结点(或称路由结点)。用于OSPF(Open Shortest Path First,开放式最短路径优先)和ISIS(Intermediate SystemtoIntermediate System,中介系统)等协议,一定网络区域的所有路由器对该区域的拓扑有相同的了解,它对于网络中各种设备的位置比距离向量有更全面的了解。EIGRP使用的技术DUAL(扩散更新算法)类似于距离向量协议,但Cisco公司称它为平衡混合型,平衡混合型的意思是它同时具有距离向量和链路状态算法的特点,其实EIGRP的核心逻辑上是距离向量,但它传输拓扑信息的目的是像链路状态一样绘出网络的地图。因此使它比传统距离向量协议

23、更优秀:EIGRP保存拓扑表中所有邻居发来的所有路由,而不只是保存迄今为止收到的最佳路由,而RIP则只保存迄今为止收到的最佳路由,放弃其余所有路由。由于EIGRP不仅仅知道一个路由,因此在当前路由消失的同时能更快切换到替换路由,这也使得EIGRP在多变而又不稳定的网络中起到重要作用。EIGRP有自动查询功能,在无法访问目的地而又没有替换路由时能对邻居进行查询。而运行传统距离向量协议的路由器则是被动的等待邻居寻找和报告更好的路由。由于汇聚过程(从路由丢失到重新得到路由的这个过程)是主动的而不是被动的(被动的等待路由超时),因此EIGRP的汇聚过程可以和最佳链路状态协议相媲美。3.4 EIGRP距

24、离和其他协议相似,EIGRP用距离(metrics)来度量到目的地的路由。EIGRP拥有两种距离:向量距离(vector metric)和复合距离(composite metric),这两者之间是可以相互转换的。向量距离是路由器到目的地子网的6个参数组成的向量,包括:带宽、延迟、负荷、可靠性、步数和MTU(最小传输单元)。如下所示:Vector metric:Minimum bandwidth is 100000 KbitTotal delay is 100 microsecondsReliability is 255255Load is l255Minimum MTU is 1500Hop

25、count is 1复合距离是个整数,只在路由器内部使用,不发给EIGRP邻居。它是为了方便在内部计算和比较。把向量距离转化为复合向量可分两步:posite metric =K1*BW+K2*BW(256-load)+K3*DLYposite metric=composite metric*K5(reliability+K4)(只用于K5不等于0时)此处:BW=(10000000bandwidth)*256DLY=delay*256delay的单位为10微秒,bandwidth的单位为kbps。一般来说,K1和K3缺省为1,其它的因子缺省为0。K2、K4和K5是IGRP时代的遗留产物。所以,缺

26、省复合距离是总延迟和最小带宽倒数的和。K值可以改动,但要让EIGRP顺利工作,EIGRP邻居之间的K值一定要相同。改变K值可以仿真与其他的路由协议相似的EIGRP功能,具体如下:(1) 仿真RIP,将所有接口的延迟设置成相等值,并将除K3以外的所有K值置0。(2) 仿真OSPF,将接口延迟设置为OSPF的成本,并将除K3以外的所有K值置0。(3) 选择最小端对端带宽的路由,将除K1以外的所有K值置为0。由此可见,EIGRP路由协议的功能强大。4 DUALEIGRP的核心算法是DUAL(扩散更新算法),DUAL的工作过程能保证路由总是无环的。DUAL算法分为本地计算和扩散计算两部分。这里要明确三

27、条基本DUAL规则:(1) DUAL规则1:路由器选择新的后继时,它将新报告距离告诉所有其他邻居。(2) DUAL规则2:每次路由器选择后继时,它将一个抑制更新(无穷大)发给后继。(3) DUAL规则3:抑制更新发给后继能访问的接口上的所有邻居,除非关闭分割层面。关闭分割层面时,它只发给后继。DUAL算法主要针对各种输入事件作出反映,以下为EIGRP对路由丢失和链路故障、邻居丢失等输入事件的处理方法:(1) EIGRP用正常更新分组报告路由丢失,并将向量距离的delay部分设置为无穷。(2) EIGRP把直接连接子网的丢失当作从路由器外部源收到的更新分组,delay部分设置为无穷。(3) EI

28、GRP把链路丢失当作直接连接子网的丢失加上一个或几个邻居丢失。(4) EIGRP把邻居丢失当作来自该邻居的更新分组,该邻居的delay部分设置为无穷。4.1 本地计算本地计算是在被动状态下,对新输入的事件作出的反映,对路由进行评估,寻找最佳后继和可行后继。它可以启动扩散计算,在扩散计算收到所有的应答报文后,收敛后,又开始本地计算。它也可能改变后继,切换到可行后继。这是在路由器本地立即进行的。路由保持被动状态(不进行扩散计算),不涉及其他路由。4.2 扩散计算输入事件后,EIGRP路由器找不到替换路由,例如没有替换路由、新的最佳路由经过报告增加路由距离的后继、新的最佳路由不经过可行后继时,将会进

29、行扩散计算,向所有邻居询问替换路由。扩散计算按下列步骤进行:(1) 路由表中将该路由设置为活动状态(active)。这个标志防止循环查询。(2) 根据邻居表,建立应答状态表,跟踪邻居的应答。并启动定时器,保证网络在规定的时间内汇聚。(3) 向所有的邻居发出查询请求。查询分组包括新的临时最佳向量距离,告诉邻居网络拓扑已改变。(4) 收集所有邻居的应答,并存放在拓扑表中。各个邻居的响应状态用应答状态表来跟踪。(5) 在收到所有邻居的应答后, 将路由状态设置为被动状态,重新本地计算,在拓扑表中选择最佳路由并在路由表中安装新的最佳路由。(6) 如果需要,向邻居发出更新报文,表示网络拓扑的改变。而对于接

30、收到查询报文的路由器而言,它按下列规则处理查询:如果发送查询的路由器原先提供了所查询路由的拓扑信息,则查询信息覆盖前面从发送查询的邻居那里接受的信息。如果路由器收到拓扑表中所没有的路由查询,则它立即答复无限距离并停止查询处理。如果路由已经活动,则路由器答复当前最佳路由并停止查询处理。如果查询不是来自后续者,则路由器答复当前最佳路由。如果只从后继收到查询而没有其他EIGRP邻居,则路由答复无限距离。如果查询来自后继且当前路由器还有其他可行后继,则路由器重新选择到目的地的最佳路由。如果这个路由经过可行后继,则路由器选择替换路由并向查询产生者报告新的最佳路由。如果没有替换路由,或新最佳路由仍然指向发

31、送查询的路由器,或新最佳路由不经过可行后继,则路由器递归传递查询给其它邻居,即启动扩散计算。4.3 完成扩散计算启动查询的路由器收到邻居的应答时,它把收到的数据存放在拓扑表中,并标记应答表中的相应项目。收到所有的应答后,把路由标记设置为被动状态,又开始本地计算,选择新最佳的路由,并在路由表中安装新的最佳路由参与扩散计算的其他路由器可能还不知道最优路由,因此还要将扩散计算结果重新告诉这些路由器,发更新包给他们。4.4 保持活动的路由由于扩散计算规则中,要求路由器从查询的所有邻居收到应答之后才能选择新的最佳路由。在一些极端情形下,邻居可能无法响应查询。例如在邻居出现故障时,邻居路由器重新启动,还没

32、有通过hello机制,或者传输媒介拥塞,或者软硬件出错时。在这种情形下,启动扩散计算的路由器无法完成计算。为了防止这种情况,EIGRP确定了扩散计算允许的最长时间。当扩散计算超过规定的最长时间时,扩散计算提前退出,清除与无响应邻居的相邻性,然后继续计算,就象这些邻居应答了无限距离。退出扩散计算的路由称为保持活动的路由(SIA,struck inactive)。缺省的SIA超时为3分钟。5 EIGRP协议与OSPF协议简单比较EIGRP支持在同一共享媒介上运行几个EIGRP进程,因为每个EIGRP分组中都包括AS号;而OSPF在同一共享媒介上只支持一个OSPF进程。OSPF只支持等成本负荷平衡,

33、而EIGRP支持不等成本比例负荷平衡。EIGRP可以根据优先级的不同,进行自动匹配流量,而OSPF则只有相同优先级的,才能达到负载均衡的目的。对OSPF进行配置和管理时,需要网络分析员具有较高的网络知识水平,而对于EIGRP协议组建网络时,路由器配置很简单,不需要针对不同网络接口类型而进行不同的配置。所以对于网络分析员的水平要求不需要太高。OSPF将网络中所有改变传递给区域中每个路由器,而EIGRP则只影响部分相关的路由器。这使得EIGRP将占用更少的带宽去完成相同的数据传递与操作。OSPF显然有更健全的hello协议,因为它先验证双向访问性再建立相邻性,但EIGRP的hello协议在公用子网

34、上的邻居有不同定时要求时更容易适应。OSPF能很好地处理有些路由器无法对付网络改变量的环境,这些路由器可能错误地路由通信,但网络其他部分不受影响。在EIGRP中。单个错误工作或过载路由器就可能因为SIA事件而使整个网络停顿。EIGRP的收敛时间对比与OSPF有明显的减少,而EIGRP传输协议在适应不同邻居响应时间和损失性链路时要比OSPF好得多。IOS版本的EIGRP还能使网络操作员比使用OSPF相关show命令更好地监视邻居和响应性。尽管跟踪SIA事件是个困难的任务,但至少EIGRP show命令允许一步步找出潜在瓶颈,最终找出不良路由器。而OSPF则没有类似的机制。6 EIGRP路由协议的

35、实现6.1 实现的总体框架EIGRP路由协议是在已开发的路由器上实现的,它是基于PPC的芯片,在VxWorks平台下开发的。此路由器已有RIP、OSPF等路由协议和PPP、HDLC、FrameRelay、Ethernet等链路协议。该路由器有四个串口和一个网口,EIGRP工作在IP上层,与TCP同层,协议号为88。考虑到这是网络编程,传统上可以采用RAW socket套接字来进行收发数据包,但考虑到与原先开发出来的OSPF协议兼容,采用直接注册到IP层,调用IP层的输出函数发送EIGRP的数据报,接收数据包由注册到内核的通知函数来处理。本实现总共启动三个任务,分别是主循环任务、定时器任务和接口

36、链路检测任务,由主循环任务来主控,再加上用户配置shell任务和注册到内核的EIGRP数据包通知函数,这四个任务和通知函数采用VxWorks提供的消息队列(message queue)来进行任务间通信。主循环任务主要处理EIGRP协议的初始化,它包括各种接口表,拓扑表,EIGRP进程信息表的初始化,创建消息队列。然后读消息队列,读到后,分配消息到相应的消息处理程序,等待消息处理程序返回,再继续读消息,一直读到消息队列中无消息时,阻塞挂起。主循环任务由用户配置shell任务启动,在用户开启EIGRP路由协议时启动。在用户关闭EIGRP路由协议时,自行退出。定时器任务主要产生各种定时信息,比如he

37、llo报文的定时发送,邻居保持定时器超时的监测,监测可靠传输报文的应答超时,如查询时未应答的超时重发等,保持活动路由(SIA)的超时监测。接口链路检测任务监测接口链路的通、断状态,便于及时知道邻居的复位和相关接口路由的改变。接口链路检测任务和定时器任务是由主循环任务产生和删除的。用户配置shell任务主要处理用户对EIGRP协议的配置。比如EIGRP进程的启动或关闭、接口的关闭、带宽或延迟的改变,hello定时发送间隔的改变等。EIGRP数据包通知函数主要是接收EIGRP数据包。它是由主循环任务注册到内核的,在主循环任务退出前,取消注册,也就取消了通知函数的作用。它相当于一个接收EIGRP数据

38、包的任务。定时器任务、接口链路检测任务、用户配置shell任务和EIGRP数据包通知函数并不直接处理各种输入事件,只是根据不同的输入事件来产生不同的消息,通过消息队列传递给主循环任务,由主循环任务安排相应的消息处理程序来处理不同的输入事件。6.2 全局数据结构6.2.1 消息队列在本实现中,消息队列为各任务提供通信机制。用户配置shell任务、EIGRP接收包的通知函数、定时器任务和接口链路检测任务发送消息,而主循环接受消息。考虑到效率,减小拷贝数量,消息队列中传递的是指针,而不是具体的内容,这个指针指向具体的内容。例如在传递EIGRP数据包时,这种方式可避免多次拷贝,加快处理速度,提高效率。

39、但需注意的是:被传递指针指向的内存的释放,避免内存泄漏。由于消息发送到处理有一个处理时间,因此如果在短时间内有很多消息时,那么消息就需要在消息队列中排队。本消息队列提供优先级服务,对于紧急事务消息,在发送时选取紧急标志(MSG_PRI_URGENT),可被主循环优先接收,优先处理。例如用户信息显示和整个EIGRP路由协议进程的关闭等消息,这样处理在于让用户配置shell一敲入命令,马上就能得到显示,不至于有很大的延迟,让用户等待很长时间。对于EIGRP进程关闭消息的优先,可避免一些不需要处理的消息,因为EIGRP进程马上就要关闭,处理了也没多大用处。因此在EIGRP主循环任务结束删除消息队列时

40、,要把未处理的消息一一读出来,释放这些消息中指针指向的内存,因为本消息队列传递的是指针,需要释放这些指针指向的内存。另外,在发送消息时,选择超时timeout标志时,选择NO_WAIT,不等待发送成功就可以返回。因为考虑到EIGRP接收包处理程序,这是一个内核程序,不能有很大的延迟。在用户配置shell任务中,有延迟会造成用户shell不连贯,影响用户的使用。这样实现就可能造成有些消息没有发送成功,但只要把消息队列的长度配置到一个比较能接受的长度,就可忽略这个问题。在接受消息时,选择超时timeout标志时,选择WAIT_FOREVER,在消息队列无消息时,主循环就阻塞,要一直读到有消息为止。

41、6.2.2 EIGRP接口表EIGRP接口表管理着哪些接口运行EIGRP协议,并储存这些接口上的邻居。在这里没有直接用邻居表,因为用接口表更为方便直接。如要查询邻居,则从相应的接口表中的邻居链表来查询。接口表里还有接口的各种信息,如带宽、延迟、当前的状态等。它的数据结构如下:struct EIGRP_INTERFACE intfNUM_LINK;struct EIGRP_INTERFACEUint tab_state; 接口是否运行EIGRPUint group_id; 接口运行所在的自治域组Uint no_recv; 接口过滤Uint no_send; 接口过滤Uint state; 接E1

42、链路的状态Uint auto_sys_num;EIGRP的自治域号word mtu; 接口的MTUUint type; 接口的传输类型,比如点对点,广播IPADDR addr; 接口的地址IPADDR mask; 接口的地址掩码Uint hello interval;hello的时间间隔Uint hold time;保持间隔Uint hello timer; 用于定时器处理Uint k1,k2,k3,k4,k5; 接口的k值Uint seq; 发送的序列号Uint bandwidth;接口的带宽Uint delay;接口的延迟char auth key10; 验证密码Uint auth fla

43、g; 验证开启标志structifnet*ifnet;接口在内核的链路指针struct EIGRP NEIGHBOR*nb head; 接口维持的邻居表;在这里,接口数目NUM LINK可以改变,在于用户的配置。在本路由器七有四个串口和一个网口,每个串口都可以运行帧中继Frame-Relay,而帧中继中有子接口的概念,这样各个运行帧中继的接口可有八个子接口,这样加上网口,一共最多33个接口。但就目前的网络而言,帧中继用的很少了,并考虑到本路由器的用途(作为接入路由器),即使运行帧中继,也一般只用主接口,不用另外的七个子接口,这样一般来说总共五个接口。但为了保持以后的兼容性,在设计上,我们考虑了

44、帧中继子接口的问题。我们把常用的接口放在接口表的前面。在不用帧中继子接口时,可把NUM_LINK改小为5,减小空间,也加快处理速度。以下为设备与序号的对应关系:序号设备e0序号w2.1-w2.7w1.1-w1.7s1.1-s1.7s2.1-s2.7w2w1s2s126-3219-2512-185-1143210设备图2 设备与序号对应关系e0为网口,只有一个接口,EIGRP协议不支持以太网的子接口。s1、s2、w1、w2为串口1、串口2、串口3、串口4。s1.1-s1.7为运行帧中继的串口1的子接口,其他类似。开始笔者考虑用链表而不用数组来动态实现接口表,链表可以节省空间,不需要一一匹配,但链

45、表查找比较慢,添加、删除也容易出错。因为本实现中接口表的查找比较频繁,接口的关闭和开启也比较频繁,采用数组就可避免以上问题,通过接口的序号马上就能查到接口表,更改数组中的标志就可完成接口的关闭和开启。这里的邻居表挂在接口表中,采用链表形式,是因为邻居数不确定。这里的下层链路指针ifnet是为了发送EIGRP包准备的,要慎用,要与接口状态链路状态state结合起来用。因为在本路由器实现中,接口链路挂到内核时,ifnet指针是随机分配的。在接口链路断了时,应把ifnet置为空(NULL),重新连接时,置为相应的ifnet结构指针。6.2.3 EIGRP拓扑表EIGRP的拓扑表不是OSPF那样的整个

46、网络的拓扑结构,是邻居发送过来的拓扑信息和自己本地网络的拓扑信息,但也很庞大,因此本拓扑以目的地地址为导向,采用哈希(HASH)表机制,来存储拓扑表信息。拓扑信息有内部和外部之分,都要考虑到,具体如下:struct EIGRP_TOP *eigrp_topHASH_N;struct EIGRPTOPUint in ext;内部路由、外部路由Uint ext_prot; 外部路由的协议Uint ext_prot_flag; 外部路由的标志Uint group;运行EIGRP协议所在的自治域组Uint ext_metric;外部路由的距离Uint redis_flag;重分布的标志IPADDR d

47、est_addr; 目的地地址IPADDR dest_mask;目的地掩码Uint local_dis;Uint dest_state; 目的地是否为活动状态Uint retry_flag;重传标志Uint query_counter; 向多少个邻居数发送查询包Uint update_counter;向多少个邻居数发送更新包Uint reply_counter; 向多少个邻居数发送应答包Uint active_timer; 用于保持活动定时器Uint dest_fd; 最佳距离Uint dest_fc: 可行后继条件Uint as_num; 自治域号Uint sr_id; 后继在后继表中的索引Uint bw_min; 最小带宽Uint delay_sum 最小延迟;Uint ad bw; 报告带宽Uint ad delay; 报告延迟Uint acttimestamp;开始活动的时间struct FC_SR fesb_srNUM_FS;后继表struct OUTSTANDING_NB *outstanding_nb;未处理的邻居struct EIGRP TOP*nex

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号