TCP数据包封装与发送.doc
文本预览下载声明
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)
显示全部