计算机网络课程设计-发送TCP数据包.docx_第1页
计算机网络课程设计-发送TCP数据包.docx_第2页
计算机网络课程设计-发送TCP数据包.docx_第3页
计算机网络课程设计-发送TCP数据包.docx_第4页
计算机网络课程设计-发送TCP数据包.docx_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

学 号:成 绩:课程实践报告题 目发送TCP数据包学 院计算机科学与技术专 业软件工程班 级软件zy1302姓 名指导教师刘东飞2016年6月9日课程实践设计任务书学生姓名: 专业班级: 软件zy1302 指导教师: 刘东飞 工作单位: 计算机学院 题目六: 发送TCP数据包 初始条件:(1)学习相关知识(2)C/C+/VC/VB/JAVA语言(3)PC机一台要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)本设计的功能是填充一个TCP数据包,并发送给目的主机。1)以命令行形式运行:SendTCP source_ip source_port dest_ip dest_port,其中SendTCP是程序名,source_ip为源端IP地址,source_port为源端口号,dest_ip为目的地址,dest_port为目的端口号。2)其他的TCP头部参数请自行设定。3)数据字段为“This is my homework of network ,I am happy!”。4)成功发送后在屏幕上输出“send OK”。时间安排:第一、二天:查阅资料,学习算法第三、四天:编程调试第五天:书写报告指导教师签名: 年 月 日系主任(或责任教师)签名: 年 月 日目录发送TCP数据包- 1 -一、目的与要求- 1 -二、设计内容- 1 -三、设计步骤与方法- 1 -四、实现与调试- 1 -1TCP报文格式- 1 -2. 具体设计- 3 -3程序流程图- 5 -五、设计结果与分析- 5 -六、设计总结与体会- 6 -七、参考资料- 6 -发送TCP数据包一、目的与要求通过一个实际网络协议或网络应用系统的分析与总体设计,综合运用所学知识,加深对网络知识理解和掌握。同时培养学生分析问题和解决问题的能力,以及软件文档的制作能力。二、设计内容本设计的功能是填充一个TCP数据包,并发送给目的主机。1)以命令行形式运行:SendTCP source_ip source_port dest_ip dest_port,其中SendTCP是程序名,source_ip为源端IP地址,source_port为源端口号,dest_ip为目的地址,dest_port为目的端口号。2)其他的TCP头部参数请自行设定。3)数据字段为“This is my homework of network ,I am happy!”。4)成功发送后在屏幕上输出“send OK”。三、设计步骤与方法1.系统调研:查阅文献,熟悉系统功能和开发工具;2.系统分析与设计:确定功能结构,数据结构,用户界面以及开发平台;对各功能模块进行准确的定义;确定各功能模块的算法并画出相应的数据流图;3.编程并上机调试。4.撰写课程实践设计报告(说明书)。四、实现与调试1TCP报文格式TCP协议的数据传输单位称为报文段,其格式如图-1所示。报文段报头的长度是20B60B,选项部分长度最多为40B。TCP报文段主要包括以下字段。TCP头部数据源端口号目的端口号序号确认号报文长度 保留URGACKPSHRSTSYNFIN窗口大小校验和紧急指针选项及填充图-1 TCP数据包头部的格式端口号:端口号字段包括源端口号和目的端口号。每个端口号的长度是16位,分别表示发送该TCP包的应用进程的端口号和接收该TCP包的应用进程的端口号。序号:长度为32位。由于TCP协议是面向数据流的,它所传送的报文段可以视为连续的数据流,因此需要给每一字节编号。序号字段的“序号”指的是本报文段数据的第一个字节的序号。确认号:该字段的长度为32位,它表示接收端希望接收下一个TCP包的第一个字节的序号。报文长度:该字段长度为4位。TCP报文长度是以4B为一个单元来计算的,实际上报文长度在20B60B之间。因此这个字段的值在515之间。保留:长度为6位,留做今后使用,目前全部置0.控制:这个字段定义了6种不同的标志,每一个标志占一位,在同一时间可以设置一位或多位。URG位为1时,表明应尽快把数据传送给应用程序,否则表明允许数据在缓存中存放一段时间。RST位为1时,表明要强制切断连接。SYN位为1时,表明有确立连接的请求,这时,把序号字段的初始值作为序号字段的值,以便开始通信。FIN位为1时,表明发送放已经没有数据发送了。窗口大小:长度为16位,指向必须紧急处理的数据的位置,因此最多能够传送的数据为65535B。紧急指针:该字段长度为16,指向必需紧急处理的位置,只有当标志URG=1时紧急指针才生效。从TCP报头后面的报文数据开始,到紧急指针所指出长度的数据,就是必须紧急处理的数据。选项: 该字段可以多达40B,包括单字节选项和多字节选项。校验和:该字段长度为16位,校验和的校验范围包括伪头部,TCP报头以及应用层来的数据。其计算方法与IP协议头部校验和的计算方法一样。伪头部为12B,它本身并不是TCP数据包的真头部,只是在计算校验和时,临时和TCP数据包连接在一起。伪头部的格式如图-2所示0 8 16 24 31源IP地址目的IP地址00000000协议号(6)TCP长度图-2 伪头部的格式2. 具体设计2.1 创建一个原始套接字,并设置IP头选项SOCKET sock; sock = socket(AF_INET,SOCK_RAW,IPPROTO_IP); 或者: sock=WSASoccket(AF_INET,SOCK_RAW,IPPROTO_IP,NULL,0,WSA_FLAG_OVERLAPPED); 这里,设置了SOCK_RAW标志,表示我们声明的是一个原始套接字类型。为使用发送接收超时设置,必须将标志位置位置为WSA_FLAG_OVERLAPPED。在本课程设计中,发送TCP包时隐藏了自己的IP地址,因此我们要自己填充IP头,设置IP头操作选项。其中flag设置为ture,并设定 IP_HDRINCL 选项,表明自己来构造IP头。setsockopt(sock, IPPROTO_IP, IP_HDRINCL, (char *)&Flag, sizeof(Flag);int timeout=1000;setsockopt(sock, SOL_SOCKET,SO_SNDTIMEO,(char*)&timeout, sizeof(timeout);在这里我们使用基本套接字SOL_SOCKET,设置SO_SNDTIMEO表示使用发送超时设置,超时时间设置为1000ms。2.2 构造IP头和TCP头这里, IP头和TCP头以及TCP伪部的构造请参考下面它们的数据结构。typedef struct _iphdr /定义IP首部 UCHAR h_lenver; /4位首部长度+4位IP版本号 UCHAR tos; /8位服务类型TOS USHORT total_len; /16位总长度(字节) USHORT ident; /16位标识 USHORT frag_and_flags; /3位标志位 UCHAR ttl; /8位生存时间 TTL UCHAR proto; /8位协议 (TCP, UDP 或其他) USHORT checksum; /16位IP首部校验和 ULONG sourceIP; /32位源IP地址 ULONG destIP; /32位目的IP地址 IP_HEADER; typedef struct psd_hdr /定义TCP伪首部 ULONG saddr; /源地址 ULONG daddr; /目的地址 UCHAR mbz; /没用UCHAR ptcl; /协议类型 USHORT tcpl; /TCP长度 PSD_HEADER; typedef struct _tcphdr /定义TCP首部 USHORT th_sport; /16位源端口 USHORT th_dport; /16位目的端口 ULONG th_seq; /32位序列号 ULONG th_ack; /32位确认号 UCHAR th_lenres; /4位首部长度/6位保留字 UCHAR th_flag; /6位标志位 USHORT th_win; /16位窗口大小 USHORT th_sum; /16位校验和 USHORT th_urp; /16位紧急数据偏移量 TCP_HEADER; 2.3 计算校验和的子函数在填充数据包的过程中,需要调用计算校验和的函数checksum两次,分别用于校验IP头和TCP头部(加上伪头部),其实现代码如下:USHORT checksum(USHORT *buffer, int size) unsigned long cksum=0; while(size 1) cksum+=*buffer+; size -=sizeof(USHORT); if(size ) cksum += *(UCHAR*)buffer; cksum = (cksum 16) + (cksum & 0xffff); cksum += (cksum 16); return (USHORT)(cksum); 3程序流程图开始结束构造原始套接字,并初始化发送TCP资料报计算TCP头部校验和填充IP头部计算IP头部校验和构造TCP伪头部填充TCP头部 图-3 程序流程图五、设计结果与分析1. 输入:sendtcp 192.168.1.102 80 192.168.1.102 802. 输入要发送的字符串:This is my homework of network,I am happy!”,并回车六、设计总结与体会一开始拿到这个题目,首先是感觉很简单,但仔细一考虑,发现并不是那么回事。由于我比较熟悉Java,本想用Java来实现这个课程设计,但发现Java把网络编程封装的太高层了,照题目的意思,要对TCP数据包进行填充,所以果断放弃了使用熟悉的Java,改用C语言。做了这样一个决定以后,发现根本不知道如何下手,于是只能上网查找资料,发现已经有很多学长学姐做过类似的工作,于是我便照葫芦画瓢,一一自己实现,确实是学到了很多,要对TCP数据包进行填充,首先就要正真熟悉它的数据结构,在相应字段放的是什么内容,实现的是什么功能,其次我还接触了网络编程接口socket套接字的相关知识,确实是非常考验我自学的能力,激发了我很大的兴趣。通过这个课程设计,我的自学能力和实践能力得到了很大的提升,而且将这学期所学的计算机网络的理论知识确实的和时间结合了起来,对计算机网络有了更加深刻的理解,非常感谢老师和其他帮助我的同学。七、参考资料1. 谢希仁,计算机网络(第5版),电子工业出版社2. 吴功宜、胡晓英等编著.计算机网络课程设计.北京:机械工业出版社,2010.83. TCP/IP详解卷1,协议, (美) W. Richard Stevens著4. TCP Sockets编程, (加) Jesse Storimer著5. TCP h

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论