顺序查找路由表

顺序查找路由表
顺序查找路由表

青岛农业大学理学与信息科学学院

计算机网络综合实习报告

题目

专业

学号

姓名

指导教师

日期

目录

一、课程设计任务和目的 (1)

二、设计要求 (1)

三、设计内容 (1)

3.1顺序查找路由表的工作原理 (1)

3.2课程设计程序运行结果与分析 (2)

四、改进和建议 (5)

五、总结 (5)

六、主要参考文献 (5)

附录: (6)

一、课程设计任务和目的

1.了解路由器更新的原理。

2.了解表示路由器的结构。

3.掌握路由器转发分组的算法。

二、设计要求

编写计算机程序,用(目的网络,掩码,下一跳)的结构表示路由表,以一个目的地址作为输入,顺序查找路由表,找出正确的下一跳,并输出。

三、设计内容

3.1顺序查找路由表的工作原理

使用子网划分后,路由表必须包含:目的地址,子网掩码,下一跳地址。路由器分组转发的算法如下:

(1)从收到的数据包的首部提取目的IP地址D;

(2)对路由器直接相连的网络逐个进行检查:用个网络的掩码和D逐位相“与”,看结果是否和相应的网络地址匹配。若匹配,则把分组直接交付,转发任务结束,否则就是间接交付执行(3)。

(3)若路由表中有目的地址为D特定主机路由,则把数据报传送给路由表中所指明的下一跳路由器否则执行(4)。

(4)对路由表的每一行,用其中的子网掩码和D逐位相“与”,其结果为N。若N 与该行的目的网络相匹配,则把数据报送给该行指明的下一跳路由器;否则执行(5)。

(5)若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器;否则执行(6)。

(6)报告转发分组出错,没有查找到路由。

简单来说,就是当来一个数据报时,抓

出IP地址,与子网掩码相与得出网络号。再与路由表相对比,查询下一跳。

3.2课程设计程序运行结果与分析

此程序是编写了一些方法,然后在主程序中进行调用,还定义了一些数组,有的用到了动态定义数组。

在这个程序中定义路由器的一个路由表中有三组数据,任意输入三组数据。在此程序示范运行时,用到的三组数据如表3-1所示:

表3-1 路由表

然后可以任意输入一个目的地址IP,在示范运行时用到的目的地址IP是:

128.30.33.138和128.3.2.136。目的地址IP与路由表中的第一组子网掩码逐位相与,如果相与结果与其对应的目的网络地址匹配,则它的下一跳是该子网掩码对应的下一跳;不匹配,则目的地址IP与第二组子网掩码进行逐位相与,看其结果。就这样,目的地址IP顺序与路由表中的子网掩码进行相与,直到找到下一跳为止,若是找不到,则输出“转发分组出错”。

在此程序中定义的主要方法有:

(1).void zore_one(int n):表示将十进制参数n除2取余,得出的二进制序列正排。

(2).void and(int a,int b):表示将参数a,b转换成二进制进行逐位相与得出二进制数,再将这个二进制数倒序,然后转换成十进制数。

定义的主要数组有:

(1).int pur_net[3][4]:目的网络地址。

(2).int subnet[3][4]:子网掩码。

(3).string next[3]:下一跳。

编译链接后,开始运行,循环输入路由器(目的网络,子网掩码,下一跳)的三组数据,如图3-1所示:

图3-1 输入数据显示路由表

显示出路由表之后,再任意输入一个目的地址IP,比如:128.30.33.138。如图3-2所示:

图3-2 输入目的地址IP

然后按任意键继续,将网络地址IP与子网掩码进行逐位相与,寻找下一跳,如图3-3所示:

图3-3 寻找下一跳

若输入的目的地址IP是:128.3.2.136,顺序查找路由表,没有找到它的下一跳,则输出“转发分组出错”。如图3-4所示:

图3-4转发分组出错

四、改进和建议

这个顺序查找路由表的下一跳的程序设计不是很完美,有一些我认为应该有的功能都没有实现,比如从文本中读取路由表,这样方便一些,省的还要每次输入那么多的数据,若是在文本中读取路由表,直接更改文本中路由表的数据,就可以实现多个路由表的计算,在这儿所说的从文本中读取路由表,并不是简单地从磁盘文件中读取数据,并简单地将数据显示在显示器上,而是将从磁盘文件中读取的数据作为程序的输入数据进行运算。这个程序另外一个不完美的地方是输入一组目的地址IP,运行程序得出结论后,再一次输入另一组的目的地址IP进行计算的功能没有实现,意思就是说应该能够循环输入多组目的地址IP,使它们可以顺序查找同一个路由表,我做的这个顺序查找路由表程序若是还想输入另一组目的地址IP进行计算下一跳时,就必须再次重新运行程序,重新输入各组数据,这样太麻烦了。

五、总结

这次课程设计我又一次复习了计算机网络方面的知识,学会了动态建立数组,多次运用了方法调用,提高效率。

这次课程设计不止让我学到了很多,还让我知道了许多自己的不足之处。通过这次顺序查找路由器程序的设计,我充分认识到应该将理论付诸于实践的重要性。

这次我做的题目要求是编写计算机程序,用(目的网络,掩码,下一跳)的结构表示路由表,以一个目的地址作为输入,顺序查找路由表,找出正确的下一跳,并输出。在当初学习计算机网络时,顺序查找路由器的这个知识点非常明白,自己思路和计算也很简单,就是当来一个数据报时,抓出IP地址,与子网掩码相与得出网络号,再与路由表中数据相对比,查询下一跳,思路简单、清晰、明了。但是简单的人工计算转化成计算机语言真的很不简单。做这个程序花费了我很大的精力,有时候想到了一些功能,但就是不能用语言去实现它,这暴露了我将计算机语言等方面的理论知识和应用实践相结合的能力有所欠缺的弱点,使我充分认识到自己编程能力方面的不足。希望通过后期的努力,能让我这方面的能力有所提高。

在这次课程设计中,我遇到了许多的问题。有不会的时候我就去翻看以前的C语言、C++等专业课资料去解决,有时直接上网查找答案,但是当看书和上网查找都不能找到我要的答案以后,请教周围的同学就是一种比较简便的方法。

六、主要参考文献

