首页 200920030129 吴少强

200920030129 吴少强

举报
开通vip

200920030129 吴少强 计算机学院网络工程专业 《TCP/IP课程设计》报告 (2012/2013学年 第一学期) 学生姓名: 吴 少 强 学生班级: 网络工程092001 学生学号: 200920030129 负责部分: HDLC设计 指导教师: 赵 俊 忠 2012 12 月 28 日 目录 1第一章 目的和意义 1.1 TCP/IP课程...

200920030129 吴少强
计算机学院网络工程专业 《TCP/IP课程设计》 报告 软件系统测试报告下载sgs报告如何下载关于路面塌陷情况报告535n,sgs报告怎么下载竣工报告下载 (2012/2013学年 第一学期) 学生姓名: 吴 少 强 学生班级: 网络工程092001 学生学号: 200920030129 负责部分: HDLC设计 指导教师: 赵 俊 忠 2012 12 月 28 日 目录 1第一章 目的和意义 1.1 TCP/IP课程设计的目的 1 1.2 TCP/IP课程设计的意义 1 第二章 需求分析 2 2.1总体实现目标 2 2.2功能需求 2 2.3数据流图 2 2.3.1建立连接的数据流图 2 2.4 用例图 4 2.4.1系统总体的用例图 4 2.4.2 建立连接模块的用例图 4 2.4.3 收发模块用例图 5 2.4.4控制模块用例图 5 第三章 总体设计 6 3.1总体功能描述 6 3.2物理层设计 6 3.3数据链路层设计 7 3.2.1连接建立模块设计 7 3.2.2发送接收模块设计 8 3.2.3数据帧 8 3.4系统总体流程图 9 第四章 详细设计 12 4.1功能描述 12 4.2模块接口描述 12 4.2.1建立链接模块描述 12 4.2.3差错控制模块 13 4.3模块接口流程图 13 第五章 代码实现 17 5.1连接建立模块代码 17 5.2 差错控制模块 19 第六章 测试和结果 22 6.1连接建立模块测试代码 22 6.2连接建立模块测试结果 23 6.3控制模块的测试代码 24 6.4控制模块测试结果 25 第七章 心得体会 26 第一章 目的和意义 1.1 TCP/IP课程设计的目的 本次课程设计目的是在上学期学习TCP/IP 协议 离婚协议模板下载合伙人协议 下载渠道分销协议免费下载敬业协议下载授课协议下载 栈的基础上模拟实现网络中的物理层和数据链路层的相关功能。物理层和数据链路层分别是网络模型中的最低的两层,而以这两层的功能实现作为课程设计相信让我对整个TCP/IP网络的各层的理解都会有很大的提高。这将对我以后走上工作,从事通信类软件方面工作将有很大的帮助。 1.2 TCP/IP课程设计的意义 本次课程设计是我们大学最后的一次课程设计,当然也是最难的,但同时也是让我充分运用四年所学的知识的一次课程设计,所以我会非常认真的完成这次课程设计,努力达到老师期待的要求,同时也是对自己这四年来学习计算机网络工程专业能力的一次真正的检验吧。这次课程设计的目的不仅是要求我们完成对物理层和数据链路层功能的模拟,同时也是对我们工程化,模块化程序设计的一次严格训练,这样对我未来从事软件开发方面的工作将会有很大的启发和帮助。还有就是对我们的团队合作能力的一次检验,因为在未来的软件开发中,一个完整功能的软件不可能是由一个人独立来完成,肯定是由一个团队来负责完成整个软件设计以及各个功能模块设计和实现的,所以这次的课程设计还是对未来软件开发过程的一次实战训练,对我们的能力的提升帮助很大,也是对我的分析能力和解决问 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 的能力,综合运用以前所学知识的能力的考验。相信通过自己的认真努力和团队的合作一定能很好的完成这次课程设计,达到老师的要求,并为我后面找工作打下坚实的基础。 第二章 需求分析 2.1总体实现目标 本次课程设计的目标是在团队合作的基础上分别实现网络分层模型中物理层和数据链路层的部分功能。而我主要负责的是数据链路层数据帧的传输过程中的控制部分。我用两个进程来模拟实现主从站之间的链路的建立、维护和释放,以及对数据传输过程中差错控制,流量控制等数据链路层的相关功能并最终实现两个进程间的通信。 2.2功能需求 本课程设计由小组共同完成,每人负责相应的模块,最终整合在一起完成TCP/IP协议栈中物理层和数据链路层的功能。我负责设计的是HDLC(高层数据链路控制协议)的实现,因此我直接从send端调用数据发送模块发出连接请求开始,然后经过recv端调用接收模块来接收信息并进行确认是否接受连接请求的过程,来实现数据链路层两次握手的功能来建立数据链路连接,最终收发双方就可以在此基础上进行数据帧的传输。并且在传输的过程中我负责的部分还要实现对数据帧流量和差错的控制等功能,以保证数据链路层正确无差错的数据帧传输,以为网络层等高层提供服务,当然我们本次课程设计不实现更高层的功能。其他模块功均由小组的其他人完成,我需要的只是对他们实现的接口模块的调用,来辅助完成我的功能。 2.3数据流图 2.3.1建立连接的数据流图 两次握手的收发双方的数据流图: (1) 发送方发送连接请求数据流图: 图2.1 send端发送连接请求数据流图 连接建立数据流图,发送方发出建立连接请求信息,等待接收方的确认信息,以判断连接是否建立成功。 (2)发送方接收到的确认信息数据流图: 图2.2 send端接收确认信息数据流图 (3)接收方接受连接请求的数据流图: 图2.3 recv端的确认连接请求的数据流图 接收方接收到发送方的连接请求信息后,回应确认信息,从而建立数据链路,为下面的数据帧传输做准备。 2.4 用例图 2.4.1系统总体的用例图 系统总体设计模块包括建立连接模块、计时器模块、发送模块、接收模块,如图2.4所示。 图2.4 系统总体(收/发)方用例图 2.4.2 建立连接模块的用例图 图2.5为连接建立模块的用例图,说明了建立连接模块是在发送模块、计时器模块、接收模块实现的基础上来实现连接的。 图 2.5 建立连接用例图 2.4.3 收发模块用例图 图2.6是发送模块和接收模块的用例图,说明了发送模块和接收模块所要用的接口和用例 图 2.6 收发模块用例图 2.4.4控制模块用例图 图 2.7 控制模块用例图 该模块实现数据链路层中数据帧的差错控制功能,从而将有差错的物理链路变成无差错的数据链路。 第三章 总体设计 3.1总体功能描述 这次的课程设计我们只设计完成网络通信分层中的最低两层分别是物理层和数据链路层。物理层实现底层具体的通信链路,并为数据链路层提供比特流的透明传输,而数据链路层则主要完成数据的封装然后交给物理层的传输模块将数据传输出去,同时实现流量控制和差错检测等数据链路层的功能。我在本次课程设计中负责连接建立和释放,差错控制、流量控制等功能。 图3.1 系统总体功能模块 物理层主要实现物理链路的创建管理功能,以及为高层服务的接口模块的设计等,数据链路层主要实现的功能是数据发送模块,数据接收模块,和控制模块等 3.2物理层设计 物理层主要功能实现比特流的透明传输,为数据链路层提供服务。而我们设计利用共享内存MMF来实现物理的通信链路的模拟,从而为我们上层的数据链路屏蔽底层物理链路的差异和实现细节。因此在这一层我们主要的模块有: (1)创建物理链路功能模块接口 int create_link(char *l_name); (2)释放物理链路功能模块接口 void free_link(char *l_name); void freee_mmf(HANDLE handle, PVOID pvoid); (3)将共享内存映射到进程的地址空间的模块接口 HANDLE open_mmf(char* name); PVOID getmmf_view(HANDLE handle); 3.3数据链路层设计 数据链路层的主要目的是在原始的、有差错的物理传输线路的基础上,采取差错检测,差错控制与流量控制等方法,将有差错的物理线路改进成逻辑上无差错的数据链路,以便向网络层提供高质量的服务。因此我主要负责这一层的功能有连接的建立、管理、释放,以及差错检测和控制,流量控制等基本功能。 3.2.1连接建立模块设计 数据链路层采用两次握手的方式来建立连接,首先发送方发出连接建立请求,随后接收方接收到该请求信息后进行应答,发送发接收到确认信息后判断接收方是否接受建立连接,若接收则建立连接,若拒绝则连接建立失败。相应的模块设计为: 发送方的链接建立请求模块 request_to_linked(char *hostname) 接收方应答模块 responses_to_linked(char *hostname); 3.2.2发送接收模块设计 当连接建立成功后,发送方开始接收用户输入的信息,然后将数据封装成帧,发送给物理层,这时发送方启用一个计时器,然后物理层将比特流的传输到接收方,接收方接收到消息后进行解帧,然后得到数据信息,并向发送方发送确认信息ACK,这期间发送方一直等待接收方的确认信息,若在计时器没有超时前收到确认信息,则继续发送下一个数据帧,若计时器超时或者接收到确认信息不是ACK则发送方将刚才的数据帧重新发送,直到收到接收方的正确的确认信息。相应的模块设计为: 发送方发送数据的模块: send_to_mmf(char *hostname) 接收方接收数据的模块: recv_from_mmf (char *sendname) 3.2.3数据帧 我们的数据帧采用的是结构体的形式,将用户输入的信息经过封装模块的封装转换成数据链路层的数据帧,然后再交给物理层进行传输, 当接收方接收到该数据帧时,交给数据链路层的解数据帧模块进行数据帧的解封装,然后接收方就可获得发送方发来的数据信息。mach_s为源MAC地址,mach_d为目的MAC地址,flag为标志位,data为有效数据。 帧 格式 pdf格式笔记格式下载页码格式下载公文格式下载简报格式下载 为: struct frame_package { char mach_s[20]; char mach_d[20]; int flag; char data[100]; }; 3.4系统总体流程图 (1)发送方总体流程图: 图3.2 发送方总体流程图 发送方首先调用request_to_linked(char *hostname)模块来请求建立连接,等待recv的确认信息,当send接收到确认信息后判断接受连接请求,建立连接成功,开始调用发送数据模块进行数据帧的发送,同时调用控制模块进行数据帧的控制,等待recv对数据帧的确认,若在计时器没有超时接收到确认信息ACK则表明recv成功接收到数据帧,然后send就可以继续发送下一个数据帧,若超时或接收到的确认信息不正确,则发送模块会重新发送该数据帧直到成功发送,此过程中要判断是否为quit数据帧,若是则表明有效数据帧已发完,要断开连接,此时发送进程直接退出。若连接建立失败,则发送进程也直接退出。整个过程如流程图3.2所示。 (2) 接收方的总体流程图 接收方的接收进程接收到发送进程的连接请求信息后,进行确认连接,若连接建立成功,则接收进程调用接收数据模块开始接收发送进程发来的数据帧,并进行处理后,回送确认信息,正确接收回送ACK,负责不回送信息,然后继续接收下一个数据帧,一次循环,直到发送方发来quit的数据帧后断开连接,本次数据传输结束。整个过程如流程图3.3所示。 图3.3 接收方总体流程图 第四章 详细设计 4.1功能描述 本次课程设计中我负责HDLC的功能模块的实现。HDLC(高级数据链路控制协议)是用于数据链路的建立、维护、与释放,以及帧发送过程中的流量控制与差错控制功能,保证数据帧在数据链路上的正确传输,已完成参考模型规定的数据链路层的功能,为网络层提供结点与结点之间可靠地帧传输服务。 而我采用的是主从站的非平衡配置中的正常响应模式(NRM)。非平衡配置的特点是一组结点根据在通信过程中的地位分为主站与从站,由主站来控制数据链路的工作过程,主站发出命令;从站接收命令进行相应配合主站的工作。正常相应模式是主站可以随时向从站发送数据帧,从站只有在主站向它发送命令帧探询,从站响应后才可以向主站发送数据帧。 4.2模块接口描述 4.2.1建立链接模块描述 首先是链路的建立,当send发送端发送连接请求后,相应的recv接收端便会收到连接请求,从而选择是否接收连接,当接收端recv发送接收连接请求的回应帧后,send发送端便会和recv接收端建立连接,这是数据链路层的两次握手建立数据链路的过程。这个模块的接口为 (1)send发送端的请求连接的模块接口:request_to_linked(char *hostname) request_to_linked模块首先向recv端发送一个连接请求,然后等待recv端的回应,若接收到yes则表明recv端接收send端的连接请求,因此request_to_linked接口返回0,表明连接建立成功,若send接收到no则表明recv拒绝send的连接请求,因此request_to_linked返回-1,表明连接建立失败。如流程图4.1所示. (2)recv 接收端的回应是否接受连接请求的模块接口:接口函数原型:responses_to_linked(char *hostname); responses_to_linked模块等待接收send端的连接请求,当有连接请求到来时,便会调用该函数进行处理,recv端可以选择接收(yes),或者拒绝(no)来确定是否接收send端的连接请求,当选择recv选择yes时便会返回0,表明接受连接请求,当选择no时该模块返回-1,表明不接受连接请求。如流程图4.2所示。 4.2.3差错控制模块 差错控制模块,它的主要功能是当发送方发送出数据帧后,启动一个计时器,然后调用该模块,等待接收来自接收方的确认信息ACK,当发送方在计时器没有超时前接收到了ACK确认信息,则进行下一次的数据帧的发送,若计时器超时或者接收到的确认信息不正确,则该模块会重新发送该数据帧,直到对方正确接收。该模块的接口为int trans_contr(int time,PVOID pvoid);如流程图4.3所示。 4.3模块接口流程图 (1)request_to_linked接口模块流程图: 图4.1 request_to_linked模块流程图 (2)responses_to_linked接口模块流程图: 图4.2 responses_to_linked模块流程图 (3)差错控制模块流程图 图4.3 trans_contr流程图 第五章 代码实现 5.1连接建立模块代码 (1)发送发的请求建立连接模块 int request_to_linked(char *hostname) { char str[1024]; HANDLE handle=NULL; PVOID pvoid=NULL; /*将MMF映射到该函数的地址空间中*/ if(!(handle=open_mmf(hostname))) { return -1; } if(!(pvoid=getmmf_view(handle))) { return -1; } /*发送连接请求信息*/ strcpy(str,"receving send linking(yes no)......\n"); strcpy((char*) pvoid,str); strcpy(str,""); /*等待recv的回应信息*/ while(1) { strcpy(str,(char*)pvoid); //接收到的信息为yes则同意建立链接 if(!(strcmp(str,"yes"))) { memset((char*)pvoid,0,sizeof((char*) pvoid)); printf("对方接受连接请求.....\n"); freee_mmf(handle,pvoid); return 0; } //若为no则表明对方不接受连接请求 else if(!(strcmp(str,"no"))) { memset((char*)pvoid,0,sizeof((char*) pvoid)); printf("对方拒绝连接请求......\n"); freee_mmf(handle,pvoid); return -1; } else strcpy(str,""); } } (2)接收方的响应模块 int responses_to_linked(char *sendname) { HANDLE handle=NULL; PVOID pvoid=NULL; char str[1024]; if(!(handle=open_mmf(sendname))) { return -1; } if(!(pvoid=getmmf_view(handle))) { return -1; } /* *是否接收连接 */ strcpy(str,(char *)pvoid); printf("%s\n",str); memset((char*)pvoid,0,sizeof((char*) pvoid)); printf("是否接受连接:(yes|no):"); scanf("%s",str); strcpy((char *)pvoid,str); if(!strcmp(str,"yes")) { return 0; } else return -1; } 5.2 差错控制模块 //差错控制模块 int trans_contr(int time,PVOID pvoid) { char ack[10]; //启动计时器 clock_t now = clock(); //开始计时 //等待接收recv的确认信息 while((clock() - now) / CLOCKS_PER_SEC < time) { strcpy(ack,(char*)pvoid); /*接收ACK则返回0*/ if(strcmp(ack,"ACK")==0) { return 0; } } //超时返回-1 return -1; } 在int send_to_mmf(char *hostname)模块中接收trans_contr的返回值,若返回值为0,则在while循环中打印出接收成功,若返回值为-1则在while循环中打印出消息发送失败,并重新发送该消息。 /*差错控制*/ while(1) { flag=trans_contr(3,pvoid); //等待2秒种的时间 //若trans_contr函数返回-1,则数据帧发送失败,重新发送 if(flag==-1) { printf("消息发送失败,重新发送中.....\n"); memset((char*)pvoid,0,sizeof((char*) pvoid)); strcpy((char*)pvoid, str); } //若trans_contr函数返回-1,则数据帧发送成功 else { printf("发送消息成功\n"); memset((char*)pvoid,0,sizeof((char*) pvoid)); break; } } 第六章 测试和结果 6.1连接建立模块测试代码 (1)发送方request_to_linked()模块接口的测试代码 #include "creat_link.h" #include "app_send.h" #include #include #include int main () { char sendname[20]="localhost"; printf(">>连接建立模块(request_to_linked())功能测试<<\n"); printf("waiting recv linking.......!!\n"); printf("正在等待连接........\n"); /*创建物理链路*/ if(create_link(sendname)!=0) { return -1; } /*发送连接请求*/ if(request_to_linked(sendname)!=0) { printf("连接建立失败......\n"); return -1; } printf("连接建立成功!!\n"); printf("连接建立成功!!\n"); return 0; } (2)接收方responses_to_linked()的模块测试代码 #include "creat_link.h" #include "app_recv.h" #include #include #include int main() { printf(">>连接建立模块((responses_to_linked())功能测试<<\n"); if(responses_to_linked("localhost")!=0) { printf("不接受连接,连接建立失败.....\n"); return 0; } printf("接受连接,连接建立成功......\n"); printf("连接建立成功......\n"); return 0; } 6.2连接建立模块测试结果 (1)成功建立连接的结果截图 发送方: 图 6.1 发送方成功建立连接截图 接收方: 图 6.2 接收方成功响应连接截图 (2 建立连接失败的结果截图 发送方: 图 6.3 发送方建立连接失败截图 接收方: 图 6.4 接收方不接受连接截图 6.3控制模块的测试代码 (1)发送方 #include "creat_link.h" #include "app_send.h" #include #include #include int main () { char sendname[20]="localhost"; printf(">>差错控制模块trans_contr()功能测试<<\n"); /*调用发送模块*/ send_to_mmf(sendname); return 0; } (2)接收方 #include "creat_link.h" #include "app_recv.h" #include #include #include int main() { printf(">>差错控制模块trans_contr()功能测试<<\n"); /*接收数据模块*/ recv_from_mmf("localhost"); return 0; } 6.4控制模块测试结果 图6.5 发送方控制模块 图 6.6 接收方 第七章 心得体会 几个星期的辛苦劳作终于有个结果了。课程设计也总算尘埃落定。这其中的“酸甜苦辣”也恐怕只有我一个人知道。 面对大四的课程设计,这也是我们大学的最后一次课程设计。以往的课程设计都是自己做自己的课题,只要我自己想好了 方案 气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载 就可以实施,如果有问题改动也是我一个人的事情。这次就完全不一样了,所有的事情都必须经由小组讨论决定通过,个人的随意改动将会影响全局的设计。多次的小组讨论和意见的统一归总,在第一次见指导老师的时候被批的一无是处。大家的情绪都很低落,并决定对我们的设计方案重新进行修订,在我们现有的知识的基础上尽量做到最好。第二次的见面依旧被骂,写的内容不够完善,并对我们的方案提出了更高的要求和更好地而解决方法。 总以为课程设计仅仅是一种考试的手段,换一种方式而已。当我真正去做的的时候,当我真正完成的时候回头看看才知道课程设计不仅仅是为了督促我们的学业,让我们知道好好学习,我想作为老师要交给我们的还有人生的哲理,面对第一次的沉稳与冷静。作为网络工程专业的学生,学好简单程序的设计是我们专业的基础,既然选择了就要好好去做。 以后的学习生活中我们面临的更多的不是个人的孤军奋战,而是一个团队和合作,只考虑到自己的方便,没有给别人预留到链接的接口,或者使用的借口和团队其他人不统一,这就造成了很多链接时的问题。一点小小的问题或是在使用中私自修改,可能造成辛苦的劳动成果不可用,长此以往,我们在单位的薪金和职位都会受到很大的影响。我们在大学的学习不仅仅要学习的是知识,还要学习很多做人做事的道理。学校是现在唯一允许我们犯错,又给我们改错机会的地方。现在我们不仅要努力学习科学文化知识,还有在生活中有意识的培养自己的做人做事的能力,力求自己能够做到更好。 这次课程设计终于顺利完成了,在设计中遇到了很多问题,最后在老师的指导下同学的帮助下,终于都得以解决。同时,在这次的课程设计中我收获了很多很多,无论是学习还是生活,更或是对自己的定位和对自己未来的思考。同时,对给过我帮助的所有同学和老师再次表示衷心的感谢!谢谢你们。谢谢你们给我这份回忆,若干年后,在工作岗位上奋斗了很多年后,也许突然有一天我会想起我的第一份课程设计和它给我的所有感受。在此,真的很想对我的老师和同学说声“谢谢”! 发送方 调用发送模块发送连接请求信息 调用数据帧封装模块封装成帧 物理层 物理层 接收模块接收数据帧 分解模块分解数据帧,获得连接请求信息 封装模块封装确认信息成数据帧 确认是否接受连接 接收数据帧,调用分解模块分解数据帧,获得确认信息 接收模块获得recv的确认信息 物理层 PAGE _1418557473.vsd 系统� � 接收方 响应连接请求模块 接收数据模块 发送数据模块 _1418559256.vsd 系统� � 数据的封装 控制模块 发送模块 发送模块 输入数据 发送数据帧 _1418559367.vsd 系统� � recv端响应连接 响应连接 发送模块 接收模块 _1418562474.vsd 系统� � 控制模块 响应连接 差错控制 流量控制 计时器 _1418559282.vsd 系统� � 数据的解帧 接收模块 接收模块 接收数据帧 发送确认数据帧 _1418558732.vsd 系统� � send端建立连接 建立连接 发送模块 计时器 接收模块 _1418132345.vsd � � � 开始 调用连接响应模块 调用数据接受模块� 是 否 是否建立成功 否 判断是否为(quit)� 是 退出� _1418557423.vsd 系统� � 发送方 建立连接模块 计时器模块 发送模块 接收模块 _1418022746.vsd � � � 开始 确认是否接受连接yes/no 判断是否接受连接 连接建立失败 连接建立成功� Yes No 返回-1� 返回0� 接收send的连接请求信息 _1418131816.vsd � � � 开始 调用连接建立请求模块� 调用数据发送模块� 重新发送 调用差错控制模块 是否发送成功 是否建立成功 打印发送成功 判断是否为(quit)� 否 退出� 是 是 是 否 否 _1418129141.vsd � � � 开始 等待接收recv的确认信息 判断确认是否为ACK 打印发送消息成功 打印消息发送失败并重新发送消息 是 若计时器超时 否 启动计时器 返回-1� 返回0� _1418022099.vsd � � � 开始 发送连接请求信息 接收recv的回复信息� 判断是否接收连接� 打印recv已接受连接请求,返回0� Recv不接受连接请求� 接受(yes ) 不接受(no) 其他 连接建立失败 返回-1� 连接建立成功 返回0�
本文档为【200920030129 吴少强】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_216060
暂无简介~
格式:doc
大小:693KB
软件:Word
页数:0
分类:互联网
上传时间:2013-08-24
浏览量:21