文档详情

TCP数据包封装与发送.doc

发布:2017-07-07约3.79万字共7页下载文档
文本预览下载声明
TCP数据包的封装与发送 一、实验目的 掌握TCP的工作特点; 熟悉TCP数据包的结构; 深刻理解网络体系结构中传输层与上下层之间的关系; 二、实验环境 PC机一台 Windows 操作系统 三、实验准备 复习TCP协议的相关内容; 熟练掌握TCP数据包中各自段的作用; 四、实验内容(二选一) 1.编写程序构造TCP包结构,并填写各字段,将封装后的TCP包的内容在屏幕上输出并写入指定的文件中; 2.TCP包的数据字段内容额长度自定; 五、实验报告要求 报告内容要有主程序的流程图和程序代码; 报告内容要有运行结果的截图; 对实验过程进行分析,对存在的问题分析。 实验相关代码 #includeiostream #include stdio.h #include string.h #include stdlib.h #includewinsock2.h #pragma comment(lib,ws2_32.lib) //数据结构及宏定义: #define IPVER 4 //IP协议预定 #define MAX_BUFF_LEN 65500 //发送缓冲区最大值 #define DEST_PORT 5050 //目的端口号 #define SOUR_PORT 8080 //源端口号 typedef struct ip_hdr //定义IP首部 { UCHAR h_verlen; //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 tsd_hdr //定义TCP伪首部 { ULONG saddr; //源地址 ULONG daddr; //目的地址 UCHAR mbz; //没用 UCHAR ptcl; //协议类型 USHORT tcpl; //TCP长度 }PSD_HEADER; typedef struct tcp_hdr //定义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; using namespace std; //主要函数: //CheckSum:计算校验和的子函数 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)
显示全部
相似文档