[1] 谢希仁.计算机网络.电子工业出版社,2008.1.

[2] 谭浩强.C++面向对象程序设计.清华大学出版社,2006.1.

附录:

#include

#include

#include

#include

using namespace std;

int M[10],N[10],K[10];

int A,I,flag;

int IP[4];

int pur_net[3][4];

int subnet[3][4];

string next[3];

int and_result[4];

void input1()//循环输入路由器(目的网络,子网掩码,下一跳){ int i,k;

for (i=0;i<3;i++)

{

cout<<"请输入第"<

for (k=0;k<4;k++)//输入目的网络

{

cin>>pur_net[i][k];

}

}

for (i=0;i<3;i++)

{

cout<<"请输入第"<

for (k=0;k<4;k++)//输入子网掩码

{

cin>>subnet[i][k];

}

}

for (i=0;i<3;i++)//输入下一跳

{

cout<<"请输入第"<

cin>>next[i];

}

}

void output2()//循环显示目的地址和子网掩码

{

int i,k;

for (i=0;i<3;i++)

{

for (k=0;k<3;k++)

{

cout<

}

cout <

cout<<"\t\t";

for (k=0;k<3;k++)

{

cout<

}

cout <

cout<<"\t\t"<

}

}

void output1()//循环显示整个路由表

{

input1();

cout<<"路由器建立的路由表如下:"<

cout<

cout<<"目的网络"<<"\t"<<"子网掩码"<<"\t"<<" 下一跳"<

output2();

cout <<"请输入一个目的地址:"<

int i;

for (i=0;i<4;i++)//输入目的地址

{

cin>>IP[i];

}

cout<<"您输入的目的地址是:";

for (i=0;i<3;i++)//显示目的地址

{

cout<

}

cout <

cout<

}

int zore_one(int n)//将十进制数除2取余,结果先正排

{

A=0;

ofstream outfile("1.txt");//定义文件输出对象,打开1.txt

int a[10],b,i=0;

while(n>0)

{

b=n%2;

if(b!=0)

{n=(n-1)/2;}

else

{ n=n/2;}

a[i]=b;

outfile<

i++;

}

A=i;

return 0;

}

void AND(int a,int b)//a,b逐位相与,结果倒排,二进制转换为十进制{

int i,B,C;

zore_one(a);

B=A;

ifstream infile("1.txt");//定义文件输入流对象

for(i=0;i

{

infile>>M[i];//从磁盘文件顺序读入B个数据

}

zore_one(b);

C=A;

ifstream ifile("1.txt");

for(i=0;i

{

ifile>>N[i];//从磁盘文件顺序读入A个数据

}

if(C>B){C=B;}//取二者最小值

for(i=0;i

{

if(M[i]==1&&N[i]==1)

K[i]=1;

else

K[i]=0;

}

int y=C;

while(K[y]==0)//从最后一位开始寻找第一个不为0的数的位置{

y--;

}

y=y+1;

int q=0;

int *L=new int[y];//动态定义数组

for(i=y-1;i>=0;i--)//将相与的结果二进制进行倒排

{

L[q]=K[i];

q++;

}

int sum=0;

int a1;

int a2=0;

for(i=q-1;i>=0;i--)//将二进制转换为十进制

{

a1=L[i];

sum=pow(2,a2)*a1+sum;

a2++;

}

and_result[I]=sum;

cout<

}

int main()

{

output1();

int k,i;

for(k=0;k<3;k++)//计算网络地址IP与子网掩码相与的结果,查找下一跳{

cout<<"IP与第"<

I=0;

flag=0;

for(i=0;i<4;i++)

{

AND(IP[i],subnet[k][i]);

I++;

if(pur_net[k][i]==and_result[i])

{

flag++;

}

else flag=0;

}

cout<

switch(flag)

{

case 0: cout<<"IP与第"<

case 1: cout<<"IP与第"<

case 2: cout<<"IP与第"<

case 3: cout<<"IP与第"<

case 4: cout<<"IP与第"<

default: break;

}

if(flag==4)

{break;}

cout<

}

if(flag!=4)

{

cout<<"转发分组出错"<

}

cout<

return 0;

}

课程设计成绩评定表

Windows操作系统路由表完全解析

Windows操作系统路由表完全解析 时间能够以这样的方式过去令人感到惊异。人们倾向于认为计算机技术属于高科技,但是,TCP/IP协议在过去的三十年里以各种形式出现,无所不在。因此,TCP/IP协议有时间变得真正成熟起来,并且更稳定和更可靠。然而,当涉及到计算机的时候,事情就没有那样简单了。当路由包通过网络的时候,有时候会出现错误。在这种情况下,熟悉Windows路由表是很有帮助的。路由表能够决定来自有问题的机器的数据包的去向。在本文中,我将向你介绍如何查看Windows路由表以及如何让Windows路由表中包含的数据有意义。 查看Windows路由表 路由表是Windows的TCP/IP协议栈的一个重要的部分。但是,路由表不是Windows 操作系统向普通用户显示的东西。如果你要看到这个路由表,你必须要打开一个命令提示符对话框,然后输入“ROUTE PRINT”命令。然后,你将看到一个类似于图A中显示的图形。 图A:这是Windows路由表的外观 在我深入讨论这个路由表之前,我建议你在命令提示符对话框中输入另一个命令。这个命令是:IPCONFIG /ALL 我建议你使用IPCONFIG /ALL命令的理由是因为这个命令能够显示TCP/IP协议在机器中实际上是如何设置的。的确,你可以在网卡属性页认真查看TCP/IP协议,但是,如果你从IPCONFIG得到这个信息,这个信息会更可靠。在过去的几年里,我曾经遇到过这样一些例子,IPCONFIG报告的信息与机器中的TCP/IP协议设置屏幕中显示的信息完全不一样。这种事情不常见,但是,如果正好出现这种错误,你就会遇到这种不匹配的情况。坦率

添加路由表

