计算机网络课程设计TCP数据包.docx
- 文档编号:4298859
- 上传时间:2022-11-29
- 格式:DOCX
- 页数:9
- 大小:54.05KB
计算机网络课程设计TCP数据包.docx
《计算机网络课程设计TCP数据包.docx》由会员分享,可在线阅读,更多相关《计算机网络课程设计TCP数据包.docx(9页珍藏版)》请在冰豆网上搜索。
计算机网络课程设计TCP数据包
《计算机网络》实验报告
题目发送TCP数据包
成绩
学院名称
专业班级
学生姓名
学号
指导教师
二○一五年七月一日
目录
摘要…………………………………………………………….3
关键词………………………………………………………….3
一、背景概述……………………………………………….....3
二、设计内容………………………………………………….4
三、设计要求………………………………………………….4
四、需求分析………………………………………………….4
五、总体设计………………………………………………….4
程序流程图……………………………………………….5
设计思路………………………………………………….5
设计环境………………………………………………….5
基本功能………………………………………………….7
详细设计………………………………………………….7
六、总结与体会………………………………………………9
七、参考文献…………………………………………………10
摘要
Internet是网络的集合,包括ARPANET、NSFNET、分布在各地的局域网、以及其它类型的网络,如(DDN,DefenseDataNetwork美国国防数据网络),这些统称为Internet。
所有这些大大小小的网络互联在一起。
(因为大多数网络基本协议是由DDN组织开发的,所以以前有时DDN与Internet在某种意义上具有相同的含义)。
网络上的用户可以互相传送信息,除一些有授权限制和安全考虑外。
一般的讲,互联网协议文档案是Internet委员会自己采纳的基本标准。
TCP/IP标准与其说由委员会指定,倒不如说由\"舆论\"来开发的。
任何人都可以提供一个文档,以RFC(RequestforComment需求注释)方式公布。
TCP/IP的标准在一系列称为RFC的文档中公布。
文档由技术专家、特别工作组、或RFC编辑修订。
公布一个文档时,该文档被赋予一个RFC量,如RFC959说明FTP、RFC793说明TCP、RFC791说明IP等。
最初的RFC一直保留而从来不会被更新,如果修改了该文档,则该文档又以一个新号码公布。
因此,重要的是要确认你拥有了关于某个专题的最新RFC文档。
文后会列出主要的RFC文档号。
本课主要致力于发送TCP数据包。
关键词TCP
一、背景概述
TCP(TransmissionControlProtocol传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC793定义。
在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能,用户数据报协议(UDP)是同一层内另一个重要的传输协议。
在因特网协议族(Internetprotocolsuite)中,TCP层是位于IP层之上,应用层之下的中间层。
不同主机的应用层之间经常需要可靠的、像管道一样的连接,但是IP层不提供这样的流机制,而是提供不可靠的包交换。
应用层向TCP层发送用于网间传输的、用8位字节表示的数据流,然后TCP把数据流分区成适当长度的报文段(通常受该计算机连接的网络的数据链路层的最大传输单元(MTU)的限制)。
之后TCP把结果包传给IP层,由它来通过网络将包传送给接收端实体的TCP层。
TCP为了保证不发生丢包,就给每个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收。
然后接收端实体对已成功收到的包发回一个相应的确认(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据包就被假设为已丢失将会被进行重传。
TCP用一个校验和函数来检验数据是否有错误;在发送和接收时都要计算校验和。
二、设计内容
本课程设计的目标是发送一个TCP资料包,可以利用原始套接字来完成这个工作。
整个程序由初始化原始套接字和发送TCP数据包两个部分组成。
三、设计要求
1)以命令行形式运行:
SendTCPsourse_ipsourse_portdest_ipdest_port
其中,SendTCP为程序名;sourse_ip为源端IP地址;sourse_port为源埠;dest_ip为目的IP地址;dest_port为目的埠。
2)其它的TCP头部参数请自行设定。
3)数据字段为“Thisismyhomeworkofnetwork,Iamhappy!
”。
4)发送成功后在屏幕上输出”sendOK”。
四、需求分析
当应用层向TCP层发送用于网间传输的、用8位字节表示的数据流,TCP则把数据流分割成适当长度的报文段,最大传输段大小(MSS)通常受该计算机连接的网络的数据链路层的最大传送单元(MTU)限制。
之后TCP把数据包传给IP层,由它来通过网络将包传送给接收端实体的TCP层。
TCP为了保证报文传输的可靠[1],就给每个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收。
然后接收端实体对已成功收到的字节发回一个相应的确认(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据(假设丢失了)将会被重传。
在数据正确性与合法性上,TCP用一个校验和函数来检验数据是否有错误,在发送和接收时都要计算校验和;同时可以使用md5认证对数据进行加密。
在保证可靠性上,采用超时重传和捎带确认机制。
在流量控制上,采用滑动窗口[1]协议,协议中规定,对于窗口内未经确认的分组需要重传。
在拥塞控制上,采用广受好评的TCP拥塞控制算法(也称AIMD算法)。
该算法主要包括三个主要部分:
1)加性增、乘性减;2)慢启动;3)对超时事件做出反应。
五、总体设计
程序流程图
设计思路
编制本程序前要对TCP协议有一定的了解。
当应用程序有报文需要通过TCP发送时,它就将此应用层报文传送给执行TCP协议的传输实体。
TCP传输实体将用户数据加上TCP报头,形成TCP数据包,在TCP数据包上增加IP头部,形成IP包。
下图显示的是TCP数据包和IP包的关系。
TCP协议的传输单元为报文段,其格式如图所示。
报文段报头的长度为20B~60B。
其中固定长度为20B,报文段长度最多为40B。
TCP报文段主要包括以下字段。
·埠号:
埠号字段包括源埠号和目的埠号。
每个埠号的长度是16位,分别表示发送该TCP包的应用进程的埠号和接收该TCP包的应用进程的埠号。
·序号:
长度为32位。
由于TCP协议是面向数据流的,它所传送的报文段可以视为连续的数据流,因此需要给每一个字节编号。
序号字段的“序号”指的是本报文段数据的第一个字节的顺序号。
TCP头部
数据
0151631
源端口号
目的端口号
序号
确认号
报头长度
保留
URG
ACK
PSH
RST
SYN
FIN
窗口大小
校验和
紧急指针
选项及填充
·确认号:
该字段的长度为32位,它表示接收端希望接收的下一个TCP包的第一个字节的序号。
·报头长度:
该字段长度为4位。
TCP报头长度是以4B为一个单元来计算的,实际上报头长度在20B~60B子间。
因此这个字段的值在5~15之间。
·保留:
长度为6位,留作今后使用,目前全部置0。
·控制:
这个字段定义了6种不同的标志,每个标志占一位,在同一时间可以设置一位或多位。
URG为1时,表明有需要紧急处理的数据。
ACK为1时,表明确认号的字段有效。
PST位为1时,表明要强制切断连接。
SYN位为1时,表明有确立连接的请求,这时,把序号字段的初始值作为序号字段的值,以便开始通信。
FIN为1时,表明发送方已经没有资料发送了。
·窗口大小:
长度为16位,窗口对应的数据是以字节为单位的数据,因此最多能够传送的数据为65535B。
·紧急指针:
该字段的长度为16位,指向必须紧急处理的数据的位置,只有当标志URG=1时紧急指针才有效。
从TCP报头后面的报文资料开始,到紧急指针所指出的长度的数据,就是必须紧急处理的数据。
·选项:
该字段可以多达40B,包括单字节选项和多字节选项。
·校验和:
该字段长度多达16位,校验和的校验范围包括伪头部、TCP报头以及应用层来的数据。
其计算方法与IP协议头部的校验的计算方法一样。
伪头部为12B,它本身并不是TCP数据包的真正头部,只是在计算校验和时,临时和TCP数据包连接在一起。
伪头部的格式如下图所示。
源IP地址
目的IP地址
00000000
协议号(6)
TCP长度
设计环境
软件:
MicrosoftVisualC++6.0;硬件:
PC机一台。
基本功能
填充一个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,并设定IP_HDRINCL选项,表明自己来构造IP头。
注意,如果设置IP_HDRINCL选项,那么必须具有administrator权限,要不就必须修改注册表:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Afd\Parameter\
修改键:
DisableRawSecurity(类型为DWORD),把值修改为1。
如果没有,就添加。
BOOLFlag=TRUE;
setsockopt(sock,IPPROTO_IP,IP_HDRINCL,(char*)&Flag,sizeof(Flag));
inttimeout=1000;
setsockopt(sock,SOL_SOCKET,SO_SNDTIMEO,(char*)&timeout,sizeof(timeout));
在这里我们使用基本套接字SOL_SOCKET,设置SO_SNDTIMEO表示使用发送超时设置,超时时间设置为1000ms。
2.2定义IP头部、TCP头部和伪头部的数据结构
//定义IP首部
typedefstruct_iphdr
{
UCHARh_lenver;//4位首部长度+4位IP版本号
UCHARtos;//8位服务类型TOS
USHORTtotal_len;//16位总长度(字节)
USHORTident;//16位标识
USHORTfrag_and_flags;//3位标志位
UCHARttl;//8位生存时间TTL
UCHARproto;//8位协议(TCP,UDP或其它)
USHORTchecksum;//16位IP首部校验和
ULONGsourceIP;//32位源IP地址
ULONGdestIP;//32位目的IP地址
}IP_HEADER;
//定义TCP伪首部
typedefstructpsd_hdr{
ULONGsaddr;//源地址
ULONGdaddr;//目的地址
UCHARmbz;//没用
UCHARptcl;//协议类型
USHORTtcpl;//TCP长度
}PSD_HEADER;
//定义TCP首部
typedefstruct_tcphdr
{
USHORTth_sport;//16位源埠
USHORTth_dport;//16位目的端口
ULONGth_seq;//32位序列号
ULONGth_ack;//32位确认号
UCHARth_lenres;//4位首部长度/6位保留字
UCHARth_flag;//6位标志位
USHORTth_win;//16位窗口大小
USHORTth_sum;//16位校验和
USHORTth_urp;//16位紧急数据偏移量
}TCP_HEADER;
2.3计算校验和的子函数
在填充数据包的过程中,需要调用计算校验和的函数checksum两次,分别用于校验IP头和TCP头部(加上伪头部),其实现代码如下:
USHORTchecksum(USHORT*buffer,intsize)
{
unsignedlongcksum=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);
}
六、总结与体会
这次的课程设计让我学到了很多东西。
我最大的收获是学会了TCP数据包的填充和发送。
在对TCP数据包进行填充时,首先需要我们去充分了解它的数据结构,在这个过程中可以了解相应字节上应该存放的内容和它们的功能。
在实现TCP数据包的发送中,我第一次深深接触了网络编程接口socket套接字的相关知识,虽然本次的课程设计只用到了其中一小部分知识,但这并不会影响到我对这方面知识的全面了解。
总之这次的课程设计,让我对网络中的数据收发有了一定的了解,并激发了我对计算机网络的浓厚兴趣。
七、参考文献
(1)谢希仁编着,《计算机网络》,电子工业出版社,2003年
(2)周明天、汪文勇编着,“TCP/IP网络原理与技术”,清华大学出版社,1993年
(3)施炜、李铮、秦颍编着,“WindowsSockets规范及应用-Windows网络编程接口”,Document,1995年
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机网络 课程设计 TCP 数据包
![提示](https://static.bdocx.com/images/bang_tan.gif)