路由器中的硬件IP路由表查找技术_第1页
路由器中的硬件IP路由表查找技术_第2页
路由器中的硬件IP路由表查找技术_第3页
路由器中的硬件IP路由表查找技术_第4页
路由器中的硬件IP路由表查找技术_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、路由器中的硬件IP路由表查找技术Internet的迅速发展给我们的生活带来了巨大的变化。随之而来的是网络流量的迅速增长。网络流量的增长对于Internet上的路由器来说是一个很大的挑战,特别是核心路由器。它需要高速有效的包调度.转发和路由策略。本文针对路由器的路由查找,提出了一种高效的.便于用硬件实现的技术。1. 路由器的体系结构 图1给出了一般路由器的逻辑体系结构。它主要由下面几部分组成 :路由引擎、转发引擎、 路由表、网络适配器和相关的逻辑电路等。转发引擎负责把从一个网络适配器来的数据包转发到另一个网络适配器出去。IP协议,包括对路由表的查找,构成了转发引擎中最主要的部分。由于每个通过路由

2、器并需要其转发的数据包都要对路由表进行查找,所以路由表的查找效率如何往往决定了整个路由器的性能。路由引擎则包括了高层协议,特别是路由协议,它负责对路由表的更新。由于路由引擎不涉及通过路由器的数据通路,故它可用通用的CPU代替。2硬件路由表的数据结构设计一般路由器中路由表的每一项至少有这样的信息:目标地址、网络隐码、下一跳地址。如果对每一个IP地址都要一个表项,那么需要占用很大的2323*4字节的存储器,而且其中必定有很多的表项没有被使用,这就会造成极大的资源浪费。为了用硬件实现路由表的查找,查找算法需要满足如下的条件:1) 实时的实现路由表的查找; 2) 有效的实现路由表的插入和删除;3) 提

3、供有效的最长前缀匹配;4) 具有良好的可扩展性;5) 支持广播和组播; 6) 有效的对Memory进行利用; 7) 硬件上容易实现,并具有良好的性能 。我们考虑,如果在对路由表的查找中,把子网隐码和IP地址结合起来,对IP地址进行相应的分段,并把它们相连。这样在路由表的表项中,只有IP地址的一部分及其相应的隐码部分,可以实现良好的可扩展性,只要对Memory进行有效的管理,可以灵活的动态的实现对路由的插入和删除。鉴于此,我们设计该表的结构(如下面的表一所示 ): 它的思想是:把32位IPv4地址主要分成4部分,每部分8位。在该结构中,Address-part0-4是IP地址中的一部分,Mask

4、-part0-4是相应的掩码部分。Hit-next0-4是需要查找的目标IP地址与掩码部分相与后,与Address-part一致时所要查找的下一路由项所在地址的指针。,Miss-hit0-4则是相互不一致时,下一路由项所在地址的指针。Shift位则用于判断是否需要对IP地址中的下8位进行查找和判断。它只有在当前的8位IP地址与目标地址中相应的8位一致时,才会被置位。Stop位用于判断是否还需进行查找。它在IP地址查找结束时被置位,或没有比当前项所对应的IP地址更长的路由表项时被置位。图2就是一个表1的例子 :在该例子中,每一方框中上面一行表示相应的IP地址部分和隐码部分。下面一行表示相关的隐码

5、部分的二进制表示。 相应的查找算法如下:查找算法开始 */search = TRUE ;WHILE ( search ) masked_key = key & ( entry -mask_part ) ;result = ( entry -address_part ) = = masked_keyIF ( result = = TRUE ) best_match = entry ;entry = entry -hit_next;ELSEentry = entry -miss_next;IF ( entry -stop = = TRUE ) search = FALSE;RETURN best_