添加路由,这里按照自己的网络情况设置,下面是我的路由设置:Persistent Routes: Network Address Netmask Gateway Address Metric 135.190.35.0 255.255.255.0 135.190.35.254 135.190.0.0 255.255.0.0 135.190.35.254 132.0.0.0 255.0.0.0 135.190.35.254 我的内网是135.190.35.0段的IP,网关是135.190.35.254,外网是135.175.35.0段的IP,网关是135.175.35.254,因为我们设置的网络是外网的(可以正常使用的,用IE上个百度或者别的网站试试),所以不用增加外网路由,只需要增加内网的路由,我增加如下有路由就可以: Route add 135.190.0.0 mask 255.255.0.0 135.190.35.254 -p Route add 132.0.0.0 mask 255.0.0.0 135.190.35.254 –p route add 135.190.35.0 mask 255.255.255.0 135.190.35.254 -p 如果网络不稳定,再增加一条外网的路由: route add 135.175.35.0 mask 255.255.255.0 135.175.35.254 上面的命令直接粘贴在cmd下运行就可以:

三、即指向0.0.0.0的有两个网关,这样就会出现路由冲突,两个网络都不能访问。如何实现同时问两个网络?那要用到route命令第一步:route delete 0.0.0.0 "删除所有0.0.0.0的路由" 第二步:route add 0.0.0.0 mask 0.0.0.0 172.23.1.1 "添加0.0.0.0网络路由"这个是主要的,意思就是你可以上外网。第三步:route add 10.0.0.0 mask 255.0.0.0 192.168.0.2 "添加以10开头的网段指向内网路由",注意mask为255.0.0.0 ,而不是255.255.255.0 ,这样内部的多网段才可用。到这儿如果能正常访问内外网了的话,那么我么就要永久写入了(因为刚刚设置的路由表会在重启后丢失),用到以下命令:route add -p 添加静态路由,即重启后,路由不会丢失。注意使用前要在tcp/ip设置里去掉接在企业内部网的网卡的网关。以下是 WinArpAttacker 这是一个arp攻击软件。你可以用它来查看网络上所有的ip和MAC地址! 我用它追查过ARP攻击者。还可以用~~~

路由算法分类

路由算法及分类 路由算法及分类: 1、非自适应算法,静态路由算法 不能根据网络流量和拓扑结构的变化更新路由表,使用静态路由表,也称为固定式路由选择算法。 特点:简单,开销少;灵活性差。 2、自适应算法,动态路由算法 可根据网络流量和拓扑结构的变化更新路由表。 特点:开销大;健壮性和灵活性好。 3、最优化原则(optimality principle) 如果路由器J 在路由器I 到K 的最优路由上,那么从J 到K 的最优路由会落在同一路由上。 4、汇集树(sink tree) 从所有的源结点到一个给定的目的结点的最优路由的集合形成了一个以目的结点为根的树,称为汇集树; 路由算法的目的是找出并使用汇集树。 几种典型的路由选择算法: 1、最短路径路由算法(Shortest Path Routing) 1)基本思想 构建子网的拓扑图,图中的每个结点代表一个路由器,每条弧代表一条通信线路。为了选择两个路由器间的路由,算法在图中找出最短路径。

2)测量路径长度的方法 结点数量 地理距离 传输延迟 距离、信道带宽等参数的加权函数 3)Dijkstra算法 每个结点用从源结点沿已知最佳路径到本结点的距离来标注,标注分为临时性标注和永久性标注; 初始时,所有结点都为临时性标注,标注为无穷大; 将源结点标注为0,且为永久性标注,并令其为工作结点; 检查与工作结点相邻的临时性结点,若该结点到工作结点的距离与工作结点的标注之和小于该结点的标注,则用新计算得到的和重新标注该结点; 在整个图中查找具有最小值的临时性标注结点,将其变为永久性结点,并成为下一轮检查的工作结点; 重复第四、五步,直到目的结点成为工作结点; 2、洪泛及选择洪泛算法 1)洪泛算法(Flooding) 属于静态路由算法 a)基本思想 把收到的每一个包,向除了该包到来的线路外的所有输出线路发送。

路由表插入流程分析

