发送TCP数据包设计说明书

上传人:hs****ma 文档编号:483959320 上传时间:2023-05-15 格式:DOCX 页数:16 大小:166.18KB
返回 下载 相关 举报
发送TCP数据包设计说明书_第1页
第1页 / 共16页
发送TCP数据包设计说明书_第2页
第2页 / 共16页
发送TCP数据包设计说明书_第3页
第3页 / 共16页
发送TCP数据包设计说明书_第4页
第4页 / 共16页
发送TCP数据包设计说明书_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《发送TCP数据包设计说明书》由会员分享,可在线阅读,更多相关《发送TCP数据包设计说明书(16页珍藏版)》请在金锄头文库上搜索。

1、发送TCP数据包设计说明书课程设计准备1.1 课程设计目的TCP(传输控制协议)是一种面向连接的、可靠的传输层协议。TCP协议在网络层IP协议的基础上,向应用层用户进程提供可靠的、全双工的数据传输流。本课程设计的目的就是设计一个发送TCP数据包的程序,并根据本设计说明TCP数据包的结构以及TCP协议与IP协议的关系,使学生对TCP协议的工作原理有更深入的认识。1.2 课程设计的要求本程序的功能是填充一个TCP数据包,并发送给目的主机。1)以命令行形式运行:SendTCPsourse_ipsourse_portdest_ipdest_port其中,SendTCP/程序名;sourse_ip为源端

2、IP地址;sourse_port为源埠;dest_ip为目的IP地址;dest_port为目的埠。2)其它的TCP头部参数请自行设定。3) 数据字段为“Thisismyhomeworkofnetwork,Iamhappy!”。4) 发送成功后在屏幕上输出”sendOK”。1.3相关知识编制本程序前要对TCP协议有一定的了解。当应用程序有报文需要通过TCP发送时,它就将此应用层报文传送给执行TCP协议的传输实体。TCP传输实体将用户数据加上TCP报头,形成TCP数据包,在TCP数据包上增加IP头部,形成IP包。下图显示的是TCP数据包和IP包的关系。TCP协议的传输单元为报文段,其格式如图所示。

3、报文段报头的长度为20B60Bo其中固定长度为20B,报文段长度最多为40B。TCP报文段主要包括以下字段。埠号:埠号字段包括源埠号和目的埠号。每个埠号的长度是16位,分别表示发送该TCP包的应用进程的埠号和接收该TCP包的应用进程的埠号。序号:长度为32位。由于TCP协议是面向数据流的,它所传送的报文段可以视为连续的数据流,因此需要给每一个字节编号。序号字段的“序号”指的是本报文段数据的第一个字节的顺序号。包的第一个字节的序号。 报头长度:该字段长度为4位。TCP报头长度是以4B为一个单元来计算的,实际上报头长度在20B60B子间。因此这个字段的值在515之间。 保留:长度为6位,留作今后使

4、用,目前全部置0。 控制:这个字段定义了6种不同的标志,每个标志占一位,在同一时间可以设置一位或多位。URGi为1时,表明有需要紧急处理的数据。ACK为1时,表明确认号的字段有效。PST位为1时,表明要强制切断连接。SYN位为1时,表明有确立连接的请求,这时,把序号字段的初始值作为序号字段的值,以便开始通信。FIN为1时,表明发送方已经没有资料发送了。 窗口大小:长度为16位,窗口对应的数据是以字节为单位的数据,因此最多能够传送的数据为65535B。 紧急指针:该字段的长度为16位,指向必须紧急处理的数据的位置,只有当标志URG=1时紧急指针才有效。从TCP报头后面的报文资料开始,到紧急指针所

5、指出的长度的数据,就是必须紧急处理的数据。 选项:该字段可以多达40B,包括单字节选项和多字节选项。 校验和:该字段长度多达16位,校验和的校验围包括伪头部、TCP报头以及应用层来的数据。其计算方法与IP协议头部的校验的计算方法一样。伪头部为12B,它本身并不是TCP数据包的真正头部,只是在计算校验和时,临时和TCP数据包连接在一起。伪头部的格式如下图所示。源IP地址目的IP地址00000000协议号(6)TCP长度1.4工作环境;硬件:PC机一台。软件:MicrosoftVisualC+6.0二课程设计分析本课程设计的目标是发送一个TCP资料包,可以利用原始套接字来完成这个工作。整个程序由初

6、始化原始套接字和发送TCP数据包两个部分组成。2.1使用原始套接字SOCKETsock;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,

