课 程 设 计
课程名称: 计算机网络原理 题 目: 计算机网络原理课程设计实践 学生姓名:
专 业: 物联网工程 班 别: 学 号: 指导老师:
日 期: 2016 年 12 月 27 日
钦州学院期末考试试卷
2016 年 秋季学期A卷、考查、开卷
计算机网络原理课程设计实践
命题教师: 适用班级:
答卷说明:1.本试卷共 3页, 1个大题,满分100分。
学号: 姓名: 班别:
题号 一 总分 得分 评分人
一、实验要求(本大题共1小题,每小题100分,共100分)
1.依据分组转发自主学习算法的描述以及算法流程图,运用程序模拟实现该算法。
算法描述如下:
1)若从 A 发出的帧从接口 x 进入了某网桥,那么从这个接口出发沿相反方向一定可把一个帧传送到 A。
2)网桥每收到一个帧,就记下其源地址和进入网桥的接口,作为转发表中的一个项目。
3)在建立转发表时是把帧首部中的源地址写在“地址”这一栏的下面。 4)在转发帧时,则是根据收到的帧首部中的目的地址来转发的。这时就把在“地址”栏下面已经记下的源地址当作目的地址,而把记下的进入接口当作转发接口。
第1 页共9 页
钦州学院期末考试试卷
算法流程图:
开始接收数据帧(键盘输入模拟数据帧)解析数据帧,读取源地址SCR。接收端口号portSCR是否在转发表中?否将源地址SCR和接收端口号Port登记在转发表中是更新原有的转发表项目(SCR,端口号)读取数据帧的目的地址Des,判断Des是否在转发表中?是判断转发端口是否是接收端口Port?否根据转发端口转发数据帧是否进行广播(除接收端口以外的所有端口)丢弃此帧,不进行转发和广播结束
第2 页共9 页
钦州学院期末考试试卷
二、算法分析
自学习:当网桥收到一转发帧时,先查找自己的转发表中是否有源地址,若没有则添加此项。
转发帧:查找自己转发表中是否有目的地址,若没有则将此帧从其他端口转发出去。
若有,则将转发表中记录的目的地址端口和此帧进入网桥时通过的端口进行比较,若相等则丢弃此帧(因为目的主机已经收到此帧了),若不相等,则将此帧通过转发表记录的目的地址端口转发出去。
三、数据结构
struct Data //数据结构 {
char Scr; //源地址 int port; //端口号 };
struct SendTable //转发表结构 {
Data data[Max_Data];
int write; //写指针,指向下一个要写的位置 }sendTable;
void initSendTable() {
for(int i=0;i sendTable.data[i].Scr='0'; sendTable.data[i].port=0; } sendTable.write=0; } 第3 页共9 页 钦州学院期末考试试卷 四、实验代码 #include #define Max_Data 100//转发表数据项数量 struct Data//数据项结构 { char Add;//地址 int port;//端口 }; struct SendTable//转发表结构 { Data data[Max_Data]; int write;//写指针,指向下一个要写的位置 }sendTable; void initSendTable() { for(int i=0;i sendTable.data[i].Add='0'; sendTable.data[i].port=0; } sendTable.write=0; } int index;//记录匹配项 bool Find(Data data)//查找转发表,若找到返回ture,找不到返回false { for(int i=0;i 第4 页共9 页