路由表 在内核中存在路由表 fib_table_hash 和路由缓存表 rt_hash_table。路由缓存表主要是为了加速路由的查找,每次路由查询都会先查找路由缓存,再查找路由表。这和 cache 是一个道理, 缓存存储最近使用过的路由项,容量小,查找快速;路由表存储所有路由项,容量大,查找慢。 首先,应该先了解路由表的意义,下面是 route 命令查看到的路由表: Destination Netmask Gateway Flags Interface Metric 169.254.0.0255.255.0.0*U eth01 192.168.123.0255.255.255.0*U eth01 default0.0.0.0192.168.123.254UG eth01 一条路由其实就是告知主机要到达一个目的地址,下一跳应该走哪里。比如发往 192.168.22.3 报文通过查路由表,会得到下一跳为 192.168.123.254,再将其发送出去。在路由 表项中,还有一个很重要的属性-scope,它代表了到目的网络的距离。 路由 scope 可取值:RT_SCOPE_UNIVERSE, RT_SCOPE_LINK, RT_SCOPE_HOST 在报文的转发过程中,显然是每次转发都要使到达目的网络的距离要越来越小或不变,否则根本到达不了目的网络。上面提到的 scope 很好的实现这个功能,在查找路由表中,表项的scope 一定是更小或相等的 scope(比如 RT_SCOPE_LINK,则表项 scope 只能为 RT_SCOPE_LINK 或RT_SCOPE_HOST)。 路由缓存 路由缓存用于加速路由的查找,当收到报文或发送报文时,首先会查询路由缓存,在内核中被组织成 hash 表,就是 rt_hash_table。 static struct rt_hash_bucket*rt_hash_table __read_mostly;[net\ipv4\route.c] 通过 ip_route_input()进行查询,首先是缓存操作时,通过[src_ip, dst_ip, iif,rt_genid]计算出 hash 值 hash=rt_hash(daddr,saddr,iif,rt_genid(net)); 此时 rt_hash_table[hash].chain 就是要操作的缓存表项的链表,比如遍历该链表for(rth=rt_hash_table[hash].chain;rth;rth=rth->u.dst.rt_next) 因此,在缓存中查找一个表项,首先计算出 hash 值,取出这组表项,然后遍历链表,找出指定的表项,这里需要完全匹配[src_ip, dst_ip, iif, tos, mark, net],实际上 struct rtable 中有专门的属性用于缓存的查找键值– struct flowi。 /*Cache lookup keys*/ struct flowi fl; 当找到表项后会更新表项的最后访问时间,并取出 dst dst_use(&rth->u.dst,jiffies); skb_dst_set(skb,&rth->u.dst); 路由缓存的创建 inet_init()->ip_init()->ip_rt_init() rt_hash_table=(struct rt_hash_bucket*) alloc_large_system_hash("IP route cache", sizeof(struct rt_hash_bucket), rhash_entries, (totalram_pages>=128*1024)?

顺序查找路由表

青岛农业大学理学与信息科学学院 计算机网络综合实习报告 题目 专业 学号 姓名 指导教师 日期

目录 一、课程设计任务和目的 (1) 二、设计要求 (1) 三、设计内容 (1) 3.1顺序查找路由表的工作原理 (1) 3.2课程设计程序运行结果与分析 (2) 四、改进和建议 (5) 五、总结 (5) 六、主要参考文献 (5) 附录: (6)

一、课程设计任务和目的 1.了解路由器更新的原理。 2.了解表示路由器的结构。 3.掌握路由器转发分组的算法。 二、设计要求 编写计算机程序,用(目的网络,掩码,下一跳)的结构表示路由表,以一个目的地址作为输入,顺序查找路由表,找出正确的下一跳,并输出。 三、设计内容 3.1顺序查找路由表的工作原理 使用子网划分后,路由表必须包含:目的地址,子网掩码,下一跳地址。路由器分组转发的算法如下: (1)从收到的数据包的首部提取目的IP地址D; (2)对路由器直接相连的网络逐个进行检查:用个网络的掩码和D逐位相“与”,看结果是否和相应的网络地址匹配。若匹配,则把分组直接交付,转发任务结束,否则就是间接交付执行(3)。 (3)若路由表中有目的地址为D特定主机路由,则把数据报传送给路由表中所指明的下一跳路由器否则执行(4)。 (4)对路由表的每一行,用其中的子网掩码和D逐位相“与”,其结果为N。若N 与该行的目的网络相匹配,则把数据报送给该行指明的下一跳路由器;否则执行(5)。 (5)若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器;否则执行(6)。 (6)报告转发分组出错,没有查找到路由。 简单来说,就是当来一个数据报时,抓

Windows路由表详解

Windows路由表详解 对于路由器的路由表,大部分网管朋友都很熟悉,但是对于windows的路由表,可能了解的人就相对少一些。今天我们就一起来看看windows路由表。 一、 windows路由表条目解释 1. 使用ipconfig /all查看网卡信息 2. 使用route print命令查看路由表信息,如下图: 3. 路由表信息解释

1)名词解释: Active Routes:活动的路由 Network destination :目的网段 Netmask:子网掩码 Gateway:网关,又称下一跳路由器。在发送IP数据包时,网关定义了针对特定的网络目的地址,数据包发送到的下一跳服务器。如果是本地计算机直接连接到的网络,网关通常是本地计算机对应的网络接口,但是此时接口必须和网关一致;如果是远程网络或默认路由,网关通常是本地计算机所连接到的网络上的某个服务器或路由器。 Interface:接口,接口定义了针对特定的网络目的地址,本地计算机用于发送数据包的网络接口。网关必须位于和接口相同的子网(默认网关除外),否则造成在使用此路由项时需调用其他路由项,从而可能会导致路由死锁。 Metric:跳数,跳数用于指出路由的成本,通常情况下代表到达目标地址所需要经过的跳跃数量,一个跳数代表经过一个路由器。跳数越低,代表路由成本越低,优先级越高。 Persistent Routes:手动配置的静态固化路由 2)第一条路由信息:缺省路由 当系统接收到一个目的地址不在路由表中的数据包时,系统会将该数据包通过 192.168.99.8这个接口发送到缺省网关192.168.99.1。 3)第二条路由信息:本地环路 当系统接收到一个发往目标网段127.0.0.0的数据包时,系统将接收发送给该网段的所有数据包。 4)第三条路由信息:直连网段的路由记录

用(目的网络掩码)的结构表示路由表,以一个目的地址作为输入,顺序查找路由表,找出正确的下一跳,并输出

计算机网络实习报告 设计题目编程查路由表 学生专业班级 学生姓名(学号) 指导教师 完成时间 2010年5月26日 实习(设计)地点信息楼139机房 2010 年5月26日

计算机网络与通信实习 一、编写计算机程序用(目的网络掩码下一跳)的结构表示路由表,以一个目的地址作为输入,顺序查找路由表,找出正确的下一跳,并输出。 二、原理概述 当IP子网中的一台主机发送IP分组给同一IP子网的另一台主机时,它将直接把IP分组送到网络上,对方就能收到。而要送给不同IP于网上的主机时,它要选择一个能到达目的子网上的路由器,把IP分组送给该路由器,由路由器负责把IP分组送到目的地。如果没有找到这样的路由器,主机就把IP分组送给一个称为“缺省网关(default gateway)”的路由器上。“缺省网关”是每台主机上的一个配置参数,它是接在同一个网络上的某个路由器端口的IP地址。 路由器转发IP分组时,只根据IP分组目的IP地址的网络号部分,选择合适的端口,把IP分组送出去。同主机一样,路由器也要判定端口所接的是否是目的子网,如果是,就直接把分组通过端口送到网络上,否则,也要选择下一个路由器来传送分组。路由器也有它的缺省网关,用来传送不知道往哪儿送的IP分组。这样,通过路由器把知道如何传送的IP分组正确转发出去,不知道的IP分组送给“缺省网关”路由器,这样一级级地传送,IP分组最终将送到目的地,送不到目的地的IP分组则被网络丢弃了。 三、设计方案 1、从收到的数据报的首部提取目的IP地址D 2、先判断是否为直接交付 3、若路由表中有目的地址为D的特定主机路由,则把数据报传送给路由表中所指明的下一 跳路由表 4、对路由表中的每一行,用其中的子网掩码和D逐位相“与”,其结果为N 5、若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器;否则执 行6 6、报告转发分组出错 四、程序编写 #include #include #include #include #include #include #include using namespace std; class Addr//地址类,4个分量 { public: Addr(string str);//构造函数 Addr(const Addr &address);//拷贝构造函数 //ostream& operator<< (ostream& out,const Addr &object);//向默认输出设备输出,暂不提供 //Addr& operator= (const Addr& object);//发现会造成内存泄漏,所以先取消掉他

