计算机网络
课程设计报告
题目:发送TCP数据报
一、问题描述(把你所选的题目及要求说一下)
TCP(传输控制协议)是一种面向连接的、可靠的传输层协议。TCP协议在网络层IP协议的基础上,向应用层用户进程提供可靠的、全双工的数据传输流。本课程设计的目的就是设计一个发送TCP数据包的程序,并根据本设计说明TCP数据包的结构以及TCP协议与IP协议的关系,使学生对TCP协议的工作原理有更深入的认识。
运行环境:MicrosoftVisua1C++6.0
二、概要设计(抽象数据类型定义)
本程序的功能是填充一个TCP数据包,并发送给目的主机。
1)以命令行形式运行:SendTCPsourse_ipsourse_portdest_ipdest_port其中,SendTCP为程序名;SOUrSe_ip为源端IP地址;SOUrSe_port为源端口;dcst_ip为目的IP地址;dest_pOrt为目的端口。
2)其它的TCP头部参数请自行设定。
3)数据字段为"Thisismyhomeworkofnetwork,Iamhappy!,,0
4)发送成功后在屏幕上输出“SendOK”。
5)程序流程图如下:
三、详细设计(主要算法和函数间的调用关系)
本课程设计的目标是发送一个TCP资料包,可以利用原始套接字来完 成这个工作。整个程序由初
始化原始套接字和发送TCP数据包两个部分组成。
1)使用原始套接字
SOCKETsock;
sock=socket(AF_INET,SOCK_RAW,IPPROTO_IP);
为使用发送接收超时设置,必须将标志位置位置为WSA_F1AG_OVER1APPED0在本课程设计中,发送TCP包时隐藏了自己的IP地址,因此我们要自己填充IP头,设置IP头操作选项。其中f1ag设置为ture,并设定IPJIDRINC1选项,表明自己来构造IP头。
2)超时设置
B∞1F1ag=TRUE;
setsockopt(sock,IPPROTOIP,IPHDRINC1,(char*)&F1ag,sizeof(F1ag));
Inttimeout=1000;
setsockopt(sock,SO1SOCKET,SOSNDTIMEO,(char*)⅛timeout,sizeof(timeout));
在这里我们使用基本套接字SOJSOCKET,设置SO_SNDTIMEO表示使用发送超时设置,超时时间设置为IOOOms03)定义IP首部
typedefstructiphdr
UCHARh」enver; /∕4位首部长度+4位IP版本号
UCHARtos; 〃8位服务类型TOS
USHORTtota1_1en;〃16位总长度(字节)
USHORTident; 〃16位标识
USHORTfragandf1ags;〃3位标志位
UCHARtt1; | 〃8位生存时间TT1 |
UCHARproto; USHORTchecksum; U1ONGSourceIP; | /∕8位协议(TCP,UDP或其它) 〃16位IP首部校验和 //32位源IP地址U1ONG |
destIP;//32位目的IP地址}IP_HEADER;)
4)定义TCP伪首部
typedefstructpsd_hdr
(
U1ONGsaddr; 〃源地址
daddr; 〃目的地址
UCHARmbz;
UCHARptc1; 〃协议类型
USHORTtcp1;〃TCP长度
}PSD_HEADER;
5)定义TCP首部
typedefstruct_tcphdr
USHORTthsport; | 〃16位源端口号 |
USHORTth_dport; | 〃16位目的端口 |
U1ONGthseq; | //32位序列号 |
U1ONGth_ack; | //32位确认号 |
UCHARth1enres; | //4位首部长度/6位保留字 |
UCHARth_f1ag; | //6位标志位 |
USHORTth_win; | 〃16位窗口大小 |
USHORTth_sum; | //16位校验和 |
USHORTth_urp; | //16socket编程实验的心得体会位紧急数据偏移量 |
}TCP_HEADER; | |
6)计算校验和的子函数
在填充数据包的过程中,需要调用计算校验和的函数CheCkSUm两次,分别用于校验IP头和
TCP头部(加上伪头部),其实现代码如下:
USHORTchecksum(USHORT*buffer,intsize)
unsigned1ongcksum=0;whi1e(size>1)
(
cksum+=*buffer++;
size-=Sizeof(USHORT);
)
if(size)
cksum+=*(UCHAR*)buffer;
cksum=(cksum>>16)+(cksum&Oxffff);
cksum+=(cksum>>16);
return(USHORT)(^cksum);
)
四、调试分析(调式过程中出现的问题及如何改正)
此图为第一次运行时出现的错误。
错误原因为:当时没有输入源ip地址和目的ip地址。
改正:在VC的'工程设置’菜单栏中输入源ip地址和目的ip地址, 即可运行成功。
五、心得体会(组内成员的分工及实习期间的体会)
D成员分工
张欣:代码的编写与修改,设计报告的数据流程图的设计
刘凯莉:代码的调试与分析
胡燕:设计报告的完成
2)心得体会
这次的课程设计让我们学到了很多东西。最大的收获是学会了TCP数据包的填充和发送。在对TCP数据包进行填充时,首先需要我们去充分了解它的数据结构,在这个过程中可以了解相应字节上应该存放的内容和它们的功能。在实现TCP数据包的发送中,第一次深深接触了
网络编程接口SoCket套接字的相关知识,虽然本次的课程设计只用到了其中一小部分知识,但这并不会影响对这方面知识的全面了解。总之这次的课程设计,让我们对网络中的数据收发有了一定的了解,并激发了对计算机网络的浓厚兴趣。
六、用户手册(系统的使用方法介绍)
"C:\Users\Administrator\Desktop\Debug\1.exe"192.
sendokJ
Pressanykeytocontinue
源代码如下:
^inc1ude<stdio.h>
typedefstructtsdhdr〃定义TCP伪首部{U1ONGsaddr;〃源地址U1ONGdadc1r; 〃目的地址
UCHARmbz; 〃没用
UCHARptc1; 〃协议类型
USHORTtcp1; 〃TCP长度
}PSD_HEADER;
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论