7、并设定IP_HDRINCL选项,表明自己来构造IP头。注意,如果设置IP_HDRINCL选项,那么必须具有administrator权限,要不就必须修改注册表:HKEY_LOCAL_MACHINESystemCurrentControlSetServicesAfdParameter修改键:DisableRawSecurity(类型为DWORD把值修改为1。如果没有,就添加。BOOLFlag=TRUE;setsockopt(sock,IPPROTO_IP,IP_HDRINCL,(char*)&Flag,sizeof(Flag);inttimeout=1000setsockopt(sock,SOL

8、_SOCKET,SO_SNDTIMEO,(char*)&timeout,sizeof(timeout);在这里我们使用基本套接字SOL_SOCKET设置SO_SNDTIMEO!示使用发送超时设置,超时时间设置为1000ms。2.2定义IP头部、TCP头部和伪头部的数据结构/定义IP首部typedefstruct_iphdrUCHARh_lenver;/4UCHARtos;/8USHORTtotal_len;/16USHORTident;/16USHORTfrag_and_flags;/3UCHARttl;/8UCHARproto;/8USHORTchecksum;/16ULONGsourceI

9、P;/32ULONGdestIP;/32IP_HEADER;位首部长度+4位IP版本号位服务类型TOS位总长度(字节)位标识位标志位位生存时间TTL位协议(TCP,UDP或其它)位IP首部校验和位源IP地址位目的IP地址源地址目的地址没用/ 协议类型/TCP 长度位源埠位目的端口位序列号位确认号位首部长度/6 位保留字位标志位位窗口大小位校验和位紧急数据偏移量/定义TCPft首部typedefstructpsd_hdrULONGsaddr;/ULONGdaddr;/UCHARmbz;/UCHARptcl;USHORTtcpl;PSD_HEADER;/定义TCP!部typedefstruct_t

10、cphdrUSHORTth_sport;/16USHORTth_dport;/16ULONGth_seq;/32ULONGth_ack;/32UCHARth_lenres;/4UCHARth_flag;/6USHORTth_win;/16USHORTth_sum;/16USHORTth_urp;/16TCP_HEADER;2.3计算校验和的子函数在填充数据包的过程中,需要调用计算校验和的函数checksum两次,分别用于校验IP头和TCP头部(加上伪头部),其实现代码如下:USHORTchecksum(USHORT*buffer,intsize)unsignedlongcksum=0;whil

11、e(size1)cksum+=*buffer+;size-=sizeof(USHORT);if(size)cksum+=*(UCHAR*)buffer;cksum=(cksum16)+(cksum&0xffff);cksum+=(cksum16);return(USHORT)(cksum);2.4程序流程图三源代码#include#include#include#include#include#include#include#include#pragmacomment(lib,ws2_32.lib)#defineIPVER4/IP协议预定#defineMAX_BUFF_LEN65500/发送缓

12、冲区最大值typedef struct ip_hdr / UCHAR h_verlen;/4UCHAR tos;/8USHORT total_len;/16USHORT ident; /16USHORT frag_and_flags; /3UCHAR ttl;/8UCHAR proto; /8USHORT checksum;/16ULONG sourceIP;/32ULONG destIP; /32 IP_HEADER;定义 IP 首部位首部长度,4 位 IP 版本号位服务类型TOS位总长度(字节)位标识位标志位位生存时间TTL位协议 (TCP, UDP 或其它 )位 IP 首部校验和位源 I

13、P 地址位目的 IP 地址typedefstructtsd_hdr定义TCP伪首部ULONGsaddr;/源地址ULONGdaddr;/目的地址UCHARmbz;/没用UCHARptcl;/协议类型USHORTtcpl;/TCP长度PSD_HEADER;typedefstructtcp_hdr定义TCP首部USHORTth_sport;/16位源埠USHORTth_dport;/16位目的端口ULONGth_seq;/32位序列号ULONGth_ack;/32位确认号UCHARth_lenres;/4位首部长度/6位保留字UCHARth_flag;/6位标志位USHORTth_win;/16位

14、窗口大小USHORTth_sum;/16位校验和USHORTth_urp;/16位紧急数据偏移量TCP_HEADER;/CheckSum:计算校验和的子函数USHORTchecksum(USHORT*buffer,intsize)unsignedlongcksum=0;while(size1)cksum+=*buffer+;size-=sizeof(USHORT);if(size)cksum+=*(UCHAR*)buffer;cksum=(cksum16)+(cksum&0xffff);cksum+=(cksum16);return(USHORT)(cksum);intmain(intargc,char*argv)

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 市场营销

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号