计算机网络:路由表的生成

7.2 路由表的生成 我们看到,就向交换机的工作全依靠其内部的交换表一样,路由器的工作也完全仰仗其内存中的路由 表。 图7.5列出了路由表的构造。 图 7.5 路由表的构造 路由表主要由六个字段组成,能够前往的网络和如何前往那些网络。路由表的每一行,表示路由器了解的某个网络的信息。网络地址字段列出本路由器了解的网络的网络地址。端口字段标明前往某网络的数据报该从哪个端口转发。下一跳字段是在本路由器无法直接到达的网络,下一跳的中继路由器的IP地址。距离字段表明到达某网络有多远。在RIP路由协议中需要穿越的路由器数量。协议字段表示本行路由记录是如何得到的。本例中,C表示是手工配置,RIP表示本行信息是通过RIP协议从其它路由器学习得到的。定时字段表示动态学习的路由项在路由表中已经多久没有刷新了。如果一个路由项长时间没有被刷新,该 路由项就被认为是失效的,需要从路由表中删除。 我们注意到,前往160.4.1.64、200.12.105.0、178.33.0.0网络,下一跳都指向160.4.1.34路由器。其中178.33.0.0网络最远,需要12跳。路由表不关心下一跳路由器将沿什么路径把数据报转发到目标网络,它只要把数据报转发给下一跳路由器就完成任务了。 路由表是路由器工作的基础。路由表中的表项有两种方法获得: 静态配置 动态学习 路由表中的表项可以用手工静态配置生成。将电脑与路由器的console端口连接,使用电脑上的超级终端软件或路由器提供的配置软件就可以对路由器进行配置。 手工配置路由表需要大量的工作。动态学习路由表是最为行之有效的方法。一般情况下,我们都是手工配置路由表中直接连接的网段的表项,而间接连接的网络的表项使用路由器的动态学习功能来获得。

路由表相关的概念及路由匹配原则

1、查看路由表信息的命令为ZXR10#show ip route,显示实例如下: ZXR10#show ip route IPv4 Routing Table: Dest Mask Gw Interface Owner pri metric 10.26.32.0 255.255.255.0 10.26.245.5 fei_1/1 bgp 200 0 10.26.33.253 255.255.255.255 10.26.245.5 fei_1/1 ospf 110 14 10.26.33.254 255.255.255.255 10.26.245.5 fei_1/1 ospf 110 13 10.26.36.0 255.255.255.248 10.26.36.2 gei_5/2.1 direct 0 0 10.26.36.2 255.255.255.255 10.26.36.2 gei_5/2.1 address 0 0 10.26.36.24 255.255.255.248 10.26.36.26 gei_5/2.4 direct 0 0 10.26.245.4 55.255.255.252 10.26.245.6 fei_1/1 direct 0 0 10.26.245.6 255.255.255.255 10.26.245.6 fei_1/1 address 0 0 路由表中通常包含以下信息: ● Dest:目的逻辑网络或子网地址。 ● Mask:目的逻辑网络或子网的掩码。 ● Gw:与之相邻的路由器的端口地址,即该路由的下一跳IP地址。 ● Interface:学习到该路由条目的接口,也是数据包离开路由器去往目的地将经过的接口。 ● Owner:路由来源,表示该路由信息是怎样学习到的。 ● Pri:路由的管理距离,即优先级,决定了来自不同路由来源的路由信息的优先权。 ● Metric:度量值,表示每条可能路由的代价,度量值最小的路由就是最佳路由。Metric 只有当同一种动态路由协议,发现多条到达同一目的网段路由的时候,才有比较性。不同路由协议的Metric不具有可比性。 例如,实例中加粗显示的一行是路由表中的一条路由信息,其中:

距离向量算法更新路由表3

计算机网络实习报告 论文题目距离向量算法更新路由表 学生专业班级通信07级2班 学生姓名(学号) 指导教师 完成时间 2010年05月22日 实习(设计)地点信息楼139(112)机房 2010 年 05 月 22 日

距离向量算法更新路由表 一.实验目的 1.认识并掌握路由器结构组成及路由建立与更新的原理 2.理解、掌握和利用距离向量算法的应用。 3. 能够用距离向量算法建立一个路由表并根据相邻路由器发来的数据进行更新。 5.所实现的路由器模拟Internet上的IP路由器,它能确定网络的最短路由,并在其上传输分组 二.原理概述 距离向量路由算法被距离向量协议作为一个算法,它告诉在网络中每个节点的最远和最近距离。在距离表中的这个信息是根据临近接点信息的改变而时时更新的。表中数据的量和在网络中的所有的接点是等同的。每个数据包括传送数据包到每个在网上的目的地的路径和距离/或时间在那个路径上来传输。 这个表中的列代表直接和它相连的“邻居”路由器相连,行代表在网络中的所有目的地。在距离向量路由算法中,相邻路由器之间周期性(一般为3分钟)地相互交换各自的路由表。当网络拓扑结构发生变化时,路由器之间也将及时地相互通知有关变更信息。它是一种动态路由选择算法。每个路由器都定期与其相邻的所有路由器交换路由表,据此更新它们自己的路由表。 所有路由器只与其相邻路由器交换信息,在发来为RIP报文情况下更新其路由表的具体步骤为: 1.对地址为X的相邻路由器发来的RIP报文,先修改报文中的所有项目,把“下跳”字段中地址均改为X,把所有“距离”字段的值加1.每一个项目都有三项数据,即:到目的网络N,距离是d,下一条路由器是X 2.对修改后的RIP报文中每个项目,进行以下步骤: 若原来路由表中没有目的网络N,则把该项目添加到路由表中。 否则若吓一跳地址是X,把收到的项目替还原路由表中的项目 否则若收到的项目中的距离d小于路由表中的距离,则进行更新。 否则什么也不做。 3.若三分钟还没有收到相邻路由器的更新路由表,则把此相邻路由器记为不可达的路由器,即把距离置为16.(本实验将其定义为6) 4.返回。 三.设计方案 路由表的建立和更新 假设建立七个路由器,其中三个A,B和C。路由器A的两个网络接口E0和S0 分别连接在 10.1.0.0和10.2.0.0网段上;路由器B的两个网络接口S0和S1 分别连接在 10.2.0.0和10.3.0.0网段上;路由器C的两个网络接口S0和E0 分别连接在 10.3.0.0和10.4.0.0网段上; 如上面各路由表的前两行所示,通过路由表的网络接口到与之直接相连的网 络的网络连接,其向量距离设置为0。这即是最初的路由表。

