【实验六TCP传输控制协议】
【实验目的】
1、掌握TCP协议的工作原理;
2、理解TCP协议的通信过程。
【实验学时】
4学时
【实验类型】
综合型
【实验内容】
1、理解TCP首部中各字段的含义及作用;
2、理解三次握手的过程;
3、能够分析TCP协议的建立连接、会话和断开连接的全过程;
4、学会计算TCP校验和的方法;
5、了解TCP的标志字段的作用。
【实验原理】
TCP协议是面向连接的、端到端的可靠传输协议,它支持多种网络应用程序。TCP必须解决可靠性,流量控制的问题,能够为上层应用程序提供多个接口,同时为多个应用程序提供数据,TCP也必须能够解决通信安全性的问题。
1、TCP的封装
20字节20字节
图6-1 TCP的封装
2、TCP首部格式:
各字段含义:
16位源端口号和16位目的端口号:端口号通常也称为进程地址。
32位序号:序号用来标识从TCP发送端向TCP接收端发送的数据字节流。
32位确认序列号:表示一个准备接收包的序列号。
4位首部长度:首部长度指出了首部中32 bit字的数目。正常的TCP首部长度是20字节。6个标志字段:U R G 紧急指针;A C K 确认序号;P S H 推标志;R S T 重建连接;S Y N 同步序号;F I N 结束标志。
16位窗口:TCP的流量控制由连接的每一端通过声明的滑动窗口大小来提供,窗口大小为字16位检验和:检验和字段覆盖了TCP首部和TCP数据。TCP检验和的计算方法和UDP检验和的计算方法一样,计算时需要考虑伪报头。
16位紧急指针:URG标志置1时紧急指针才有效。
1161732
图6-2TCP分组格式示意图
【实验步骤】
注意:本实验要求服务器端启动TELNET服务。
练习一:运行netstat命令
1、在浏览器的地址栏输入:,在命令行下输入: netstat -n 回车。
2、观察TCP状态,记录Local Address、Foreign Address和State。
3、在浏览器的地址栏输入:,在命令行下输入: netstat -n 回车。
4、观察TCP状态,记录Local Address、Foreign Address和State。
5、再开一个命令行窗口,输入:telnet ,
6、观察TCP状态,记录Local Address、Foreign Address和State。
7、三次记录有什么不同,为什么?
8、使用带其他参数的netstat命令,查看网络状态。例如:
netstat –a
netstat –b
练习二:利用仿真编辑器编辑并发送TCP数据包
说明:
●在本实验中由于TCP连接有超时时间的限制,故仿真编辑器端和协议分析器端的两位同学要默契配合,某些步骤(如计算TCP校验和)要求熟练、迅速。
●为了实现TCP三次握手过程的仿真,发送第一个连接请求帧之前,应该暂停仿真编辑器端的TCP/IP协议,否则计算机系统的网络会对该请求帧的应答帧发出拒绝响应。具体操作为在仿真端主机上运行“开始/程序/网络协议仿真教学系统基本版/TCP过滤/启动过滤”。
●通过手工编辑TCP数据包实验,要求理解实现TCP连接建立、数据传输以及断开连接的全过程。在编辑的过程中注意体会TCP首部中的序列号和标志位的作用。
首先选择服务器主机上的一个进程作服务器进程,并向该服务器进程发送一个建立连接请求报文,对应答的确认报文和断开连接的报文也编辑发送。其步骤如下:
1、打开协议仿真编辑器,单击工具栏中的TCP协议选项
2、填写该帧的以太网协议首部:
⑪源MAC地址:本机MAC地址;
⑫目的MAC地址:服务器的MAC地址;
3、填写IP协议头信息:
⑪协议字段:协议类型值为6,即上层协议类型应为TCP;
⑫总长度: IP头部+TCP头部+数据长度
⑬首部校验和:应用前面学到的知识进行计算;
⑭源IP地址:本机IP地址;
⑮目的IP地址:服务器的IP地址
⑯其它字段默认
4、填写TCP协议信息:
⑪源端口:任意大于1024的数,不要用下拉选择;
⑫目的端口:可以设80(HTTP协议);
⑬序号:选择一个序号ISN(假设1942589885),以后的数据都按照这个来填写;
⑮首部长度和标志位:首部长度和标志位设为5002(即长度20字节,标志SYN=1);
⑯窗口大小:任意;
⑱校验和:覆盖TCP首部(包含伪首部)和TCP数据两部分,计算方法同UDP协议一样。
值得注意的是伪首部中的协议号是0006,而不是UDP时的0011;
⑲将设置完成的数据帧复制3份;修改第二帧的TCP首部长度和标志位为5010(即标志位ACK=1),TCP层序号为1942589885+1。修改第三帧的TCP首部长度和标志位为5011(即标志位ACK=1、FIN=1),TCP层序号为1942589885+1。
5、在发送该TCP连接请求之前,先运行一次ping 目标服务器,目的是让目标服务器知道自己的MAC;
6在工具菜单栏中选择TCP三次握手下的启动过滤,以暂停TCP/IP协议。
7、点击菜单栏中的“发送”,在弹出对话框中选择发送第一个帧;
8、在协议分析器一端截获相应的应答报文,可以设置协议端口(80)过滤。这里要求协议分析器一端的同学及时准确地捕获应答报文并迅速从中获得应答报文的接收字节序号,并告之仿真编辑器一端的同学;
9、我们假设接收字节序号为:3246281765,修改第二帧和第三帧的TCP应答序号中的值:3246281766;
10、计算第二帧的TCP校验和,发送。对服务器的应答报文进行确认;
11、计算第三帧的TCP校验和,发送。断开连接,完成TCP连接的全过程;
12、协议分析器一端截获相应的请求及应答报文并分析,注意观察“会话分析”中的会话过程。
注意:实验结束后启动仿真编辑器端的TCP/IP协议。具体步骤是:工具—>TCP三次握手 暂停过滤。
练习三:使用TCP连接客户端工具测试各种TCP连接建立和断开的过程
1、首先选择一个TELNET服务器,并建立一个TCP连接,步骤如下:
⑪选择一个TELNET服务器,比如服务器IP为172.16.1.177,启动协议分析器的捕获功能;
⑫在仿真编辑器的TCP连接试图中,填写所选择服务器的IP地址及服务器进程的端口号,选择23端口,点击“连接”,建立本机与TELNET服务器的TCP连接;在TCP连接客户端程序的返回窗口中会有返回信息;
图6-3 TCP连接视图界面
2、断开连接:
⑪点击“断开”按扭,即可断开与服务器端的连接。
⑫在协议分析器一端刷新截获报文,从“会话分析”中找出此连接的三次握手、服务器返回的信息、拆除连接的几个数据包;
3、由1步和2步,画出TELNET连接建立、拆除连接的会话过程,标记出每步的序号、确认序号、SYN、ACK、FIN等标志位。
4、选择一个WWW服务器,并建立一个TCP连接,步骤如下:
⑪在地址本中选择扫描到的服务器,点击端口扫描按钮,开始扫描该服务器开放的端口。
⑫双击该主机IP,将其IP填加到服务器信息IP地址中,比如:服务器(IP=10.100.66.92);