收藏 分销(赏)

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

上传人:w****g 文档编号:4134689 上传时间:2024-07-31 格式:DOC 页数:7 大小:225.50KB 下载积分:6 金币
下载 相关 举报
路由分组转发算法的模拟C.doc_第1页
第1页 / 共7页
路由分组转发算法的模拟C.doc_第2页
第2页 / 共7页


点击查看更多>>
资源描述
计算机网络作业 教材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 <iostream> using namespace std; class A //定义一个基类A { public: int part1; int part2; int part3; int part4; }; A subnet_ID; //用于存储子网号 class B:public A //定义B类用于存储输入的点分十进制IP地址 { public: void display(); void input(); }D; //D用于存储输入的目的主机IP地址 void B::input() //定义input函数,用于输入参数,分四部分输入,每部分以回国结束 { cin>>part1; cin>>part2; cin>>part3; cin>>part4; } void B::display() //以点分十进制形式显示IP地址,子网掩码 { cout<<part1<<"."; cout<<part2<<"."; cout<<part3<<"."; cout<<part4<<endl; } class C //定义C类用于设定路由表中和项 { public: void setDEST(int p1,int p2,int p3,int p4); void setSUBNET_MASK(int a1,int a2,int a3,int a4); A DEST; //DEST为目的主机地址,类型为A A SUBNET_MASK; //子网掩码,类型为A }; void C::setDEST(int p1,int p2,int p3,int p4) { DEST.part1=p1; DEST.part2=p2; DEST.part3=p3; DEST.part4=p4; } void C::setSUBNET_MASK(int a1,int a2,int a3,int a4) { SUBNET_MASK.part1=a1; SUBNET_MASK.part2=a2; SUBNET_MASK.part3=a3; SUBNET_MASK.part4=a4; } void AND(B IP,C subnet_mask) //AND函数用于将IP地址和子网掩码遂位相“与”等到相应的子网号 { A SUB=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; } int main() { C c[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:"<<endl; D.input(); cout<<"开始路由选择!"<<endl; cout<<"目的主机IP地址D为:"; D.display(); int flag=1; //定义一个标志,用于差别是否已经找到了相应的路由表项 for(int i=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!"<<endl; flag=0; break; } if(i==2) //若对应于普通路由表项 { cout<<"找到相应路由表项,数据分组发送到路由器R1!"<<endl; flag=0; break; } } } if(flag) //未找到完全相符的路由表项则使用默认路由 { cout<<"使用默认路由,数据分组发送到路由器R3!"<<endl; } return 0; } 运行程序: 1、 输入目的主机地址为145.13.3.10(表中有对就的特定主机路由表项),结果如下图: 2、 输入目的主机地址为145.13.21.23,该主机是图中划分了子网的B类网络中的一台主机,据算法可知数据分组应传送到路由器R1,结果如下图,可见与预计结果相符。 3、 输入其它不是图中B类网络中的任一主机地址时由算法知应该使用默认路由,演示时输入122.204.196.218,运行结果如下,可见与预计结果相符。 若路由表中没有配置默认路由,则前面所列的路由表中就删去第一行,并将上述程序代码加粗下划线部分修改成如下内容: if(flag) //未找到完全相符的路由表项,而又没有默认路由则报告出错 { cout<<"出错!未找到完全相符的路由表项或默认路由!"<<endl; } 此时若再输入步骤(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。
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服