路由器查表课程设计报告

滁州学院 课程设计报告 课程名称:计算机网络 设计题目:路由表查找过程模拟 院部:计算机及信息工程学院 专业:网络工程(无线传感器网络方向) 组别:第二组 起止日期:2012年12月29日~2012年12月30日 指导教师:张老师

计算机及信息工程学院二○一二年制

课程设计任务书

目录 1引言 (1) 2需求分析 (2) 2.1设计题目 (2) 2.2设计目的 (2) 2.3设计主要内容及要求 (2) 2.3.1 设计内容 (2) 2.3.2设计要求 (2) 2.3.3使用环境及语言 (3) 3概要设计 (3) 3.1基本功能描述 (3) 3.1.1路由表的结构 (3) 3.1.2路由表的作用 (4) 3.1.3路由表中路由的来源 (4) 3.2IP路由选择 (4) 3.2.1通过RIP(路由信息协议)来实现路由选择 (4) 3.2.2通过OSPF(开放最短路径优先)来实现路由选择 (6) 3.2.3 Dijkstra算法 (7) 4详细设计 (8) 4.1各模块的伪码算法 (8) 4.1.1RIP (8) 4.1.2 OSPF (12) 5调试及结果说明 (15) 5.1RIP的调试结果 (15) 5.2OSPF的调试结果 (16) 6.课程设计总结及体会 (19) 参考文献 (19) 致谢 (20) 附录 (21)

1引言 随着计算机信息技术的发展,大规模的互联网逐渐流行起来,也为路由器的发展提供了良好的基础和平台。作为不同网络之间互相连接的枢纽,路由器系统构成了基于TCP/IP 的国际互联网络Internet 的主体脉络。然而如何准确的发送并接受信息,则需要通过路由表的准确查找,路由表存储着指向特定网络地址的路径(在有些情况下,还记录有路径的路由度量值)。通过路由表查找过程的设计及模拟可以更好的体现路由的选择,帮助我们准确的理解路由的选择过程。 2需求分析 2.1设计题目 路由器查表过程模拟 2.2设计目的 该程序主要是用来模拟路由器中路由查找的过程。当主机向目的网络发送一个数据包时,对每一个IP包,当发送到一个网络拓扑中的时候,可以分别使用RIP或OSPF协议,来决定数据包通过互联网络的路径。通过模拟算法的实现,我们可以模拟一个简单的路由查找过程,进而找出最优路径,实现路由的查找。 2.3设计主要内容及要求 2.3.1 设计内容 1.rip:距离向量路由协议,距离向量路由协议的特征是它在进行路由更新时,会发送路由表的全部或一部分给邻居路由器(这台邻居路由器也必须运行rip协议),当路由信息通过这种方式扩散到整个自治系统时,每个路由器会根据Dijkstra算法计算出到达每个网段的最优路径,rip选择到达某个网络的最优路径根据跳数。数据包经过一个路由器就是一跳。 2. ospf:路由器的路由选择是基于链路状态,通过Dijkastra算法建立起来最短路径树,用该树跟踪系统中的每个目标的最短路径。最后再通过计算域间路由、自治系统外部路由确定完整的路由表。及此同时,OSPF动态监视网络状态,一旦发生变化则迅速扩散达到对网络拓扑的快速聚合,从而确定出新的网络路由表。因此,需要把自治系统划分为多个域,每个域内部维持本域一张唯一的拓扑结构图,且各域根据自己的拓扑图各自计算路由,域边界路由器把各个域的内部路由总结后在域间扩散。这样,当网络中的某条链路状态发生变化

IP路由表分析

CCNA考点精析---IP路由表分析 当frame到达路由器的接口后,路由器检查frame中的目标地址字段,如果目标地址为路由器接口的地址或者广播地址的时候,路由器把packet从frame中剥离出来,传递给network layer,然后packet中的目标地址将被检查,接下来还要检查protocol字段,最后再发送给合适的进程,如果packet是可路由的,路由器会查找自己路由表中寻找相应 的路由条目,路由条目至少包含两个要素: 1、目标地址,这个地址是路由器必须能够到达的地址; 2、到达目标地址的指针,这个指针也就是我们平时在路由表中看到的Via.或者是平 时听说的next-hop(下一跳) 路由器根据packet中的目标地址字段,在路由表中执行查询,查询的精确程度按如下顺序 递减: 1、主机地址 2、子网地址 3、汇总网络号 4、主类网络号 5、超网号(super net) 6、默认路由 如果在执行完所有的表查询后,还没有找到匹配的条目,则丢弃packet,并回送一个(Destinnation Unreachable)ICMP不可达的报文给发送方在CISCO路由器上要查看路由表,可以使用特权命令:show ip route R1#sh ip route Codes: C - connected, S - static, I - IGRP, R - RIP, M - mobile, B - BGP D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2 E1 - OSPF external type 1, E2 - OSPF external type 2, E - EGP i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2 ia - IS-IS inter area, * - candidate default, U - per-user static route o - ODR, P - periodic downloaded static route Gateway of last resort is not set C 192.168.123.0/24 is directly connected, FastEthernet0/0 1.0.0.0/24 is subnetted, 3 subnets C 1.1.1.0 is directly connected, Loopback0 C 1.1.2.0 is directly connected, Loopback1 C 1.1.3.0 is directly connected, Loopback2 C 192.168.14.0/24 is directly connected, Serial1/2

从ROUTE命令学路由表配置

从R O U T E命令学路由表 配置 This model paper was revised by the Standardization Office on December 10, 2020

