武汉理工大学计算机网络课程设计.docx
- 文档编号:10203546
- 上传时间:2023-05-24
- 格式:DOCX
- 页数:10
- 大小:143.96KB
武汉理工大学计算机网络课程设计.docx
《武汉理工大学计算机网络课程设计.docx》由会员分享,可在线阅读,更多相关《武汉理工大学计算机网络课程设计.docx(10页珍藏版)》请在冰点文库上搜索。
武汉理工大学计算机网络课程设计
学号:
成绩:
课程实践报告
题目
发送TCP数据包
学院
计算机科学与技术
专业
软件工程
班级
软件zy1302
姓名
指导教师
刘东飞
2016
年
6
月
9
日
课程实践设计任务书
学生姓名:
专业班级:
软件zy1302
指导教师:
刘东飞工作单位:
计算机学院
题目六:
发送TCP数据包
初始条件:
(1)学习相关知识
(2)C/C++/VC/VB/JAVA语言
(3)PC机一台
要求完成的主要任务:
(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)
本设计的功能是填充一个TCP数据包,并发送给目的主机。
1)以命令行形式运行:
SendTCPsource_ipsource_portdest_ipdest_port,其中SendTCP是程序名,source_ip为源端IP地址,source_port为源端口号,dest_ip为目的地址,dest_port为目的端口号。
2)其他的TCP头部参数请自行设定。
3)数据字段为“Thisismyhomeworkofnetwork,Iamhappy!
”。
4)成功发送后在屏幕上输出“sendOK”。
时间安排:
第一、二天:
查阅资料,学习算法
第三、四天:
编程调试
第五天:
书写报告
指导教师签名:
年月日
系主任(或责任教师)签名:
年月日
发送TCP数据包
一、目的与要求
通过一个实际网络协议或网络应用系统的分析与总体设计,综合运用所学知识,加深对网络知识理解和掌握。
同时培养学生分析问题和解决问题的能力,以及软件文档的制作能力。
二、设计内容
本设计的功能是填充一个TCP数据包,并发送给目的主机。
1)以命令行形式运行:
SendTCPsource_ipsource_portdest_ipdest_port,其中SendTCP是程序名,source_ip为源端IP地址,source_port为源端口号,dest_ip为目的地址,dest_port为目的端口号。
2)其他的TCP头部参数请自行设定。
3)数据字段为“Thisismyhomeworkofnetwork,Iamhappy!
”。
4)成功发送后在屏幕上输出“sendOK”。
三、设计步骤与方法
1.系统调研:
查阅文献,熟悉系统功能和开发工具;
2.系统分析与设计:
确定功能结构,数据结构,用户界面以及开发平台;对各功能模块进行准确的定义;确定各功能模块的算法并画出相应的数据流图;
3.编程并上机调试。
4.撰写课程实践设计报告(说明书)。
四、实现与调试
1.TCP报文格式
TCP协议的数据传输单位称为报文段,其格式如图-1所示。
报文段报头的长度是20B~60B,选项部分长度最多为40B。
TCP报文段主要包括以下字段。
图-1TCP数据包头部的格式
端口号:
端口号字段包括源端口号和目的端口号。
每个端口号的长度是16位,分别表示发送该TCP包的应用进程的端口号和接收该TCP包的应用进程的端口号。
序号:
长度为32位。
由于TCP协议是面向数据流的,它所传送的报文段可以视为连续的数据流,因此需要给每一字节编号。
序号字段的“序号”指的是本报文段数据的第一个字节的序号。
确认号:
该字段的长度为32位,它表示接收端希望接收下一个TCP包的第一个字节的序号。
报文长度:
该字段长度为4位。
TCP报文长度是以4B为一个单元来计算的,实际上报文长度在20B~60B之间。
因此这个字段的值在5~15之间。
保留:
长度为6位,留做今后使用,目前全部置0.
控制:
这个字段定义了6种不同的标志,每一个标志占一位,在同一时间可以设置一位或多位。
URG位为1时,表明应尽快把数据传送给应用程序,否则表明允许数据在缓存中存放一段时间。
RST位为1时,表明要强制切断连接。
SYN位为1时,表明有确立连接的请求,这时,把序号字段的初始值作为序号字段的值,以便开始通信。
FIN位为1时,表明发送放已经没有数据发送了。
窗口大小:
长度为16位,指向必须紧急处理的数据的位置,因此最多能够传送的数据为65535B。
紧急指针:
该字段长度为16,指向必需紧急处理的位置,只有当标志URG=1时紧急指针才生效。
从TCP报头后面的报文数据开始,到紧急指针所指出长度的数据,就是必须紧急处理的数据。
选项:
该字段可以多达40B,包括单字节选项和多字节选项。
校验和:
该字段长度为16位,校验和的校验范围包括伪头部,TCP报头以及应用层来的数据。
其计算方法与IP协议头部校验和的计算方法一样。
伪头部为12B,它本身并不是TCP数据包的真头部,只是在计算校验和时,临时和TCP数据包连接在一起。
伪头部的格式如图-2所示
08162431
源IP地址
目的IP地址
00000000
协议号(6)
TCP长度
图-2伪头部的格式
2.具体设计
2.1创建一个原始套接字,并设置IP头选项
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头。
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头和TCP头以及TCP伪部的构造请参考下面它们的数据结构。
typedefstruct_iphdr//定义IP首部
{
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;
typedefstructpsd_hdr//定义TCP伪首部
{
ULONGsaddr;//源地址
ULONGdaddr;//目的地址
UCHARmbz;//没用
UCHARptcl;//协议类型
USHORTtcpl;//TCP长度
}PSD_HEADER;
typedefstruct_tcphdr//定义TCP首部
{
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);
}
3.程序流程图
图-3程序流程图
五、设计结果与分析
1.输入:
sendtcp192.168.1.10280192.168.1.10280
2.输入要发送的字符串:
Thisismyhomeworkofnetwork,Iamhappy!
”,并回车
六、设计总结与体会
一开始拿到这个题目,首先是感觉很简单,但仔细一考虑,发现并不是那么回事。
。
由于我比较熟悉Java,本想用Java来实现这个课程设计,但发现Java把网络编程封装的太高层了,照题目的意思,要对TCP数据包进行填充,所以果断放弃了使用熟悉的Java,改用C语言。
做了这样一个决定以后,发现根本不知道如何下手,于是只能上网查找资料,发现已经有很多学长学姐做过类似的工作,于是我便照葫芦画瓢,一一自己实现,确实是学到了很多,要对TCP数据包进行填充,首先就要正真熟悉它的数据结构,在相应字段放的是什么内容,实现的是什么功能,其次我还接触了网络编程接口socket套接字的相关知识,确实是非常考验我自学的能力,激发了我很大的兴趣。
通过这个课程设计,我的自学能力和实践能力得到了很大的提升,而且将这学期所学的计算机网络的理论知识确实的和时间结合了起来,对计算机网络有了更加深刻的理解,非常感谢老师和其他帮助我的同学。
七、参考资料
1.谢希仁,《计算机网络》(第5版),电子工业出版社
2.吴功宜、胡晓英等编著.《计算机网络课程设计》.北京:
机械工业出版社,2010.8
3.TCP/IP详解.卷1,协议,(美)W.RichardStevens著
4.TCPSockets编程,(加)JesseStorimer著
5.TCPhttps:
//en.wikipedia.org/wiki/TCP
本科生课程实践成绩评定表
班级:
软件zy1302班姓名:
学号:
序号
评分项目
满分
实得分
1
学习态度认真、遵守纪律
10
2
设计分析合理性
10
3
设计方案正确性、可行性、创造性
20
4
设计结果正确性
40
5
设计报告的规范性
10
6
设计验收
10
总得分/等级
评语:
注:
最终成绩以五级分制记。
优(90-100分)、良(80-89分)、中(70-79分)、
及格(60-69分)、60分以下为不及格
指导教师签名:
2016年 月 日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 武汉理工大学 计算机网络 课程设计
![提示](https://static.bingdoc.com/images/bang_tan.gif)
文档标签
- 浙江理工大学计算机网络课程设计
- 武汉大学计算机学院计算机系统
- 武汉工程大学程序设计
- 计算机网络课程设计广东海洋大学计算机网络课程设计
- 武汉理工大学自控设计
- 武汉理工大学计算机科学技术
- 语言程序设计武汉理工大学
- 燕山大学计算机网络课程设计
- 武汉理工大学机械设计试题
- 武汉理工大学网络管理期末
- 网络管理课程设计BER
- 武汉大学城市设计学院网络
- 武汉理工大学机电工程学院机械
- 武汉理工大学无机工厂设计
- 武汉理工大学网络大学英语
- 淮海工学院计算机网络课程设计
- 南京理工大学网络课程设计网络课程设计
- 武汉理工大学算法设计实验
- 大学计算机网络课程全年
- 江苏大学机电课程设计
- 浙江理工大学计算机组成
- 浙江海洋学院计算机网络
- 浙江大学计算机试题计算
- 浙江理工大学计算机组成
- 浙江理工大学化工程制浆