TCP实验报告.docx

上传人:b****6 文档编号:4577103 上传时间:2022-12-06 格式:DOCX 页数:16 大小:1.05MB
下载 相关 举报
TCP实验报告.docx_第1页
第1页 / 共16页
TCP实验报告.docx_第2页
第2页 / 共16页
TCP实验报告.docx_第3页
第3页 / 共16页
TCP实验报告.docx_第4页
第4页 / 共16页
TCP实验报告.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

TCP实验报告.docx

《TCP实验报告.docx》由会员分享,可在线阅读,更多相关《TCP实验报告.docx(16页珍藏版)》请在冰豆网上搜索。

TCP实验报告.docx

TCP实验报告

TCP/IP协议分析

与应用编程

专业:

计算机科学与技术

班级:

2012级4班

姓名:

彭晓

学号:

21209010434

实验一Wireshark协议分析

一、实验任务:

软件环境:

Windows2000或者WindowsXP,Wireshark

基本要求:

(1)在Windows上,安装Wireshark。

利用Wireshark抓取数据包。

(2)分析Ethernet,ARP,IP,ICMP,TCP,UDP,HTTP等协议。

实验报告要求:

分别在数据链路层ARP、网络层IP,ICMP、传输层TCP,UDP和应用层HTTP中选取一个协议的数据包,分析数据包中报文的具体含义。

二、实验内容:

一、ARP数据报

目标MAC地址:

08101704128f

源MAC地址:

402cf40c92a5

协议类型(ARP):

0806

硬件类型(以太):

0001

协议类型(IP):

0800

硬件长度(6字节):

06

协议长度(4字节):

04

操作(应答):

0001

信源MAC:

402cf40c92a5

信源IP(192.168.1.1):

c0a80167

信宿MAC:

08101704128f

信宿IP(192.168.1.103):

c0a80101

二、IP数据报

目标地址:

002389b817ab

源MAC地址:

00e04c001677

协议类型(IP):

0800

版本号(4),首部长度20(4*5),服务类型(0):

4500

总长度(40):

0028

标识(3280):

0cd0

未分片,片偏移量(0):

4000

TTL(40):

40

上层协议TCP(6):

06

首部校验和:

7921

源IP地址(192.168.0.62):

c0a8003e

目的IP地址(180.97.63.151):

b4613f97

上层协议TCP数据报:

05850050bcd035f00000000150140000025b0000

三、TCP数据报

1)第一次握手数据帧

第一次握手:

源端口(1415):

0587

目的端口(80):

0050

序列号:

e2fac8b0

确认号:

00000000

首部长度:

80

标志(SYN):

02

窗口大小(65535):

ffff

校验和:

08aa

紧急指针:

0000

最大报文段长度选项:

020405b4

无操作选项:

01

窗口扩大因子选项:

030303

无操作选项:

01

无操作选项:

01

SACK选项:

0402

2)第二次握手数据帧

 

第二次握手:

源端口(80):

0050

目的端口(1415):

0587

序列号:

00000000

确认号:

e2fac8b0

首部长度:

60

标志(SYN,ACK):

12

窗口大小(32768):

8000

校验和:

b1dd

紧急指针:

0000

最大报文段长度选项:

02040580

尾部填充0凑整:

0000

3)第三次握手数据帧

第三次握手:

源端口(1415):

0587

目的端口(80):

0050

序列号:

e2fac8b1

确认号:

00000001

首部长度:

50

标志(ACK):

10

窗口大小(65535):

ffff

校验和:

4967

紧急指针:

0000

四、HTTP数据报

HTTP是应用层协议。

HTTP请求报文分析

HTTP响应报文分析

HTTP链路层

HTTP链路层:

源地址:

402cf40c92a5

目的地址:

08101704128f

类型(IP):

0x0800

HTTP网际层

HTTP网际层:

版本号(4),首部长度20(4*5),服务类型(0):

4500

总长度(650):

028a

标识(23018):

59ea

标志:

40

片偏移(0):

00

TTL(64):

40

协议(TCP):

06

校验和:

cbbb

信源IP(192.168.1.103):

c0a80167

信宿IP(119.75.217.109):

774bd96d

-

HTTP传输层

HTTP传输层:

传输层源端口(2592):

0a20

目的端口(80):

0050

序列号:

514e8661

确认号:

6e2a10ed

首部长度(20字节):

50

标志(PSH,ACK):

5018

窗口大小(64768):

fd00

校验和:

5968

HTTP应用层

HTTP应用层:

请求行:

GET/HTTP/1.1\r\n

3、实验小结:

通过对Wireshark抓包软件的分析和了解,学会利用wireshark捕获数据包。

并对各层网络协议(HTTP协议、ARP协议、ICMP协议、IP协议)等和EthernetII层数据帧上的数据包信息进行分析对应的格式和查看一个抓到的包的内容,知道了数据帧上信息的涵义。

