1北京邮电大学课程设计报告课程设计名称计算机网络课程设计学院计算机指导教师高占春班级班内序号学号学生姓名成绩150608211575苑博150108211570刘鸣152808211598侯祎寒课程设计内容简要介绍课程设计的主要内容,包括课程设计教学目的、基本内容、实验方法和团队分工等●教学目的:通过本次课程设计,旨在让学生们将课内所学的计算机网络关于DNS部分的理论知识应用到实际中来,加强学生对该协议的了解。在课程设计过程中,锻炼学生的独立思考和动手编程的能力,同时培养其团队协作和沟通等能力。●基本内容:设计一个DNS服务器程序,读入“域名-IP地址”对照表,当客户端查询域名对应的IP地址时,用域名检索该对照表,实现如下三个功能:本地服务器查询、中继查询和屏蔽。●实验方法:首先小组开会确定了程序的功能模块,然后设计了不同的接口。根据概要设计阶段对接口的设计,随后进行了接口详细设计。设计工作做完后小组成员着手编码,在编码过程中进行了单元测试,最后将接口模块组装并进行了系统测试,最终完成了该DNS中继服务系统。●团队分工:该小组组长苑博,主要担当接口人的工作,确定系统的功能模块,给出接口的概要定义,并负责编写解析用户请求部分的代码;刘鸣主要负责资料的查询及响应请求部分的代码;侯祎寒主要负责会议记录及文档撰写的工作。学生课程设计报告(附页)见附页课程设计成绩评定评语:成绩:指导教师签名:年月日注:评语要体现每个学生的工作情况,可以加页。2目录1系统功能设计............................................................................................................32模块划分....................................................................................................................32.1数据结构..........................................................................................................32.1.1DNS域名解析表结构.............................................................................32.1.2DNSDNS报文首部.................................................................................32.1.3ID转换表结构.....................................................................................52.1.4DNS响应报文answer域定长部分.......................................................52.1.5DNS响应报文answer域.......................................................................62.2接口设计..........................................................................................................72.2.1获取域名解析表....................................................................................72.2.2获取用户请求域名................................................................................72.2.3在DNS对照表中查找域名....................................................................82.2.4中继功能下ID转换...............................................................................92.2.5解析响应报文中的IP地址.................................................................103软件流程图..............................................................................................................124测试用例及运行结果..............................................................................................134.1软件启动........................................................................................................134.2测试用例及运行结果....................................................................................154.2.1本地服务器..........................................................................................154.2.2屏蔽......................................................................................................154.2.3中继......................................................................................................164.2.4浏览器演示..........................................................................................175调试中遇到并解决的问题......................................................................................176课程设计工作总结..................................................................................................1831系统功能设计该DNS服务器程序,读入“域名-IP地址”对照表,当客户端查询域名对应的IP地址时,用域名检索该对照表,有三种检索结果:(1)检索结果为ip地址0.0.0.0,则向客户端返回“域名不存在”的报错消息(不良网站拦截功能)(2)检索结果为普通IP地址,则向客户返回这个地址(服务器功能)(3)表中未检到该域名,则向因特网DNS服务器发出查询,并将结果返给客户端(中继功能)。考虑多个计算机上的客户端会同时查询,需要进行消息ID的转换2模块划分2.1数据结构2.1.1DNS域名解析表结构typedefstructtranslate{stringIP;//IP地址stringdomain;//域名}Translate;2.1.2DNSDNS报文首部typedefstructDNSHeader{unsignedshortID;unsignedshortFlags;unsignedshortQuestNum;unsignedshortAnswerNum;unsignedshortAuthorNum;unsignedshortAdditionNum;}4●DNS报文首部说明:标识(2字节):这个字段网上的解释有点不清楚:“由客户程序设置并有服务器返回结果。”看了下实验室的程序和文档,原来这个字段可以看作是DNS报文的ID,对于相关联的请求报文和应答报文,这个字段是相同的,由此可以区分DNS应答报文是哪个请求报文的响应。标志(2字节):这部分非常重要,需要逐比特分析:QR(1比特):查询/响应的标志位,1为响应,0为查询。opcode(4比特):定义查询或响应的类型(若为0则表示是标准的,若为1则是反向的,若为2则是服务器状态请求)。AA(1比特):授权回答的标志位。该位在响应报文中有效,1表示名字服务器是权限服务器(关于权限服务器以后再讨论)TC(1比特):截断标志位。1表示响应已超过512字节并已被截断(依稀好像记得哪里提过这个截断和UDP有关,先记着)RD(1比特):该位为1表示客户端希望得到递归回答(递归以后再讨论)RA(1比特):只能在响应报文中置为1,表示可以得到递归响应。zero(3比特):不说也知道都是0了,保留字段。DNS报文首部5rcode(4比特):返回码,表示响应的差错状态,通常为0和3,各取值含义如下:0-无差错1-格式差错2-问题在域名服务器上3-域参照问题4-查询类型不支持5-在管理上被禁止6~15-保留标志段说完了,下面是问题数、资源记录数、授权资源记录数和额外资源记录数,这四个字段都是两字节,分别对应下面的查询问题、回答、授权和额外信息部分的数量。一般问题数都为1,DNS查询报文中,资源记录数、授权资源记录数和额外资源记录数都为0.2.1.3ID转换表结构typedefstructIDChange{unsignedshortoldID;//原有IDBOOLdone;//标记是否完成解析SOCKADDR_INclient;//请求者套接字地址}2.1.4DNS响应报文answer域定长部分structR_DATA{unsignedshortname;unsignedshorttype;unsignedshort_class;charttl[4];unsignedshortdata_len;}●DNS响应报文answer域说明:6●域名字段(不定长或2字节):记录中资源数据对应的名字,它的格式和查询名字段格式相同。但是看报文实例还有分析程序,我发现很多DNS响应报文中,此字段由于和查询问题部分的域名相同,改为使用2字节指针,指向查询问题部分的域名。关于指针怎么计算,TCP/IP详解里面有,不过这本书昨天刚被师兄拿回去,所以现在写不了了。●类型(2字节)、类(2字节):含义与查询问题部分的类型和类相同。●生存时间(4字节):该字段表示资源记录的生命周期(以秒为单位),一般用于当地址解析程序取出资源记录后决定保存及使用缓存数据的时间。●资源数据长度(2字节):表示资源数据的长度(以字节为单位,如果资源数据为IP则为0004)●资源数据:该字段是可变长字段,表示按查询段要求返回的相关资源记录的数据。2.1.5DNS响应报文answer域structRES_RECORD{structR_DATA*resource;unsignedchar*rdata;//变长部分,长度由R_DATA中的data_len指明}72.2接口设计2.2.1获取域名解析表函数名称:get_table入口参数:域名解析表文件绝对路径出口参数:获得域名解析表中信息条目个数函数功能:将