6、match ;查找算法结束 */为了实现有效的插入和删除,我们还要在路由表的数据结构中再另外添加几个域 :parent指针(指向本结点的父结点),路由信息(routeinfo)等。它们的用途是在路由表的查找过程中,特别是在指针的回溯(pointer reversal)中,可以大大的节省查找时间。由于IP路由的插入和删除比较复杂。我们只是粗略得说明一下。IP路由的插入:/*插入算法开始 */* 先用上面提到的查找算法找出best-match */best_match = search ( new_entry );/* 确定需要加入的路由中没有被best-match包括的那几位 */for ( c

7、ount = first_unmatched_bit ; count = sizeof ( new_entry) ;count+= sizeof ( address_part ) /* 创建新的结点 */create new node ;/* 将该结点连入best_match的hit_next */link node into hit branch of best_match ;/*插入算法结束 */IP路由的删除要分几种情况讨论 。如 best_match 是叶子结点 ,best_match的hit_next指针为空, best_match的miss_next指针为空 和hit_next指针

8、和miss_next指针都不为空等四种情况。这里就不再讨论。3路由表查找的硬件实现: 图3就是对应与上面提及的路由表结构的IP路由表查找的硬件实现(简称为路由卡)的系统框图。在路由卡中,主要有IP地址,状态机,路由信息,Memory,译码器,掩码器,比较器,地址寄存器组成。IP地址用于保存所要查找的目标地址。状态器用于控制IP路由表的查找。路由信息就是我们所要查找的信息。它的工作原理是这样的:当路由器从某一个网络适配器中接受到一个需要转发的数据包后,在需要进行IP路由表的查找时,把IP包的目的地址送到IP地址寄存器中,同时给状态机发一个指令。状态接到这一指令后,从Memory中读出路由表的相应

9、的表项,并和IP地址寄存器中的相应几位经译码器,掩码器后,进行比较,把比较的结果反馈给状态机。再由状态机来控制下一轮的比较。当比较结束后,把比较的结果放在路由信息寄存器中,供路由器(如转发引擎)读取。同时状态机在特定的某一端口设置标志,来通知CPU查找是否已经结束或还在进行当中。下面对其性能进行分析。4性能分析由于路由表项中,地址掩码的引入,使得路由结构变得非常灵活。但相应的,由此产生的内存的开销也相当的大。这是性能和硬件开销一对矛盾的必然体现。该路由卡原型的实现是利用微机上的ISA总线,采用存取时间为70ns 的SRAM存储器(所需容量为6*123k*8bit)。除了使用ISA总线上提供的总

10、线外,本身还带了33M的晶振。对某一路由表项的查找,最多只需32步查找。在最坏情况下,共需32次查找,查找时间为:32* 1 /(33*106) 9.7 * 10 -7秒此时每秒可查找 1/(9.7 * 10 -7) 1.03 * 106次虽然该路由卡是基于ISA总线,但平均来说,该路由卡的查找速率为每秒8百万次。这也从另一方面说明该路由卡的设计是可行的。针对网络流量的增加,及对路由器性能要求的提高,本文从硬件的角度对IP路由查找算法用硬件实现做了一系列的分析,并提出了相应的便于用硬件实现的IP路由表的数据结构。同时对该路由卡的性能进行了分析。同时也该看到:为了更快的提高路由表的查找速率,基于

11、ISA总线是不可能满足要求的。由此,使用FPGA芯片不可避免。由于VHDL语言固有的灵活性和可编程性,可以更为灵活和高效的实现路由查找。所以,使用FPGA芯片来实现路由查找,是未来的趋势。因特网最短路径优先(OSPF)路由算法的实现因特网中,路由器中路由表的生成是非常关键的技术问题。目前,在因特网中的路由器中,都支持开放最短路径优先(OSPF)路由生成算法。OSPF算法生成速度快,而且收敛快、性能稳定,是目前已知的因特网中路由表生成的最好算法之一。 OSPF最重要的内容是路由器如何根据已接收到的本路由器所在的自治系统(AS)的路由器拓扑结构以及各路由器之间的传输费用(代价、权),生成一条从本路

12、由器到AS中各路由器的最短路径,进而生成路由表。 本实验的目的是根据一个给定的网络拓扑结构及路由器之间的传输费用,生成指定路由器到其它路由器的最短路径的实现方法,并且根据求得的最短路径,生成路由表。 最短路径算法是因特网(Internet)路由算法中最重要的算法,关系到因特网的网络交换性能以及网络的稳定性,因此,解决最短路径算法的实现问题,具有非常重要的应用价值。本设计型实验,紧密结合最短路径在因特网中的实际应用,通过最短路径算法的程序实现过程和路由表的生成过程,更深地领会最短路径在因特网中实现快速路由以及路由表生成的原理,培养学生解决实际问题的能力。 二、实验要求 熟悉C语言编程, 熟练使用

13、C语言实现图形结构的说明、创建以及图的存储表示;要求学生熟练应用图形数据结构编程实现最短路径的算法;了解AS中路由器与网络、网络与路由器代价计算方法;了解根据OSPF生成路由表的原理。 三、实验内容 根据给定的网络拓扑图求某路由器到其它路由器的最短路径,并生成路由表 下图为因特网中某自治系统(AS)路由器及网络连接拓扑图。 按照因特网的规定,从网络到路由器的费用为0,因此上图(无向图)可表示为下图(有向图)形式。 求从某路由器(如R1)至其它路由器的最短路径。即从始点(如R1)开始,逐步求始点(如R1)到其它可达的各路由器的最短路径,直到所有路由器计算完成为止。 根据最短路径的求解结果,可以生

14、成路由表。 路由表主要由两个表项组成,即目的网络(目的路由器所在网络)及下一路由器(或下一跳,即所求路由器相邻的某一路由器),如N5,R4,表示到达N5的最短路径通过R4,N3,R6,因此相对于路由器R1而言,到达目的网络N5的下一跳为R4。 下表是R1到其它网络的最短路径: 开始 路由器 目的路由器 或目的网络 最短路径经过的路由器或网络序列 最短路径值 R1R2R1-N1-R25R1R3R1-N1-R35R1R4R1-R48R1R5R1-N1-R2-R59R1R6R1-R4-N3-R610R1N1R1-N15R1N2R1-N1-R3-N27R1N3R1-R4-N310R1N4R1-N1-R

15、2-R5-N411R1N5R1-R4-N3-R6-N515根据R1到其它网络的最短路径,很容易得到R1的路由表(下一跳是R1到达网络所经过的第一个路由器),详见下表: 目的网络 下一跳(路由器) N1-N2R3N3R4N4R2N5R4四、实验步骤 以下是最短路径算法的具体实现步骤。但是由于本实验为设计型实验,且为解决实验问题而做,因此,以下的最短路径算法只能作参考,还有若干步骤需要学生们自己独立完成,如生成路由表;而且除求R1路由器到其它路由器的最短路径外,还可以求其它路由器(如R2,R3,)最短路径和生成路由表。 1输入e条弧,生成AOE-网的存储结构。 2初始化: S v0 ; distj

16、 Edge0j, j = 1, 2, , n-1; / n为图中顶点个数 3.求出最短路径的长度: distk min disti , i V- S ; S S U k ;4.修改从v0到V-S集合中各顶点的最短路径: disti min disti, distk + Edgeki ,对于每一个 i 属于 V- S ; 5.判断:若 S = V, 则算法结束,否则转 2。OSPF路由协议中的核心算法实现/ Dijkstra算法.cpp : 定义控制台应用程序的入口点。/#include stdafx.husing namespace std;void Dijkstra(int n,int v,

17、int dist,int prev,int *c) int maxint = /你认为不太可能取到的值; bool *s = new booln;/用于区分节点处于那个集合中 for (int i = 1; i = n; i+)/这里是初始化 disti = cvi; si = false; if (disti = maxint) previ = 0; else previ = v; distv = 0; sv = true; for (int i = 1; i n; i+)/主要部分开始 int temp = maxint; int u = v; for (int j = 1; j = n;

18、 j+)/找出集合2中的最小COST的枝和点 if (!sj) & (distj temp) u = j; temp = distj; su = true; for (int j = 1; j = n; j+)/最上述选出的点进行树的更新 if (!sj) & (cuj maxint) int newdist = distu + cuj; if (newdist n; int *way = new intn + 1;/下面是初始化 int *c = new int *n + 1; for (int i = 1; i = n; i+) ci = new intn + 1; for (int j

19、= 1; j = n; j+) for (int t = 1; t cjt; int *dist = new int n; int *prev = new int n; cinvu; Dijkstra(n, v, dist, prev, c); cout最短路径从v u 的距离是:distuendl; int w = u; while (w != v)/输出最短路径 q+; wayq = prevw; w = prevw; cout= 1; j-) coutwayj; coutuendl;return 0;二、Dijkstra算法Dijkstra算法是路由表计算的依据,通过Dijkstra算法

20、可以得到有关网络节点的最短路径树,然后由最短路径优先树得到路由表。1.Dijkstra算法的描述如下:(1)初始化集合E,使之只包含源节点S,并初始化集合R,使之包含所有其它节点。初始化路径列O,使其包含一段从S起始的路径。这些路径的长度值等于相应链路的量度值,并以递增顺序排列列表O。(2)若列表O为空,或者O中第1个路径长度为无穷大,则将R中所有剩余节点标注为不可达,并终止算法。(3)首先寻找列表O中的最短路径P,从O中删除P。设V为P的最终节点。若V已在集合E中,继续执行步骤2。否则,P为通往V的最短路径。将V从R移至E。(4)建立一个与P相连并从V开始的所有链路构成的侯选路径集合。这些路径的长度是P的长度加上与P相连的长度。将这些新的链路插入有序表O中,并放置在其长度所对应的等级上。继续执行步骤2。2.Dijkstra算法举例:下面我们以路由器A为例,来说明最短路径树的建立过程:(1)路由器A找到了路由器B、C,将它们列入候选列表B:1;C:2。(2)从候选列表中找出最小代价项B,将B加入最短

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论