1、TCP实验报告TCP/IP协议分析与应用编程实验报告专 业:计算机科学与技术 班 级: 2012级4班 姓 名: 彭晓 学 号: 21209010434 实验一 Wireshark协议分析一、实验任务:软件环境:Windows 2000或者Windows XP,Wireshark基本要求: (1) 在Windows上,安装Wireshark。利用Wireshark抓取数据包。(2) 分析Ethernet, ARP, IP, ICMP, TCP, UDP, HTTP等协议。实验报告要求:分别在数据链路层ARP、网络层IP,ICMP、传输层TCP,UDP和应用层HTTP中选取一个协议的数据包,分析
2、数据包中报文的具体含义。二、实验内容:一、ARP数据报目标MAC地址:08 10 17 04 12 8f源MAC地址:40 2c f4 0c 92 a5协议类型(ARP):08 06硬件类型(以太):00 01协议类型(IP):08 00硬件长度(6字节):06协议长度(4字节):04 操作(应答):00 01信源MAC:40 2c f4 0c 92 a5信源IP(192.168.1.1):c0 a8 01 67信宿MAC:08 10 17 04 12 8f信宿IP(192.168.1.103):c0 a8 01 01二、IP数据报目标地址:00 23 89 b8 17 ab 源MAC地址:0
3、0 e0 4c 00 16 77协议类型(IP):08 00版本号(4),首部长度20(4*5),服务类型(0):45 00总长度(40):00 28标识(3280):0c d0未分片,片偏移量(0):40 00TTL(40):40上层协议TCP(6):06首部校验和:79 21源IP地址(192.168.0.62):c0 a8 00 3e目的IP地址(180.97.63.151):b4 61 3f 97上层协议TCP数据报:05 85 00 50 bc d0 35 f0 00 00 00 01 50 14 00 00 02 5b 00 00三、TCP数据报1)第一次握手数据帧第一次握手:源端
4、口(1415):05 87目的端口(80):00 50序列号:e2 fa c8 b0确认号:00 00 00 00首部长度:80标志(SYN):02窗口大小(65535):ff ff校验和:08 aa紧急指针:00 00最大报文段长度选项:02 04 05 b4无操作选项:01窗口扩大因子选项:03 03 03无操作选项:01无操作选项:01SACK选项:04 022)第二次握手数据帧第二次握手:源端口(80):00 50目的端口(1415):05 87序列号:00 00 00 00确认号:e2 fa c8 b0首部长度:60标志(SYN,ACK):12窗口大小(32768):80 00校验和
5、:b1 dd紧急指针:00 00最大报文段长度选项:02 04 05 80尾部填充0凑整:00 003)第三次握手数据帧第三次握手:源端口(1415):05 87目的端口(80):00 50序列号:e2 fa c8 b1确认号:00 00 00 01首部长度:50标志(ACK):10窗口大小(65535):ff ff校验和:49 67紧急指针:00 00四、HTTP数据报 HTTP是应用层协议。HTTP请求报文分析HTTP响应报文分析HTTP链路层HTTP链路层:源地址:40 2c f4 0c 92 a5目的地址:08 10 17 04 12 8f类型(IP):0x0800HTTP网际层HTT
6、P网际层:版本号(4),首部长度20(4*5),服务类型(0):45 00总长度(650):02 8a标识(23018):59 ea标志:40片偏移(0):00TTL(64):40协议(TCP):06校验和:cb bb信源IP(192.168.1.103):c0 a8 01 67信宿IP(119.75.217.109):77 4b d9 6d-HTTP传输层HTTP传输层:传输层源端口(2592):0a 20目的端口(80):00 50序列号:51 4e 86 61确认号:6e 2a 10 ed首部长度(20字节):50标志(PSH,ACK):50 18窗口大小(64768):fd 00校验和
7、:59 68HTTP应用层HTTP应用层:请求行:GET / HTTP/1.1rn3、实验小结: 通过对Wireshark抓包软件的分析和了解,学会利用wireshark捕获数据包。并对各层网络协议(HTTP协议、ARP协议、ICMP协议、IP协议)等和EthernetII层数据帧上的数据包信息进行分析对应的格式和查看一个抓到的包的内容,知道了数据帧上信息的涵义。实验二 简单套接字编程一、实验任务:软件环境:Windows 2000或者Windows XP,VS2005基本要求:(1)在VS2005上,编写、编译Win32 Console套接字程序。要求客户机端程序能发送消息给服务器端程序。实
8、验报告要求:完成一个TCP或UDP程序,实验报告应包含主要代码及程序运行结果。2、实验内容:服务器端:#include #include using namespace std;#include int main(int argc, char *argv) const int DEFAULT_PORT = 5000; WORD wVersionRequested; WSADATA wsaData; int err,iLen; wVersionRequested=MAKEWORD( 2, 2 ); err = WSAStartup( wVersionRequested, &wsaData );
9、if ( err != 0 ) cout加载WinSock失败!; return 0; /创建用于监听的套接字 SOCKET sockSrv = socket(AF_INET,SOCK_STREAM,0); /创建服务器监听套接字 if (sockSrv = INVALID_SOCKET) coutsocket() fail:WSAGetLastError()endl; return 0; SOCKADDR_IN addrSrv; addrSrv.sin_family = AF_INET; addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);/自动
10、分配地址,字节顺序转换 addrSrv.sin_port = htons(DEFAULT_PORT);/字节顺序转换 /绑定本地主机IP和端口 err = bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR); if ( err != 0 ) coutbind() fail:WSAGetLastError()endl; return 0; /监听 err = listen(sockSrv,5); if ( err != 0 ) coutlisten() fail:WSAGetLastError()endl; return 0; coutServer
11、 waiting.:endl; SOCKADDR_IN addrClient; int len = sizeof(SOCKADDR); while(1) SOCKET sockConn = accept(sockSrv,(SOCKADDR*)&addrClient,&len);/接收客户进程连接请求 if (sockConn = INVALID_SOCKET) coutaccept() fail:WSAGetLastError()endl; break; char sendBuf1024,hostname100; if (gethostname(hostname,100) != 0) /获取主
12、机名称 strcpy(hostname,None); sprintf(sendBuf,welcome %s connected to %s!,inet_ntoa(addrClient.sin_addr),hostname); err = send(sockConn,sendBuf,strlen(sendBuf)+1,0); /发送数据 if (err = SOCKET_ERROR) coutsend() fail:WSAGetLastError()endl; break; char recvBuf1024 = 0; iLen = recv(sockConn,recvBuf,1024,0);/接
13、收数据 if (iLen = SOCKET_ERROR) coutrecv() fail:WSAGetLastError()endl; break; recvBufiLen = 0; coutrecvBufendl; closesocket(sockConn); /关闭套接字 closesocket(sockSrv);/关闭服务器监听套接字 WSACleanup(); return 0;客户端:#include #include using namespace std;#include int main(int argc, char *argv) const int DEFAULT_PORT
14、= 5000; WORD wVersionRequested; WSADATA wsaData; int err,iLen; if (argc 2) coutCommand:TcpEx_Client ServerIPendl; return 0; wVersionRequested=MAKEWORD( 2, 2 ); err = WSAStartup( wVersionRequested, &wsaData ); if ( err != 0 ) cout加载WinSock失败!; return 0; /创建用于连接的套接字 SOCKET sockClient = socket(AF_INET,
15、SOCK_STREAM,0); if (sockClient = INVALID_SOCKET) coutsocket() fail:WSAGetLastError()endl; return 0; SOCKADDR_IN addrSrv; addrSrv.sin_family = AF_INET; addrSrv.sin_addr.S_un.S_addr = inet_addr(argv1); addrSrv.sin_port = htons(DEFAULT_PORT); err = connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR
16、);/请求连接服务器进程 if ( err = INVALID_SOCKET ) coutconnect() fail:WSAGetLastError()endl; return 0; char sendBuf1024,hostname100; if (gethostname(hostname,100) != 0) /获取主机名称 strcpy(hostname,None); strcpy(sendBuf,hostname); strcat(sendBuf, have conneted to you!); err = send(sockClient,sendBuf,strlen(sendBuf
17、)+1,0); /发送数据 if (err = SOCKET_ERROR) coutsend() fail:WSAGetLastError()endl; return 0; char recvBuf1024; iLen = recv(sockClient,recvBuf,1024,0); /接收数据 if (iLen = 0) return 0; else if (iLen = SOCKET_ERROR) coutrecv() fail:WSAGetLastError()endl; return 0; else recvBufiLen = 0; coutrecvBufendl; closesocket(sockClient); /关闭套接字 WSACleanup();三、实验小结: 通过这次的实验理解了socket基本知识及原理,同时实现了基于Socket的客户端与服务器端的连接,自己动手可以真正学到知识,而且同学热心解答问题也让我更体会到交流的重要。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1