路由分组转发算法的模拟C++.doc

上传人:b****2 文档编号:1272594 上传时间:2022-10-19 格式:DOC 页数:8 大小:351KB
下载 相关 举报
路由分组转发算法的模拟C++.doc_第1页
第1页 / 共8页
路由分组转发算法的模拟C++.doc_第2页
第2页 / 共8页
路由分组转发算法的模拟C++.doc_第3页
第3页 / 共8页
路由分组转发算法的模拟C++.doc_第4页
第4页 / 共8页
路由分组转发算法的模拟C++.doc_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

路由分组转发算法的模拟C++.doc

《路由分组转发算法的模拟C++.doc》由会员分享,可在线阅读,更多相关《路由分组转发算法的模拟C++.doc(8页珍藏版)》请在冰豆网上搜索。

路由分组转发算法的模拟C++.doc

湖北大学2009级物理学

计算机网络作业

教材P128所述的分组转发算法如下:

(1)从数据报的首部提取目的主机的IP地址D,得出目的网络地址为N。

(2)若网络N与此路由器直接相连,则把数据报直接交付目的主机D;否则是间接交付,执行(3)。

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

(4)若路由表中有到达网络N的路由,则把数据报传送给路由表指明的下一跳路由器;否则,执行(5)。

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

(6)报告转发分组出错。

将该算法加以修改便可用于如下图所示(P130)划分子网的B类网络。

该B类网络被划分为三个子网,它们分别为145.13.3.0,145.13.7.0和145.13.21.0。

可知它们的子网掩码均为255.255.255.0。

修改后的算法如下:

(1)从收到的分组的首部提取目的IP地址D。

(2)先用各网络的子网掩码和D逐比特相“与”,看是否和相应的网络地址匹配。

若匹配,则将分组直接交付。

否则就是间接交付,执行(3)。

(3)若路由表中有目的地址为D的特定主机路由,则将分组传送给指明的下一跳路由器;否则,执行(4)。

(4)对路由表中的每一行的子网掩码和D逐比特相“与”,若其结果与该行的目的网络地址匹配,则将分组传送给该行指明的下一跳路由器;否则,执行(5)。

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

(6)报告转发分组出错。

用流程图表示上述算法如下:

开始

提取目的IP地址D

用子网掩码与D逐位相“与”

直接交付

与相应网络地址匹配?

传送给指明的下一路由器

路由表中第行子网掩码与D逐位相“与”

传送给该行指明的路由器

路由表中有目的地址为D的特定主机路由?

结束

结果与该行目的地址匹配?

路由表中有默认路由?

传送给指明的默认路由器

报告分组发送出错

用C++实现该算法,考虑传送到路由器R2处的IP数据报分组,经过路由选择决定如何投递,编制程序模拟IP数据报分组转发过程。

在程序中,以手动方式输入数据分组的目的IP地址D来模拟上述算法中的步骤

(1)(D以点分十进制形式输入,在程序中分四部分输入,每部分以回车结尾)。

设R2的路由表中,目的IP地址145.13.3.10有对应的特定主机路由,该特定路由指明发送到145.13.3.10的数据分组传送到路由器R3。

同时又设R2的路由表有默认路由,默认路由的下一跳也是R3。

而对于发送到网络145.13.0.0的数据分组均被直接传送到路由器R1。

即路由器R2的路由表如下图所示:

目的主机所在的网络

子网掩码

下一跳地址

0.0.0.0(默认)

255.255.0.0

R3

145.13.3.10(特定主机)

255.255.255.255

R3

145.13.0.0

255.255.0.0

R1

……

……

……

具体程序代码如下:

#include

usingnamespacestd;

classA//定义一个基类A

{

public:

intpart1;

intpart2;

intpart3;

intpart4;

};

Asubnet_ID;//用于存储子网号

classB:

publicA//定义B类用于存储输入的点分十进制IP地址

{

public:

voiddisplay();

voidinput();

}D;//D用于存储输入的目的主机IP地址

voidB:

:

input()//定义input函数,用于输入参数,分四部分输入,每部分以回国结束

{

cin>>part1;

cin>>part2;

cin>>part3;

cin>>part4;

}

voidB:

:

display()//以点分十进制形式显示IP地址,子网掩码

{

cout<

cout<

cout<

cout<

}

