第一篇:数据包捕获与协议实验报告
计算机网络实验(实习)报告
Ⅰ.实验(实习)名称 :数据包捕获与协议分析
实验(实习)日期
专业姓名:学号:(或使用青岛农业大学实验报告纸)
1、实验目的(1)掌握网络协议分析工具Ethereal的使用方法;
(2)截获数据包并对它们观察和分析,了解协议的运行机制;
2、实验内容:
(1)设计一个捕获HTTP实现的完整过程,并对捕获的结果进行分析和统计。
要求:
(2)设计一个捕获TCP实现的完整过程,并对捕获的结果进行分析和统计。
要求:给出捕获某一数据包后的屏幕截图。以16进制形式显示其包的内容,并分析
TCP报文(源端口、目的端口、序号、确认号,ACK、SYN、窗口等)。
(3)设计一个捕获ICMP实现的完整过程,并对捕获的结果进行分析和统计
要求:给出捕获某一数据包后的屏幕截图。以16进制形式显示其包的内容,并分析
该ICMP报文。
(4)设计一个捕获IP数据包的过程,并对捕获的结果进行分析和统计
要求:给出捕获某一数据包后的屏幕截图。以16进制形式显示其包的内容,并分析
在该数据包中的内容:版本首部长度、服务类型、总长度、标识、片偏移、寿命、协议、源Ip地址、目的地址
3.实验总结(掌握了哪些内容?遇到了什么问题?如何解决的?你的体会或收获如何?)
第二篇:计算机网络课程设计_IP数据包的捕获与分析[范文]
CENTRAL SOUTH UNIVERSITY
计算机网络课程设计报告
目录
第一章 课程设计的目的与要求..........................错误!未定义书签。1.1 课程设计的目的...................................错误!未定义书签。1.2 课程设计的要求....................................................1 第二章 课程设计的内容.................................................3 2.1 课程设计的内容....................................................3 2.2 内容的要求........................................................3 第三章 程序分析与设计.................................................4 3.1 IP数据包..........................................................4 3.1.1 IP数据包的格式说明..........................................4 3.1.2 IP数据包的格式..............................................4 3.1.3 IP数据包的C++定义...........................................5 3.1.4 IP数据包的解析..............................................6 3.2 套接字............................................................7 3.1.4 套接字的使用.................................................7 3.1.4 使用原始套接字...............................................7 3.3 接受数据包........................................................7 第四章 实验结果.......................................................10 4.1 程序截图.........................................................10 第五章 总结..........................................................11 5.1 实验心得.........................................................11 第六章 附录..........................................................12 6.1 源代码...........................................................12
第一章 课程设计的目的与要求
1.1 课程设计的目的
计算机网络课程设计的目的,是为了让学生更深入地掌握计算机网络的核心内容,实现理论与实践相结合。让学生用具体的实践成果,体现对理论知识的掌握程度。有利于学生提高计算机网络的实践能力,加深对计算机网络理论知识的理解。
1.2 课程设计的要求
(1)编写程序,实现系统的基本功能,鼓励自行增加新功能;
(2)要有用户界面:要求至少采用文本菜单界面;鼓励采用图形菜单界面;(3)写课程设计报告,内容包括: 封面(参见附录I)
需求分析:以无歧义的陈述说明程序设计的任务,强调的是程序要做什么?给出功能模块图和流程图。同时明确规定:输入的形式和输出值的范围;输出的形式;程序所能够达到的功能;测试数据,包括正确的输入及其输出结果和含有错误的输入及其输出结果。
概要设计:包括程序设计组成框图,程序中使用的存储结构设计说明(如果指定存储结构请写出该存储结构的定义)。
详细设计:包括模块功能说明(如函数功能、入口及出口参数说明,函数调用关系描述等),每个模块的算法设计说明(可以是描述算法的流程图)。其中源程序要按照写程序的规则来编写,结构清晰,重点函数的重点变量,重点功能部分要加上清晰的程序注释。
运行结果:包括典型的界面、输入和输出数据等;
总结:包括课程设计中遇到的问题,解决问题的过程及体会、收获、对课程设计的认识与思考等。
附录:包括主要程序清单,要有适当的注释,使程序容易阅读。
(4)课程设计报告书写规范参见附录II,不按照规范书写的,成绩不能评为“优”或“良”。
(5)无论在校外、校内,都要严格遵守学校和所在单位的学习和劳动纪律、1 规章制度,学生有事离校必须请假。课程设计期间,无故缺席按旷课处理;缺席 时间达四分之一以上者,其成绩按不及格处理。
第二章 课程设计的内容
2.1 课程设计的内容
本次实验的要求在网络环境,使用VC++编写程序实现捕获网络中的IP数据包,解析数据包的内容,将结果显示在标准输出上,并同时写入日志文件。
2.2 内容的要求
(1)以命令行形式运行(应如程序名+参数名):ipparse logfile,其中ipparse是程序名,而logfile为该程序所带参数,其代表记录结果的日志文件。(2)在标准输出和日志文件中写入捕获的IP包的版本、头长度、服务类型、数据包总长度、数据包标识、分段标志、分段偏移值、生存时间、上层协议类型、头校验和、源IP地址和目的IP地址等内容。(3)当程序接收到键盘输入Ctrl+C时退出。
第三章 程序设计与分析
3.1 IP数据包
3.1.1 IP数据包的格式说明
IP数据包格式包含了标头固定部分,标头可变部分和数据区三部分。IP数据报标头部分固定为20个字节,其中包含了12个参数域,各参数域隐含着网间协议的传输机制。IP具体的标头格式如图1所示。
各参数域的具体含义如下:
1)版本号:长度4位,表示所使用的IP协议的版本。IPv4版本号字段值为4;IPV6版本号字段号的值为6.2)标头长:长度4位,定义了一个以4B为一个单位的IP包的报头长度 3)服务类型:共8位,高3位组成优先级子域,随后4位组成服务类型子域。4)数据报总长度:总长度为2B(即6位)。定义了以字节为单位的数据报的总长度。5)重装标识:长度16位,用于识别IP数据报的编号,让目的主机判断新来的数据属于哪个分组。
6)分片标识:共3位,最高位为0;DF禁止分片标识。DF=0,可以分片;DF=1,不能分片。MF:分片标识。MF=0,表示接的是最后一个分片;MF=1,不是最后一个分片。
7)片偏移值:共13位,说明分片在整个数据报中的相对位置。
8)生存周期:8位,用来设置数据数据报在整个网络传输过程中的寿命。常以一个数据报可以经过的最多的路由器跳步数来控制。9)协议类型:共8位,表示该IP数据报的高层协议类型。10)标头校验和:共16位,用于存放检查报头错误的校验码。
11)源、宿主机地址:共32位,分别表示发送和接受数据报的源主机和宿主机的IP地址。
选项数据域:0-40B,用于控制和测试
3.1.2 IP数据包的格式
4位版本4位首部长度8位服务类型(TOS)3位标志8位协议32位源IP地址32位目的IP地址16位总长度(字节为单位)13位片偏移16位首部检验和16位标识8位生存时间(TTL)
3.1.3 IP数据包的C++定义 typedef struct _IP { union {
BYTE Version;// 版本
BYTE HdrLen;//IHT };BYTE ServiceType;// 服务类型 WORD TotalLen;// 总长
WORD ID;// 标识
union {
WORD Flags;// 标志
WORD FragOff;// 分段偏移
};BYTE TimeToLive;// 生命期
BYTE Protocol;// 协议
WORD HdrChksum;// 头校验和
DWORD SrcAddr;// 源地址
DWORD DstAddr;// 目的地址 BYTE Options;// 选项
} IP;
3.1.4 IP数据包的解析
通过IP_HEADER解析IP头各个字段的代码: /*获取版本字段*/ ip.Version>>4;/*获取头部长度字段*/ ip.HdrLen & 0x0f;/*获取服务类型字段中的优先级子域*/ ip.ServiceType>>5;/*获取服务类型字段中的TOS子域*/(ip.ServiceType>>1)&0x0f;/*获取总长度字段*/ ip.TotalLen;/*获取标识字段*/ ip.ID;/*解析标志字段*/ DF =(ip.Flags>>14)& 0x01;MF =(ip.Flags>>13)& 0x01;/*获取分段偏移字段*/ ip.FragOff & 0x1fff;/*获取生存时间字段*/ ip.TimeToLive;/*获取协议字段*/ ip.Protocol;/*获取头校验和字段*/ ip.HdrChksum;/*解析源IP地址字段*/ inet_ntoa(*(in_addr*)&ip.SrcAddr);/*解析目的IP地址字段*/ inet_ntoa(*(in_addr*)&ip.DstAddr);3.2 套接字
3.2.1 套接字的使用
本程序使用套接字socket编程,将网卡设为能够接受流经网卡的所有类型的数据包。首先,初始化套接字,然后监听数据包,解析数据包。
SOCKET sock=socket(AF_INET,SOCK_RAW,IPPROTO_IP)用来创建套接字,其参数为通信发生的区字段和套接字的类型。
WSAIoctl(sock,IO_RCVALL ,&dwBufferInLen , sizeof(dwBufferInLen)函数用来把网卡设置为混杂模式。
recv(sock,buffer,65535,0)函数用来接收经过的IP包,其参数分别是套接字描述符,缓冲区的地址,缓冲区的大小。
3.2.1 使用原始套接字
要进行IP层数据包的接收和发送,应使用原始套接字。创建原始套接字的代码如下:
SOCKET sock;sock=WSASoccket(AF_INET,SOCK_RAW,IPPROTO_IP,NULL,0, WSA_FLAG_OVERLAPPED);在WSASoccket函数中,第一个参数指定通信发生的区字段,AF_INET是针对Internet的,允许在远程主机之间通信。第二个参数是套接字的类型,在AF_INET地址族下,有SOCK_STREAM、SOCK_DGRAM、SOCK_RAW三种套接字类型。在这里,设置为SOCK_RAW,表示声明的是一个原始套接字类型。第三个参数依赖于第二个参数,用于指定套接字所有的特定协议,这里使用IP协议。第四个参数为WSAPROTOCOL_INFO位,该位可以置空。第五个参数保留,永远置0。第六个参数是标志位,WSA_FLAG_OVERLAPPED表明可以使用发送接收超时设置。
创建原始套接字后,IP头就会包含在接收的数据中。然后,可以设置IP头操作选项,调用setsockopt函数。其中flag设置为true,并设定IP_HDRINCL选项,表明用户可以亲自对IP头进行处理。
BOOL flag=true;setsockopt(sock,IPPROTO_IP,IP_HDRINCL,(CHAR*)&flag,sizeof(flag));之后,使用如下代码完成对socket的初始化工作: /*获取主机名*/ char hostName[128];gethostname(hostName,100);/*获取本地IP地址*/ hostent * pHostIP;pHostIP = gethostbyname(hostName);/*填充SOCKADDR_IN结构的内容*/ sockaddr_in addr_in;addr_in.sin_addr = *(in_addr *)pHostIP->h_addr_list[0];addr_in.sin_family = AF_INET;addr_in.sin_port = htons(6000);/*绑定socket*/ bind(sock,(PSOCKADDR)&addr_in,sizeof(addr_in));填写sockaddr_in的内容时,其地址值应填写为本机IP地址,本机IP地址可以通过gethostbyname()函数获取;端口号可以随便填写,但不能与系统冲突;协议族应填为AF_INET。使用htons()函数可以将无符号短整型的主机数据转换为网络字节顺序的数据。最后使用bind(0函数将socket绑定到本机网卡上。绑定网卡后,需要用WSAIoctl()函数把网卡设置为混杂模式,使网卡能够接收所有网络数据,其关键代码如下:
#define SIO_RCVALL_WSAIOW(IOC_VENDOR,1)DWORD dwBufferLen[10];DWORD dwBufferInLen = 1;DWORD dwBytesReturned = 0;WSAIoct1(SnifferSocket, IO_RCVALL,&dwBufferInLen,sizeof(dwBufferInLen),&dwBufferLen,sizeof(dwBufferLen),&dwBytesReturned,NULL,NULL);如果接收的数据包中的协议类型和定义的原始套接字匹配,那么接收到的数据就拷贝到套接字中。因此,网卡就可以接收所有经过的IP包。
3.3 接收数据包 在程序中可使用recv()函数接收经过的IP包。该函数有四个参数,第一个参数接收操作所用的套接字描述符;第二个参数接收缓冲区的地址;第三个参数接收缓冲区的大小,也就是所要接收的字节数;第四个参数是一个附加标志,如果对所发送的数据没特殊要求,直接设为0。因为IP数据包的最大长度是65535B,因此,缓冲区的大小不能小于65535B。设置缓冲区后,可利用循环来反复监听接收IP包,用RECV()函数实现接收功能的代码如下:
#define BUFFER_SIZE 65535 char buffer[BUFFER_SIZE];//while(true){ recv(sock,buffer,BUFFER_SIZE,0);// /*然后是解析接收的IP包*/ }
设置缓冲区 接收数据包
第四章 实验结果
4.1 程序截图
第五章 总结
通过这次课程设计,我们了解到关于计算机网络数据传送及处理过程中,软件起到了巨大的作用。熟悉了C++语言在计算机网络方面的应用,是一次难得的机会。此外,我还了解了网络通信协议的基本工作原理及套接字的使用,虽然刚开始的时候比较模糊,但是通过与同学共同探讨和网上查阅资料,最终我成功完成了实验。这次课程设计培养了我们基本掌握网络编程的基本思路和方法,让我们懂得如何去学习这类东西。同时提高我们对所学计算机网络理论知识的理解能力,提高和挖掘我们对所学知识的实际应用能力和创新能力。同学们的合作是实验成功的必要条件,而谨慎对待事物的态度是成功的关键。
第六章 附录
6.1 源代码
#include
//定义IP头 { union {
BYTE Version;
//版本(前4位)
BYTE HdrLen;
//报头标长(后4位),IP头长度
};BYTE ServiceType;
//服务类型
WORD TotalLen;
//数据报总长
WORD ID;
//标识
union {
WORD Flags;
//标识(前3位)
WORD FragOff;
//分段偏移(后13位)
};BYTE TimeToLive;
//生存周期
BYTE Protocol;
//协议
WORD HdrChksum;
//头校验和
DWORD SrcAddr;
//源地址
DWORD DstAddr;
//目地地址
BYTE Options;
//选项 }IP_HEADER;
char * parseServiceType_getProcedence(BYTE b){ switch(b>>5)
//获取服务类型字段中优先级子域
{ case 7:
return “Network Control”;
//网络控制
break;case 6:
return “Internet work Control”;
//网络控制
break;case 5:
return “CRITIC/ECP”;
break;case 4:
return “Flash Override”;
//最优先信号
break;case 3:
return “Flsah”;
break;case 2:
return “Immediate”;
break;case 1:
return “Priority”;
//协议
break;case 0:
return “Routine”;
//路由
break;default:
return “Unknow”;
break;} } char * parseServiceType_getTOS(BYTE b){ b=(b>>1)&0x0f;
//获取服务类型字段中的TOS子域
switch(b)
{
case 0:
return “Normal service”;
//正常运行
break;case 1:
return “Minimize monetary cost”;
//成本
break;case 2:
return “Maximize reliability”;
//可靠性
break;case 4:
return “Maximize throughput”;
//吞吐量
break;case 8:
return “Minimize delay”;
//延迟
break;case 15:
return “Maximize security”;
//安全性
break;default:
return “Unknow”;
} } char * getProtocol(BYTE Protocol)
//获取协议字段共8位 { switch(Protocol)
//以下为协议号说明:
{
case 1:
return “ICMP”;
//Internet控制报文协议
case 2:
return “IGMP”;
//Internet组管理协议
case 4:
return “IP in IP”;
//移动IP数据封装和隧道
case 6:
return “TCP”;
//传输控制协议
case 8:
return “EGP”;
//外部网关协议
case 17:
return “UDP”;
//用户数据报文协议
case 41:
return “IPv6”;case 46:
return “RSVP”;
//资源预留协议
case 89:
return “OSPF”;
//Open Shortest Path First 开发式最短路径优先
default:
return “UNKNOW”;} } void ipparse(FILE* file,char* buffer){ IP_HEADER ip=*(IP_HEADER*)buffer;
//通过指针把缓冲区的内容强制转化为IP_HEADER数据结构
fseek(file,0,SEEK_END);
fprintf(file,“_______________________________________________rn”);fprintf(file,“版本号:IPV%drn”,ip.Version>>4);fprintf(file,“报头标长:%d(BYTE)rn”,((ip.HdrLen & 0x0f)*4));fprintf(file,“服务器类型 : %s,%srn”,parseServiceType_getProcedence(ip.ServiceType),parseServiceType_getTOS(ip.ServiceType));fprintf(file,“总长度 : %d(BYTE)rn”,ip.TotalLen);fprintf(file,“标识 : %drn”,ip.ID);fprintf(file,“标志位 DF:%d , MF=%drn”,((ip.Flags>>14)&0x01),((ip.Flags>>13)&0x01));fprintf(file,“分段偏移值 : %drn”,(ip.FragOff&0x1fff));
fprintf(file,“生存期 : %d(hops)rn”,ip.TimeToLive);fprintf(file,“协议 : %srn”,getProtocol(ip.Protocol));fprintf(file,“头校验和 : 0x%0xrn”,ip.HdrChksum);fprintf(file,“源IP地址 : %srn”,inet_ntoa(*(in_addr*)&ip.SrcAddr));fprintf(file,“目的IP地址 : %srn”,inet_ntoa(*(in_addr*)&ip.DstAddr));fprintf(file,“________________________________________________rn”);}
int main(){
FILE * file;if((file=fopen(“logfile.txt”,“wb+”))==NULL){
printf(“fail to open file %s”);
return-1;
}
WORD rv;WSADATA WSAData;
//定义了能够储存WSAStarup调用返回值的结构
rv=MAKEWORD(2,2);
//Winsock2版本
WSAStartup(rv,&WSAData);
SOCKET sock=socket(AF_INET,SOCK_RAW,IPPROTO_IP);//创建套接字,sock为套接字描述符
BOOL flag=true;setsockopt(sock,IPPROTO_IP,IP_HDRINCL,(CHAR*)&flag,sizeof(flag));//任意类型、任意状态套接口的设置选项值
char hostName[128];gethostname(hostName,100);
//获取主机名
hostent * pHostIP;
//获取本地IP地址
pHostIP = gethostbyname(hostName);
sockaddr_in addr_in;addr_in.sin_addr=*(in_addr *)pHostIP->h_addr_list[0];addr_in.sin_family = AF_INET;addr_in.sin_port = htons(6000);//将无符号短整型主机数据转换为网络字节顺序数据
bind(sock,(PSOCKADDR)&addr_in,sizeof(addr_in));
DWORD dwBufferLen[10];
//设置网卡为混杂模式
DWORD dwBufferInLen=1;DWORD dwBytesReturned=0;WSAIoctl(sock, IO_RCVALL,&dwBufferInLen,sizeof(dwBufferInLen), &dwBufferLen,sizeof(dwBufferLen),&dwBytesReturned,NULL,NULL);
char buffer[BUFFER_SIZE];
//设置缓冲区
char i,a;
printf(“
*************************************n”);
printf(“
*
IP数据包捕获程序
*n”);
printf(“
*
捕获并解析本机的数据包输入Y
*n”);
printf(“
*
放弃执行输入N
*n”);
printf(“
*
退出程序按 Ctrl+c
*n”);
printf(“
*************************************n”);cin>>i;system(“cls”);while(true&&i=='Y'||i=='y'){
int size=recv(sock,buffer,BUFFER_SIZE,0);
//接收数据包
if(size>0)
{
printf(“nnIP数据包捕获解析程序n”);
ipparse(stdout,buffer);
ipparse(file,buffer);
printf(“是否要继续捕获并解析本机的IP数据包? Y/N n”);
fflush(stdin);
cin>>i;
continue;
}
else
fclose(file);
return 0;}
closesocket(sock);}
计算机网络课程的结束已经过去将近1年,当时的学习也仅限于上课和考试。这次计算机网络课程设计给予了我一次难得的锻炼机会。刚拿到题目的时候,感觉还无从下手。后来通过上网查询各种资料和查阅书籍,我们慢慢摸索探讨出了整个组网的设计过程。该组网只是一个简单的酒店网络模拟,它离实际还是有相当的距离,需要进行不断地补充和完善。通过本次课程设计我们学到了不少新的东西,也发现了大量的问题,有些在设计过程中已经解决,有些还有待今后慢慢学习只要学习就会有更多的问题,有更多的难点,但也会有更多的收获。本次课程设计用到的packet tracer软件是我们第一次接触,但通过自学和网络的帮助,我们慢慢掌握了packet tracer软件的使用方法。从一开始的无处着手到通过自己的努力,我基本上完成了这次的任务,但是由于知识的欠缺及时间的限制,我们的成果仅限于现在完成的部分,还有很大的改善空间。总的来说,本次课程设计让我获益匪浅,希望以后还有这样锻炼自己的机会。
第三篇:基于数据包捕获与分析的个人防火墙论文
基于数据包捕获与分析的个人防火墙论文
本套设计论文描述及运行界面展示
摘 要
数据包过滤是一个用软件或硬件设备对向网络上传或从网络下载的数据流进行有选择的控制过程。数据包过滤的功能通常是在将数据包从一个网站向另一个网络传送的过程中允许或阻止它们的通过(更为常见的是在从英特网向内部网络传输数据时,或从内部网络向英特网传输)。若要完成数据包过滤,你就要设置好规则来指定哪些类型的数据包被允许通过和哪些类型的数据包将会被阻止。
基于数据包过滤的防火墙,能够很好地保护用户在与网络连接时的安全性。
我们的目标,就是通过截获数据包,并且对其进行分析,来放行或阻止网络访问,从而达到保护计算机安全的目的。
本论文主要讲述了下面几点:
一、数据包捕获及网络安全技术
二、系统的设计与实现
三、测试及其他
关键字:数据包捕获;防火墙;网络安全
Abstract Packet Filtering is the process a piece of software or device takes to selectively control the flow of data to and from a network.Packet Filters allow or block packets, usually while routing them from one network to another(most often from the Internet to an internal network, and vice-versa).To accomplish packet filtering, you set up rules that specify what types of packets are to be allowed and what types are to be blocked.The packet filtering based firewall can protect the security of computers very well.Our goal is to capture and analysis data packets ,so we can examines all packets that pass in and out of it to prevent packets from passing through ,and the computer is protected.The thesis presents these aspects:
1、Technology of Packet Filtering and Network Security
2、How to implement the system
3、Testing document and others Key Words: Packet Filtering、Firewall、network security
目 录 第一章 绪论 1 第一节 课题意义1 第二节 课题综述1
一、国内外发展情况 1
二、网络安全技术介绍 4
三、防火墙介绍 6
四、防火墙技术发展趋势8
五、防火墙产品发展趋势10 第二章 需求分析 11 第一节 需求分析11
一、功能调查11
二、初步设计12 第二节 可行性分析 12
一、技术可行性及方案选择 12 第三节 开发环境及工具 13
一、开发环境13
二、开发工具14 第三章 基础实现技术介绍 15 第一节 MFC介绍15 第二节 数据包过滤技术 15
一、数据包 15
二、数据包过滤是怎样工作的16
三、包过滤的优点 16 第四章 系统总体设计18 第一节 功能分析18 第二节 系统工作流程 19
一、系统工作流程图 18
二、原理分析20
三、系统工作过程描述 21 第五章 子模块设计 22 第一节 模块分析21
一、模块划分原则 22
二、模块划分23
三、模块接口定义 25 第二节 子模块详细设计 26
一、注册模块26
二、查询模块28
三、流量统计模块 29 第六章 出现问题及解决办法 32 第一节 出现问题32 第二节 无法解决的问题 33 第七章 测试 34 第一节 测试方案34 第二节 测试实例35 第三节 测试总结39 结束语 40 致谢 41 参考文献42
第四篇:传输层协议分析实验报告
2.传输层协议分析 2.A 数据包 捕获分析部分 2.1 实验目的 理解 TCP 报文首部格式和字段的作用,TCP 连接的建立和释放过程,TCP 数据传输中编号与确认的作用。
2.2 实验内容 应用 TCP 应用程序传输文件,截取 TCP 报文,分析 TCP 报文首部信息,TCP 连接的建立过程,TCP 数据的编号和确认机制。
2.3 实验原理 TCP 协议是传输控制协议的简称,工作在网络层协议之上,是面向连接的,可靠的,端到端的传输层协议。
1)TCP 的报文格式 TCP 报文段分为头部和数据两部分,如图 1:
图 1
TCP 报文段的总体结构 TCP 首部 TCP 数据部分
TCP 报文段首部又分为固定部分和选项部分,固定部分为 20B,如图 2 所示,这些字段的组合实现了 TCP 的所有功能。
图 2 TCP 报文段的首部
0
源端口 目的端口 序号 确认号 头部 长度(4bit)
保留 U R G A C K P S H R S T S Y N F I N
窗口 校验和 紧急指针 选项(长度可变)
填充 TCP 采用传输输连接的方式传送 TCP 报文,传输连接包括连接建立、数据传输和连
接释放三个阶段。
2)TCP 连接的建立 TCP 连接建立采用“3 次握手”方式。
首先,主机 A 的 TCP 向主机 B 的 TCP 发出连接请求报文段,其首部中的同步位 SYN 应置 1,同时选择一个序号 X,表明在后面传送数据时的第一个数据字节的序号是 X+1,如图 3所示:
图 3
TCP 连接建立的 3 次握手过程
然后,主机 B 的 TCP 收到连接请求报文段后,若同意,则发回确认。在确认报文段中应将 SYN 和 ACK 都置 1,确认号应为 X+1,同时也为自己选择一个序号 Y。
最后,主机 A 的 TCP 收到 B 的确认后,要向 B 发回确认,其 ACK 置 1,确认号为 Y+1,而自己的序号为 X+1。TCP 的标准规定,SYN 置 1 的报文段都要消耗掉一个序号。同时,运行客户进程的主机 A 的 TCP 通知上层应用进程,连接已经建立。当主机 A 向 B 发送第一个数据报文段时,其序号仍为 X+1,因为前一个确认报文段并不消耗序号。
当运行服务器进程的主机 B 的 TCP 收到主机 A 的确认后,也通知其上层应用进程,连接已经建立。
另外,在 TCP 连接建立的过程中,还利用 TCP 报文段首部的选项字段进行双方最大报文段长度 MSS 协商,确定报文段的数据字段的最大长度。双方都将自己能够支持的 MSS 写入选项字段,比较之后,取较小的值赋给 MSS,并应用于数据传送阶段。
3)TCP 数据的传送 为了保证TCP传输的可靠性,TCP采用面向字节的方式,将报文段的数据部分进行编号,每个字节对应一个序号。并在连接建立时,双方商定初始序号。在报文段首部中,序号字段和数据部分长度可以确定发送方传送数据的每一个字节的序号,确认号字段则表示接收方希望下次收到的数据的第一个字节的序号,即表示这个序号之前的数据字节均已收到。这样既做到了可靠传输,又做到了全双工通信。
当然,数据传送阶段有许多复杂的问题和情况,如流量控制、拥塞控制、重传机制等,本次实验不探究。
被动打开 主动打开 确认
确认 连接请求
4)TCP 连接的释放 在数据传输结束后,通信的双方都可以发出释放连接的请求。TCP 连接的释放采用“4次握手”。如图
应 用 进 程 释放连接通知主机应用进程A不再发送报文确认 应用进程释放连接①②确认B不再发送报文FIN,SEQ-XACK,SEQ=Y,ACK=X+1FIN,ACK,SEQ=Y,ACK=X+1ACK,SEQ=X+1,ACK=Y+1AB 图 4 TCP 连接释放的 4 次握手过程 首先,设图 4 中主机 A 的应用进程先向其 TCP 发出释放连接的请求,并且不再发送数据。TCP 通知对方要释放从 A 到 B 这个方向的连接,将发往主机 B 的 TCP 报文段首部的中止位置 1,其序号 X 等于前面已传送过的数据的最后一个字节的序号加 1。
主机 B 的 TCP 收到释放连接通知后即发出确认,其序号为 Y,确认号为 X+1,同时通知高层应用进程,如图中的箭头①。这样从 A 到 B 的连接就被释放了,连接处于半关闭状态,相当于主机 A 对主机 B 说“我已经没有数据发送了。但是如果你还有数据要发送,我仍然接收。” 此后,主机 B 不再接收 A 发来的数据。但若主机 B 还有一些数据要发给 A,则可以继续发送(这种情况很少)。主机 A 只要正确收到数据,仍然向 B 发送确认。
若主机 B 不再向主机 A 发送数据,其应用进程就通知 TCP 释放连接,如图中的箭头②。主机 B 发出的连接释放报文段必须将中止位 FIN 和确认位 ACK 置 1,并使其序号仍为 Y(因为签名发送的确认报文段不消耗序号),但是还必须重复上次已经发送过的 ACK=X+1。主机A 必须对此发出确认,将 ACK 置 1,ACK=Y+1,而自己的序号仍然是 X+1,因为根据 TCP 标准,前面发送过的 FIN 报文段要消耗掉一个序号。这样就把 B 到 A 的反方向的连接释放掉。主机A 的 TCP 再向其应用进程报告,整个连接已经全部释放。
2.4 实验步骤 骤 步骤 1
在 Wireshark 中设置过滤条件,协议为 TCP
HTTP,地址为本机->any,并开始截获报文;步骤 2
打开 www.xiexiebang.com.,完成后,保存截获的报文并命名为“TCP 学号”,分析捕获的报文。
这里,TCP 的连接和建立采用的是:
三次握手
方式,本机是
192.168.3.3
,远端主机是 192.168.3.183。
步骤 3
分析 TCP 连接建立过程的前 3 个报文,填写下表 1:
表 表 1
TCP 建立过程的三个报文信息 字段名称 第一条报文 第二条报文 第三条报文
报文序号 1704 1716 1718 Sequence Nunber 830 849 835 ACK Number 289 291 237 ACK 1 291 1 SYN 1 1 1
步骤 4
分析截获报文中数据发送部分的第一条 TCP 报文及其确认报文,将报文中的字段值填写在表格 2 中。
表 表 2
TCP 报文首部信息
字段名 长度 字段值 字段意义 发送报文 确认报文 源端口 16 发送
目标端口 16 确认 端口号是唯一标识 序号 32
确认好 32 确认
头部长度 4
保留 6
保留字段 窗口 16
校验和 16
紧急指针 16
选项(长度可变)
步骤 5
TCP 连接建立时,其报文首部与其它 TCP 报文不同,有一个 option 字段,它的作用是什么?结合 IEEE802.3 协议规定的以太网最大帧长分析此数据是怎么得出来的? 步骤 6
分析 TCP 数据传送阶段的前 8 个报文,将报文信息填入表 3:
表 表 3
TCP 数据传送部分的前 8 个报文 报文序号 报文种类 序号字段 确认号字段 数据长度 被确认报文序号 窗口 3744 确认 289 1 324 289 123 3754 发送 1 0 66
16580 3764 确认 1 1 344 291 123 3784 发送 1 0 66
16579 3794 确认 237 1 290 237 123 3804 发送 1 0 66
16593 3814 确认 289 0 290 290 16768 3824 确认 290 1 290 290 16768
2.5
实验总结 在实验中,通过分析截获的 TCP 报文首部信息,可以看到首部中的序号、确认号等字段是 TCP 可靠连接的基础。
分析 TCP 头部信息,分析“3 次握手”过程。通过对数据传送阶段报文的初步分析,了解数据的编码和确认机制。
总之,TCP 协议中的各项设置都是为了在数据传输时提供可靠的面向连接的服务。
2.B 编程造 构造 UDP 数据包 部分 使用 C 语言构造 UDP 数据包程序。
1)UDP 首部和伪首部结构体定义
/* UDP 首部*/ struct udphdr{ unsigned short u_src;unsigned short u_dst;unsigned short u_len;unsigned short u_cksum;char u_data[U_MAXLEN];//UDP 中校验使用的伪首部 struct pseudo_header {int srcIp;short udp_len;char rsv;char protocol;unsigned short src_port;
};unsigned short dsc_port;unsigned short len;unsigned short check_sum;char data[2];};
2)构建 UDP 报文数据
int build_udp_Package(struct socket_pair * sp,const unsigned char *buf,int len,unsigned char *udpPacket[],int *udpPacketLen){ *udpplen=sizeof(struct udp_hdr)+len;struct udp_hdr*uh=(struct udp_hdr*)udppkt;unsigned char*dbuf=(udppkt+sizeof(struct udp_hdr));memcpy(dbuf,buf,len);Uh->source=htons(s_port);Uh->dest=htons(d_port);Uh->len=htons(sizeof(struct udp_hdr0)+len);Uh->check=0;Un->check=udpcksum(d_ip,d_port,s_ip,udppkt,sizeof(struct udp_hdr)+len);return udppkt;}
第五篇:市场调查与预测实验报告
市
场
调
查
与
预
测的调会
查计
报102
3告班
智能手机在校大学生消费倾向和需求的调研报告 调查项目名称:襄阳市在校大学生智能手机调查
实验调查目的及要求:
随着社会的发展,电子行业的发展速度每年在成倍增长,一般的手机已经不能满足广大消费者的需求,使用智能手机的人所占手机使用者的比例也越来越大,尤其是在校大学生,智能手机可以说是电脑的简化,且能像电脑一样工作。在校大学生对于智能手机需求,价格,性能,品牌等方面的要求和喜好,什么样的手机受大学生们喜爱的,从而对校园智能手机市场进行准确定位,将这类手机推荐给各高校大学生们,满足同学需要,为厂家更有针对性的制造出适合在校大学生使用的手机,从而赢得更多市场.调查内容:
1、在校大学生对智能手机的需求和饱和容量和发展潜力。
2、当前在校大学生对智能手机的种类、品牌和销售状况。
3、有消费意向的在校大学生对智能手机的了解程度(包括品牌,性能等)
4、有消费意向的在校大学生理想的智能手机描述。
调查对象,地点和方法:
把本市各高校在校大学生分大
一、大
二、大
三、大四四组进行随机抽取调查,调查地点为学校食堂门口,用网络调查方法在校园广发邮件通过回收邮件调查。
调查时间:2011年12月1日~12月5日
人员安排
调研组长:张三,调查人员:小丽 小芳
复核员:张三
要保证复核的真实性和有效性。
调研说明:本次对襄阳市的各高校在校大学生进行了问卷调查,共发放问卷70余份,共有65人填写了问卷,剔除了5份缺项或回答与问题不符的问卷,共得到有效问卷60份,在有效调查对象中,襄樊学院理工学院占了50%,襄樊学院占了30%,襄樊职业技术学院占了20%,本次调查问卷共涉及调查者个人资料参数3项,关于智能手机的专项定向性问题12个,进一步关联问题5个
1.智能手机在大学生看来发展前景还是不错的从参加调查的在校大学生中,近58%在校大学生对智能手机的前景看好,约16.7%在校大学生对智能手机的前景很看好,21.7%大学生不太看好智能手机的发展前景,只有只有3.6%在校大学生对智能手机的发展前景不看好,由此可见大多数大学生还是很看好智能手机的发展前景,就目前正在使用智能手机的大学生占46.7%,不是智能手机使用者占53.3%,又从近年来会购买智能手机占
59%,不会购买智能手机仅占了31%,说明在校大学生对智能手机的需求还是不少的,同时对于手机销售商还有很大开拓校园市场的潜力!
2.1000~1500元的智能手机需求量最多
针对近期购买手机价位和下次准备购买智能手机的理想价位,调研结果表明在校大学生近期购买手机的价位500~1000元占了45%,1000~1500占了25%,1500以上的占了18.3%,500元以下的占了11.7%,因此开始大学生购买手机价格普遍接受的价格是500~1000元,但是随着科技发展,对于智能手机这个新型的电子产品还是有很大发展潜力,对于大学生对于智能手机价格的理想价位1000~1500元的智能手机接受度占56.7%,认为1500~2000元智能手机是理想价位有20%在校大学生,认为2000元以上智能手机是理想价位有16.7%在校大学生,对于500~1000元价位占了6.6%可见大多数在校大学生理想价位的智能手机是1000~1500元偏重于中低档,高档的智能手机也占有一定份额,对于未来还是有一定发展潜力,该结果对于手机制造商推出适合市场需求的智能手机价位很有启示,也为他们对未来智能手机价格发展有了一定引导作用。
智能手机在校大学生的市场问卷
同学们 :
您好!
我们是襄樊学院理工学院的在校学生,为了完成一项课堂任务我们需要您帮忙我们填写这份调查问卷.这份问卷的结果对于我们来说非常重要,希望您认真作答.问卷调查类容我们会进行保密,请您放心。
(1)您目前拥有手机吗?
①有② 没有
(2)您最近购买手机的价位是多少?
①500元以下②500-1000元③1000-1500元④1500-2000元
⑤2000元以上
(3)您目前使用的手机是智能手机吗?
①是②不是
(4)提到智能手机您脑子里出现的第一个品牌是?
①诺基亚②摩托罗拉③三星④索尼爱立信⑤西门⑥iPhone⑦其它
(5)您一般多久更换一次手机?
①不到一年②一年左右③两年左右④三年左右⑤三年以上
(6)请问您目前使用的手机是哪个品牌的?
①诺基亚②索爱③三星④iphone⑤华为⑥摩托罗拉⑦LG⑧联想⑨步步高⑩其它
(7)您使用手机主要做哪些工作?(可多选)
①上网(股票、新闻、天气、下载等)②发信息,打电话③收发邮件④GPS导航⑤看小说、玩游戏⑥其它
(8)您最注重手机的什么功能?(可多选)
①手机QQ 拍照摄像②超长待机③游戏下载④上网⑤mp3/mp4⑥蓝牙⑦导航功能⑧其它
(9)影响您购买手机的主要因素是?(可多选)
①品牌②价格③性能、配置④外观款式⑤质量⑥流行热潮⑦售后服务⑧待机时间⑨其他
(10)您一般从哪些渠道获得手机的信息?(可多选)
①报纸杂志②电视广告③网络广告④逛手机专卖店⑤朋友推荐 ⑥商场促销⑦其它
(11)您一般到什么地方购买手机?(可多选)
①专卖店②大卖场③移动、联通或电信营业厅④网络⑤超市或百货店⑥电器(如苏宁)⑦其它
(12)以下几种手机促销方式中,最能吸引您的是?(可多选)
①购机赠话费②现场打折③送相关配件④抽奖活动⑥其它
(13)您下次准备购买的手机品牌可能是?(可多选)
①诺基亚②华为③三星④联想⑤苹果⑥索尼⑦步步高⑧摩托罗拉⑨康佳⑩其它
(14)您了解智能手机与非智能手机的区别吗?
①了解②不太了解③不了解
(15)您能接受的智能手机的理想价位是多少?
① 500-1000元② 1000-1500元③ 1500-2000元⑤2000-2500元⑥ 2500元以上
(16)您认为智能手机的前景如何?
①很看好②看好③不太看好④不看好
(17)您是否会在未来一年内购买智能手机? ①会②不会
(18)您的性别?
①男②女
(19)您的年级?
①大一②大二③大三④大四
(20)您的月生活费?
① 700以下② 800~1000③ 1000以上
谢谢您的配合,愿您天天开心!