时间能够以这样的方式过去令人感到惊异。人们倾向于认为计算机技术属于高科技,但是,TCP/IP协议在过去的三十年里以各种形式出现,无所不在。因此,TCP/IP协议有时间变得真正成熟起来,并且更稳定和更可靠。然而,当涉及到计算机的时候,事情就没有那样简单了。当路由包通过网络的时候,有时候会出现错误。在这种情况下,熟悉Windows 路由表是很有帮助的。路由表能够决定来自有问题的机器的数据包的去向。在本文中,我将向你介绍如何查看Windows路由表以及如何让Windows路由表中包含的数据有意义。 查看Windows路由表 路由表是Windows的TCP/IP协议栈的一个重要的部分。但是,路由表不是Windows 操作系统向普通用户显示的东西。如果你要看到这个路由表,你必须要打开一个命令提示符对话框,然后输入“ROUTE PRINT”命令。然后,你将看到一个类似于图A中显示的图形。 图A:这是Windows路由表的外观 在我深入讨论这个路由表之前,我建议你在命令提示符对话框中输入另一个命令。这个命令是:IPCONFIG /ALL 我建议你使用IPCONFIG /ALL命令的理由是因为这个命令能够显示TCP/IP协议在机器中实际上是如何设置的。的确,你可以在网卡属性页认真查看TCP/IP协议,但是,如果你从IPCONFIG得到这个信息,这个信息会更可靠。在过去的几年里,我曾经遇到过这样一些例子,IPCONFIG报告的信息与机器中的TCP/IP协议设置屏幕中显示的信息完全不一样。这种事情不常见,但是,如果正好出现这种错误,你就会遇到这种不匹配的情况。

路由器中的路由表是怎样得出的

路由器中的路由表是怎样得出的? 路由器中的路由表有直连路由,是本机算出来的,有手工指定的静态路由,同时还有起的ergip、ospf、bgp等用户起的动态路由进程学习到的,相邻路由能够起邻居,相互之间学习到发布的路由指令。? 所谓路由表,指的是路由器或者其他互联网网络设备上存储的表,该表中存有到达特定网络终端的路径,在某些情况下,还有一些与这些路径相关的度量。 在计算机网络中,路由表或称路由择域信息库(RIB)是一个存储在路由器或者联网计算机中的电子表格(文件)或类数据库。路由表存储着指向特定网络地址的路径(在有些情况下,还记录有路径的路由度量值)。路由表中含有网络周边的拓扑信息。路由表建立的主要目标是为了实现路由协议和静态路由选择。 在现代路由器构造中,路由表不直接参与数据包的传输,而是用于生成一个小型指向表,这个指向表仅仅包含由路由算法选择的数据包传输优先路径,这个表格通常为了优化硬件存储和查找而被压缩或提前编译。 路由器的主要工作就是为经过路由器的每个数据包寻找一条最佳的传输路径,并将该数据有效地传送到目的站点。由此可见,选择最佳路径的策略即路由算法是路由器的关键所

在。为了完成这项工作,在路由器中保存着各种传输路径的相关数据——路由表(Routing Table),供路由选择时使用,表中包含的信息决定了数据转发的策略。打个比方,路由表就像我们平时使用的地图一样,标识着各种路线,路由表中保存着子网的标志信息、网上路由器的个数和下一个路由器的名字等内容。路由表可以是由系统管理员固定设置好的,也可以由系统动态修改,可以由路由器自动调整,也可以由主机控制。 1.静态路由表 由系统管理员事先设置好固定的路由表称之为静态(static)路由表,一般是在系统安装时就根据网络的配置情况预先设定的,它不会随未来网络结构的改变而改变。2.动态路由表 动态(Dynamic)路由表是路由器根据网络系统的运行情况而自动调整的路由表。路由器根据路由选择协议(Routing Protocol)提供的功能,自动学习和记忆网络运行情况,在需要时自动计算数据传输的最佳路径。 路由器通常依靠所建立及维护的路由表来决定如何转发。路由表能力是指路由表内所容纳路由表项数量的极限。由于Internet上执行BGP协议的路由器通常拥有数十万条路由表项,所以该项目也是路由器能力的重要体现。

dos命令下查看路由表

tracert dos命令下查看路由表 2010-03-28 16:44 很多玩游戏的都用过网络加速器吧。尤其是教育网的,估计大家对类似于统一加速器这样的解决网络互联互通的软件。我们怎么知道加速器是否真正起作用了。出来查看游戏的延迟,打开网页的快慢外当然还有个方法——查看路由表。很多加速器只说了提供多少多少的带宽。其实提供路由线路的多少也是一个影响加速自量的因素。 转帖了方法如下: 在dos下面输入 route print 就可以查看路由表如何读懂路由表 如何读懂路由表 源 码:-------------------------------------------------------------------------------- Active Routes: Network Destination Netmask Gateway Interface Metric 0.0.0.0 0.0.0.0 192.168.123.254 192.168.123 .88 1 0.0.0.0 0.0.0.0 192.168.123.254 192.168.123 .68 1 127.0.0.0 255.0.0.0 127.0.0.1 127.0.0.1 1 192.168.123.0 255.255.255.0 192.168.123.68 192.168. 123.68 1 192.168.123.0 255.255.255.0 192.168.123.88 192.168. 123.88 1 192.168.123.68 255.255.255.255 127.0.0.1 127.0.0.1 1 192.168.123.88 255.255.255.255 127.0.0.1 127.0.0.1 1 192.168.123.255 255.255.255.255 192.168.123.68 192.168.12 3.68 1 192.168.123.255 255.255.255.255 192.168.123.88 192.168.12 3.88 1 224.0.0.0 224.0.0.0 192.168.123.68 192.168.12 3.68 1 224.0.0.0 224.0.0.0 192.168.123.88 192.168. 123.88 1 255.255.255.255 255.255.255.255 192.168.123.68 192.16 8.123.68 1

路由表的主要参数(精)