classC//定义C类用于设定路由表中和项

{

public:

voidsetDEST(intp1,intp2,intp3,intp4);

voidsetSUBNET_MASK(inta1,inta2,inta3,inta4);

ADEST;//DEST为目的主机地址,类型为A

ASUBNET_MASK;//子网掩码,类型为A

};

voidC:

:

setDEST(intp1,intp2,intp3,intp4)

{

DEST.part1=p1;

DEST.part2=p2;

DEST.part3=p3;

DEST.part4=p4;

}

voidC:

:

setSUBNET_MASK(inta1,inta2,inta3,inta4)

{

SUBNET_MASK.part1=a1;

SUBNET_MASK.part2=a2;

SUBNET_MASK.part3=a3;

SUBNET_MASK.part4=a4;

}

voidAND(BIP,Csubnet_mask)//AND函数用于将IP地址和子网掩码遂位相“与”等到相应的子网号

{

ASUB=subnet_mask.SUBNET_MASK;

subnet_ID.part1=IP.part1&SUB.part1;

subnet_ID.part2=IP.part2&SUB.part2;

subnet_ID.part3=IP.part3&SUB.part3;

subnet_ID.part4=IP.part4&SUB.part4;

}

intmain()

{

Cc[3];

c[0].setDEST(0,0,0,0);//为相应的路由表项赋值

c[0].setSUBNET_MASK(255,255,0,0);

c[1].setDEST(145,13,3,10);

c[1].setSUBNET_MASK(255,255,255,255);

c[2].setDEST(145,13,0,0);

c[2].setSUBNET_MASK(255,255,0,0);

cout<<"输入目的主机IP地址D:

"<

D.input();

cout<<"开始路由选择!

"<

cout<<"目的主机IP地址D为:

";

D.display();

intflag=1;//定义一个标志,用于差别是否已经找到了相应的路由表项

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

{

AND(D,c[i]);

if(subnet_ID.part1==c[i].DEST.part1&&subnet_ID.part2==c[i].DEST.part2&&subnet_ID.part3==c[i].DEST.part3&&subnet_ID.part4==c[i].DEST.part4)

{

if(i==1)//若对应于特定主机路由表项

{

cout<<"有相应的特定主机路由表项,数据分组发送到路由器R3!

"<

flag=0;

break;

}

if(i==2)//若对应于普通路由表项

{

cout<<"找到相应路由表项,数据分组发送到路由器R1!

"<

flag=0;

break;

}

}

}

if(flag)//未找到完全相符的路由表项则使用默认路由

{

cout<<"使用默认路由,数据分组发送到路由器R3!

"<

}

return0;

}

运行程序:

1、输入目的主机地址为145.13.3.10(表中有对就的特定主机路由表项),结果如下图:

2、输入目的主机地址为145.13.21.23,该主机是图中划分了子网的B类网络中的一台主机,据算法可知数据分组应传送到路由器R1,结果如下图,可见与预计结果相符。

3、输入其它不是图中B类网络中的任一主机地址时由算法知应该使用默认路由,演示时输入122.204.196.218,运行结果如下,可见与预计结果相符。

若路由表中没有配置默认路由,则前面所列的路由表中就删去第一行,并将上述程序代码加粗下划线部分修改成如下内容:

if(flag)//未找到完全相符的路由表项,而又没有默认路由则报告出错

{

cout<<"出错!

未找到完全相符的路由表项或默认路由!

"<

}

此时若再输入步骤(3)中的主机IP地址时则会报告出错,与算法中第六步相对应。

实际运行如果见下图:

对于发送到路由器R1处的数据分组,其算法与前面所述的相似,现在只将R1的路由表列出如下:

目的主机所在的网络

子网掩码

下一跳地址

145.13.3.0

255.255.255.0

RA

145.13.7.0

255.255.255.0

RB

145.13.21.0

255.255.255.0

RC

……

……

……

说明:

设RA与子网145.13.3.0直接相连,设RB与子网145.13.7.0直接相连,设RC与子网145.13.21.0直接相连。

若有主机直接与路由器R1相连,刚其对应的下一跳地址将是直接投递。

另外,对于特定主机路由,其对应的子网掩码为全1码,即255.255.255.255。

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

当前位置:首页 > 法律文书 > 辩护词

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1