1/6实验课程名称计算机网络实验报告实验项目名称分析TCP协议数据报格式专业班级电子信息科学与技术08级1班学生姓名学号指导教师理学院实验时间:2010年5月25日2/6一、实验名称实验七分析TCP协议数据包格式二、实验目的掌握TCP协议的作用和格式;分析数据报各字段的含义及作用;理解三次握手的过程;学会计算TCP校验和的方法;了解TCP的标志字段的作用。三、实验器材计算机及以太网环境。四、实验内容(步骤)1.打开“命令提示符”窗口,输入:netstat–n回车。2.观察TCP状态,记录LocalAddress、ForeignAddress和State。可以通过上图观察到,现在的TCP状态为空。3.在浏览器输入:,在“命令提示符”窗口输入:netstat–n回车。4.观察TCP状态,记录LocalAddress、ForeignAddress和State。通过上图可以观察到,在TCP协议下,本地地址套接字、外部地址套接字、状态,依次列于图中。5.比较两次记录的不同之处。第一次由于未建立任何连接,因此没有任何TCP信息,而第二次则成功建立了TCP连接,因此有相应的TCP连接信息得到。6.打开Wireshark,选择菜单命令“Capture”“Interfaces…”子菜单项。弹出“Wireshark:CaptureInterfaces”对话框。单击“Options”按钮,弹出“Wireshark:CaptureOptions”对话框。单击“Start”按钮开始网络数据包捕获。3/67.单击“Stop”按钮,中断网络协议分析软件的捕获进程,主界面显示捕获到的TCP数据包。下面对94帧的TCP数据包进行分析:由上图可以知道,TCP协议包括源端口(2字节):http80(0050)目的端口(2字节)49811(c293)序号(4字节):1(相对序号)期望得到的下一分组序号:518确认号(4字节):首部长度:20字节标志(2字节):0x18(推送,确认)4/6数据偏移(4位)保留(4位)紧急URG:0确认ACK:1推送PSH:1复位RST:0同步SYN:0终止FIN:0窗口(2字节):7168检验和:0x66cb序号确认分析:正在网络中传输的序号517TCP数据报数据分组517字节经过上述分析可知,捕获到的TCP数据包是符合TCP协议格式的,TCP协议格式如下:TCP协议是面向连接的、端到端的可靠传输协议,它支持多种网络应用程序。TCP必须解决可靠性,流量控制的问题,能够为上层应用程序提供多个接口,同时为多个应用程序提供数据,TCP也必须能够解决通信安全性的问题。1.TCP的封装2.TCP首部格式源端口(16比特)目的端口(16比特)序号(32比特)确认号(32比特)HLEN(4比特)保留(6比特)URGACKPSHRSTSYNFIN窗口大小(16比特)校验和(16位)紧急指针(16比特)选项与填充(≤40字节)数据(必须填充成16比特的整数倍)首部TCP段格式01631源端口和目的端口字段——各占2字节。端口是运输层与应用层的服务接口。运输层的复用和分用功能都要通过端口才能实现。序号字段——占4字节。TCP连接中传送的数据流中的每一个字节都编上一个序号。序号字段的值则指的是本报文段所发送的数据的第一个字节的序号。确认号字段——占4字节,是期望收到对方的下一个报文段的数据的第一个字5/6节的序号。HLEN字段——占4bit,它指出首部长度,单位为:32bit字(4字节)。正常的TCP首部长度是20字节。6个标志字段——占6bit。紧急比特URG:当URG1时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)。确认比特ACK:只有当ACK1时确认号字段才有效。当ACK0时,确认号无效。推送比特PSH(PuSH):接收TCP收到推送比特置1的报文段,就尽快地交付给接收应用进程,而不再等到整个缓存都填满了后再向上交付。复位比特RST(ReSeT):当RST1时,表明TCP连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接。同步比特SYN:同步比特SYN置为1,就表示这是一个连接请求或连接接受报文。终止比特FIN(FINal):用来释放一个连接。当FIN1时,表明此报文段的发送端的数据已发送完毕,并要求释放运输连接。窗口字段——占2字节。窗口字段用来控制对方发送的数据量,单位为字节。TCP连接的一端根据设置的缓存空间大小确定自己的接收窗口大小,然后通知对方以确定对方的发送窗口的上限。检验和——占2字节。检验和字段检验的范围包括首部和数据这两部分。在计算检验和时,要在TCP报文段的前面加上12字节的伪首部。紧急指针字段——占16bit。紧急指针指出在本报文段中的紧急数据的最后一个字节的序号。8.观察协议树区中TCP数据包结构,是否符合TCP报文格式。从“会话分析”中找出此连接的三次握手的数据包,对此数据包进行分析。记录标志字段的值。从以上观察可知,TCP数据包结构符合TCP报文格式。为了实现数据的可靠传输,TCP要在应用进程间建立传输连接。TCP使用三次握手建立连接。从上图中可以看出,第一次握手,SYN=1,Seq=0(相对序号);建立连接前,服务器端首先被动打开其熟知的端口(上图为80端口),对端口进行监听。当客户端要和服务器建立连接时,发起一个主动打开端口的请求(临时端口)。然后进入三次握手过程:第一次握手:由要建立连接的客户向服务器发出连接请求段,该段首部的同步标志SYN被置为1,并在首部中填入本次连接的客户端的初始段序号SEQ(上图SEQ=acbdbbee,相对序号为0)。6/6第二次握手,SYN=1,ACK=1(相对确认序号),Seq=0(相对序号);第二次握手:服务器收到请求后,发回连接确认(SYN+ACK),该段首部中的同步标志SYN被置为1,表示认可连接,首部中的确认标志ACK被置为1,表示对所接收的段的确认,与ACK标志相配合的是准备接收的下一序号(ACK=acbdbbef),该段还给出了自己的初始序号(例如SEQ=1663aa4b)。对请求段的确认完成了一个方向上连接。第三次握手,ACK=1(相对确认序号),Seq=0(相对序号),第三次握手:客户向服务器发出的确认段,段首部中的确认标志ACK被置为1,表示对所接收的段的确认,与ACK标志相配合的准备接收的下一序号被设置为收到的段序号加1(ACK=1663aa4c)。完成了另一个方向上的连接。