文档介绍:集团标准化工作小组 [Q8QX9QT-X8QQB8Q8-NQ8QJ8-M8QMN]
路由分组转发算法的模拟C
计算机网络作业
教材P128所述的分组转发算法如下:
从数据报的首部提取目的主机的 IP 地址 D 集团标准化工作小组 [Q8QX9QT-X8QQB8Q8-NQ8QJ8-M8QMN]
路由分组转发算法的模拟C
计算机网络作业
教材P128所述的分组转发算法如下:
从数据报的首部提取目的主机的 IP 地址 D, 得出目的网络地址为 N。
若网络 N 与此路由器直接相连,则把数据报直接交付目的主机 D;否则是间接交付,执行(3)。
若路由表中有目的地址为 D 的特定主机路由,则把数据报传送给路由表中所指明的下一跳路由器;否则,执行(4)。
若路由表中有到达网络 N 的路由,则把数据报传送给路由表指明的下一跳路由器;否则,执行(5)。
若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器;否则,执行(6)。
报告转发分组出错。
将该算法加以修改便可用于如下图所示(P130)划分子网的B类网络。
修改后的算法如下:
从收到的分组的首部提取目的 IP 地址 D。
先用各网络的子网掩码和D逐比特相“与”,看是否和相应的网络地址匹配。若匹配,则将分组直接交付。否则就是间接交付,执行(3)。
若路由表中有目的地址为 D的特定主机路由,则将分组传送给指明的下一跳路由器;否则,执行(4)。
对路由表中的每一行的子网掩码和 D逐比特相“与”,若其结果与该行的目的网络地址匹配,则将分组传送给该行指明的下一跳路由器;否则,执行(5)。
若路由表中有一个默认路由,则将分组传送给路由表中所指明的默认路由器;否则,执行(6)。
报告转发分组出错。
用流程图表示上述算法如下:
否
否
是
是
开始
提取目的IP地址D
用子网掩码与D逐位相“与”
直接交付
与相应网络地址匹配
传送给指明的下一路由器
路由表中第行子网掩码与D逐位相“与”
传送给该行指明的路由器
路由表中有目的地址为 D 的特定主机路由
结束
结果与该行目的地址匹配
路由表中有 默认路由
传送给指明的默认路由器
报告分组发送出错
是
是
否
否
用C++实现该算法,考虑传送到路由器R2处的IP数据报分组,经过路由选择决定如何投递,编制程序模拟IP数据报分组转发过程。在程序中,以手动方式输入数据分组的目的IP地址D来模拟上述算法中的步骤(1)(D以点分十进制形式输入,在程序中分四部分输入,每部分以回车结尾)。
R3。同时又设R2的路由表有默认路由,默认路由的下一跳也是R3。而对于发送到网络直接传送到路由器R1。
即路由器R2的路由表如下图所示:
目的主机所在的网络
子网掩码
下一跳地址
R3
R3
R1
……
……
……
具体程序代码如下:
#include <iostream>
using namespace std;
class A ;
cout<<part2<<".";
cout<<part3<<".";