实验二简单套接字编程

一、实验任务:

软件环境:

Windows2000或者WindowsXP,VS2005

基本要求:

(1)在VS2005上,编写、编译Win32Console套接字程序。

要求客户机端程序能发送消息给服务器端程序。

实验报告要求:

完成一个TCP或UDP程序,实验报告应包含主要代码及程序运行结果。

2、实验内容:

服务器端:

#include

#include

usingnamespacestd;

#include

intmain(intargc,char*argv[])

{

constintDEFAULT_PORT=5000;

WORDwVersionRequested;

WSADATAwsaData;

interr,iLen;

wVersionRequested=MAKEWORD(2,2);

err=WSAStartup(wVersionRequested,&wsaData);

if(err!

=0)

{

cout<<"加载WinSock失败!

";

return0;

}

//创建用于监听的套接字

SOCKETsockSrv=socket(AF_INET,SOCK_STREAM,0);//创建服务器监听套接字

if(sockSrv==INVALID_SOCKET)

{

cout<<"socket()fail:

"<

return0;

}

SOCKADDR_INaddrSrv;

addrSrv.sin_family=AF_INET;

addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);//自动分配地址,字节顺序转换

addrSrv.sin_port=htons(DEFAULT_PORT);//字节顺序转换

//绑定本地主机IP和端口

err=bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));

if(err!

=0)

{

cout<<"bind()fail:

"<

return0;

}

//监听

err=listen(sockSrv,5);

if(err!

=0)

{

cout<<"listen()fail:

"<

return0;

}

cout<<"Serverwaiting...:

"<

SOCKADDR_INaddrClient;

intlen=sizeof(SOCKADDR);

while

(1)

{

SOCKETsockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);//接收客户进程连接请求

if(sockConn==INVALID_SOCKET)

{

cout<<"accept()fail:

"<

break;

}

charsendBuf[1024],hostname[100];

if(gethostname(hostname,100)!

=0)//获取主机名称

strcpy(hostname,"None");

sprintf(sendBuf,"welcome%sconnectedto%s!

",inet_ntoa(addrClient.sin_addr),hostname);

err=send(sockConn,sendBuf,strlen(sendBuf)+1,0);//发送数据

if(err==SOCKET_ERROR)

{

cout<<"send()fail:

"<

break;

}

charrecvBuf[1024]="\0";

iLen=recv(sockConn,recvBuf,1024,0);//接收数据

if(iLen==SOCKET_ERROR)

{

cout<<"recv()fail:

"<

break;

}

recvBuf[iLen]='\0';

cout<

closesocket(sockConn);//关闭套接字

}

closesocket(sockSrv);//关闭服务器监听套接字

WSACleanup();

return0;

}

客户端:

#include

#include

usingnamespacestd;

#include

intmain(intargc,char*argv[])

{

constintDEFAULT_PORT=5000;

WORDwVersionRequested;

WSADATAwsaData;

interr,iLen;

if(argc<2){

cout<<"Command:

TcpEx_ClientServerIP"<

return0;

}

wVersionRequested=MAKEWORD(2,2);

err=WSAStartup(wVersionRequested,&wsaData);

if(err!

=0)

{

cout<<"加载WinSock失败!

";

return0;

}

//创建用于连接的套接字

SOCKETsockClient=socket(AF_INET,SOCK_STREAM,0);

if(sockClient==INVALID_SOCKET)

{

cout<<"socket()fail:

"<

return0;

}

SOCKADDR_INaddrSrv;

addrSrv.sin_family=AF_INET;

addrSrv.sin_addr.S_un.S_addr=inet_addr(argv[1]);

addrSrv.sin_port=htons(DEFAULT_PORT);

err=connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));//请求连接服务器进程

if(err==INVALID_SOCKET)

{

cout<<"connect()fail:

"<

return0;

}

charsendBuf[1024],hostname[100];

if(gethostname(hostname,100)!

=0)//获取主机名称

strcpy(hostname,"None");

strcpy(sendBuf,hostname);

strcat(sendBuf,"haveconnetedtoyou!

");

err=send(sockClient,sendBuf,strlen(sendBuf)+1,0);//发送数据

if(err==SOCKET_ERROR)

{

cout<<"send()fail:

"<

return0;

}

charrecvBuf[1024];

iLen=recv(sockClient,recvBuf,1024,0);//接收数据

if(iLen==0)

return0;

elseif(iLen==SOCKET_ERROR)

{

cout<<"recv()fail:

"<

return0;

}

else

{

recvBuf[iLen]='\0';

cout<

}

closesocket(sockClient);//关闭套接字

WSACleanup();

}

三、实验小结:

通过这次的实验理解了socket基本知识及原理,同时实现了基于Socket的客户端与服务器端的连接,自己动手可以真正学到知识,而且同学热心解答问题也让我更体会到交流的重要。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1