路由表的主要参数 1) 路由表提供了到达不同目标网络的表项,所以转发分组中的目标地址会通过 掩码运算得到分组目标地址所在的目标网络号,使用这个运算出来的网络号在路由表中查找表中目标网络和分组目标网络匹配的表项。所以路由表中包括两项:子网掩码和目标网络(使用CIDR记法只有一项)。 2) 路由表为路由器转发分组提供了路径选择的依据,由于网络层提供了面向非 连接的服务,所以路由表不会存在从分组源地址到分组目的地址的完整路径信息。路由表仅仅提供了经由本路由器接口(Interface 可以是逻辑子接口)和到达目标网络要经过的下一个路由器接口逻辑地址的信息(下一跳,Next Hop)。所以路由表中还包括两项:接口和下一跳地址。 3) 路由表中会出现到达同一个目标网络,但是经过不同的下一跳地址,这种多 路径选择是由计算机网络设计初衷决定的,也是选择分组交换通信的必然结果。条条大路通罗马的思路在路由表中最直接的体现就是到达同一个目标网络可以经过不同路径,但是经过每条路径的开销(Cost)是不一样的,在路由表中把这种开销称为度量值(Metric),度量值低的路径会被优先选择。度量值可能是一个单一参数的概念(如日常生活中从一个出发地到另外一个目的地经过的收费站数量,收费站数量少的作为优先的出行方式);度量值也可能是多个参数综合权衡的结果(如日常生活中从一个出发地到另外一个目的地选择的交通工具、距离的远近、交通安全性、费用情况及时间消耗等多个参数,来综合评估出一个度量值,再按照度量值低的选择合适的出行方式)。 所以路由表中还包括一项:度量值。 4) 路由表中的表项可以通过三种方式进行添加:直接连接、静态添加和动态添 加。直接连接代表着路由器端口所配IP地址所在的目标网络;静态添加是由网络管理人员手动添加的路由表项;动态添加是指使用动态路由选择协议(如RIP协议、OSPF协议)自动学习到的路由表项。所以路由表中还包括一项:表项类型。

查看Windows路由表

时间能够以这样的方式过去令人感到惊异。人们倾向于认为计算机技术属于高科技,但是,TCP/IP协议在过去的三十年里以各种形式出现,无所不在。因此,TCP/IP 协议有时间变得真正成熟起来,并且更稳定和更可靠。然而,当涉及到计算机的时候,事情就没有那样简单了。当路由包通过网络的时候,有时候会出现错误。在这种情况下,熟悉Windows路由表是很有帮助的。路由表能够决定来自有问题的机器的数据包的去向。在本文中,我将向你介绍如何查看Windows路由表以及如何让Windows路由表中包含的数据有意义。 查看Windows路由表 路由表是Windows的TCP/IP协议栈的一个重要的部分。但是,路由表不是Windows操作系统向普通用户显示的东西。如果你要看到这个路由表,你必须要打开一个命令提示符对话框,然后输入“ROUTE PRINT”命令。然后,你将看到一个类似于图A中显示的图形。 图A:这是Windows路由表的外观 在我深入讨论这个路由表之前,我建议你在命令提示符对话框中输入另一个命令。这个命令是:IPCONFIG /ALL 我建议你使用IPCONFIG /ALL命令的理由是因为这个命令能够显示TCP/IP 协议在机器中实际上是如何设置的。的确,你可以在网卡属性页认真查看TCP/IP 协议,但是,如果你从IPCONFIG得到这个信息,这个信息会更可靠。在过去的几年里,我曾经遇到过这样一些例子,IPCONFIG报告的信息与机器中的TCP/IP 协议设置屏幕中显示的信息完全不一样。这种事情不常见,但是,如果正好出现这种错误,你就会遇到这种不匹配的情况。坦率地说,键入到TCP/IP属性页中的信息反映了你想要Windows为选择的网络设置的TCP/IP协议。IPCONFIG提供的信息显示了Windows实际上设置的协议。

路由表插入流程分析

路由表 在内核中存在路由表fib_table_hash和路由缓存表rt_hash_table。路由缓存表主要是为了加速路由的查找,每次路由查询都会先查找路由缓存,再查找路由表。这和cache是一个道理,缓存存储最近使用过的路由项,容量小,查找快速;路由表存储所有路由项,容量大,查找慢。首先,应该先了解路由表的意义,下面是route命令查看到的路由表: Destination Netmask Gateway Flags Interface Metric 169.254.0.0255.255.0.0*U eth01 192.168.123.0255.255.255.0*U eth01 default0.0.0.0192.168.123.254UG eth01一条路由其实就是告知主机要到达一个目的地址,下一跳应该走哪里。比如发往 192.168.22.3报文通过查路由表,会得到下一跳为192.168.123.254,再将其发送出去。在路由表项中,还有一个很重要的属性-scope,它代表了到目的网络的距离。 路由scope可取值:RT_SCOPE_UNIVERSE, RT_SCOPE_LINK, RT_SCOPE_HOST 在报文的转发过程中,显然是每次转发都要使到达目的网络的距离要越来越小或不变,否则根本到达不了目的网络。上面提到的scope很好的实现这个功能,在查找路由表中,表项的scope一定是更小或相等的scope(比如RT_SCOPE_LINK,则表项scope只能为RT_SCOPE_LINK或RT_SCOPE_HOST)。 路由缓存 路由缓存用于加速路由的查找,当收到报文或发送报文时,首先会查询路由缓存,在内核中被组织成hash表,就是rt_hash_table。 static struct rt_hash_bucket *rt_hash_table __read_mostly; [net\ipv4\route.c] 通过ip_route_input()进行查询,首先是缓存操作时,通过[src_ip, dst_ip, iif,rt_genid]计算出hash 值 hash = rt_hash(daddr, saddr, iif, rt_genid(net)); 此时rt_hash_table[hash].chain就是要操作的缓存表项的链表,比如遍历该链表for (rth = rt_hash_table[hash].chain; rth; rth = rth->u.dst.rt_next) 因此,在缓存中查找一个表项,首先计算出hash值,取出这组表项,然后遍历链表,找出指定的表项,这里需要完全匹配[src_ip, dst_ip, iif, tos, mark, net],实际上struct rtable中有专门的属性用于缓存的查找键值– struct flowi。 /* Cache lookup keys */ struct flowi fl; 当找到表项后会更新表项的最后访问时间,并取出dst dst_use(&rth->u.dst, jiffies); skb_dst_set(skb, &rth->u.dst); 路由缓存的创建 inet_init() -> ip_init() -> ip_rt_init() rt_hash_table = (struct rt_hash_bucket *) alloc_large_system_hash("IP route cache", sizeof(struct rt_hash_bucket), rhash_entries, (totalram_pages >= 128 * 1024) ? 15 : 17,

相关文档
最新文档