实验七 TCP传输控制协议
(本次实验中FTP服务器IP地址为202.117.144.29,用户名为anonymous,密码为空)
一实验目的
1、掌握 TCP 协议的工作原理;
2、理解 TCP 协议的通信过程。
二实验内容
1、理解 TCP 首部中各字段的含义及作用;
2、理解三次握手的过程;
3、能够分析 TCP 协议的建立连接、会话和断开连接的全过程;
4、学会计算 TCP 校验和的方法;
5、了解 TCP 的标志字段的作用。
三实验环境
四实验流程
五实验原理
传输控制协议(Transmission Control Protocol,TCP)是一种面向连接的、可靠的、基于字节流的运输层通信协议,通常由 IETF 的RFC 793 说明。
在简化的计算机网络 OSI 模型中,它完成运输层所指定的功能。
该协议主要用于在主机间建立一个虚拟连接,以实现高可靠性的数据包交换。
IP 协议可以进行 IP 数据包的分割和组装,但是通过 IP 协议并不能清楚地了解到数据包是否顺利地发送给目标计算机。
而使用 TCP 协议就不同了,在该协议传输模式中在将数据包成功发送给目标计算机后,TCP 会要求发送一个确认;如果在某个时限内没有收到确认,那么 TCP 将重新发送数据包。
另外,在传
输的过程中,如果接收到无序、丢失以及被破坏的数据包,TCP 还可以负责恢复。
TCP 协议是面向连接的、端到端的可靠传输协议,它支持多种网络应用程序。
TCP 必须解决可靠性,流量控制的问题,能够为上层应用程序提供多个接口,同时为多个应用程序提供数据,TCP 也必须能够解决通信安全性的问题。
1、 TCP 的封装如图所示:
TCP数据包
IP首部TCP首部TCP数据
IP数据报
2、 TCP 的首部格式如图所示:
16位源端口16位目的端口
32位序列号
32位确认序列号
4位首部长度保留(6位) U
R
G
A
C
K
P
S
H
R
S
T
S
Y
N
F
I
N
16位窗口大小16位校验和16位紧急指针
字段说明:
16 位源端口号和 16 位目的端口号:端口号通常也称为进程地址。
32 位序号:序号用来标识从 TCP 发送端向 TCP 接收端发送的数据字节流。
(该报文数据在发送方的数据流中的位置)
32 位确认序列号:表示一个准备接收包的序列号。
4 位首部长度:首部长度指出了首部中 32 bit 字的数目,正常的TCP 首部长度是 20 字节。
6 个标志字段:URG 紧急指针;ACK 确认序号;PSH 推标志;RST 重建连接;SYN 同步序号;FIN 结束标志。
16 位窗口:TCP 的流量控制由连接的每一端通过声明的滑动窗口大小来提供,窗口大小为字节数。
16 位检验和:检验和字段覆盖了 TCP 首部和 TCP 数据。
TCP 检验和的计算方法和 UDP 检验和的计算方法一样,计算时需要考虑伪报头。
16 位紧急指针:URG 标志置 1 时紧急指针才有效。
3、连接建立的过程:
4、连接释放的过程:
六实验步骤
步骤一:查看分析 TCP 三次握手
1、连接远程 FTP 服务
2、开启协议分析软件,进行数据包抓包。
3、利用工具栏中的 TCP 连接工具对 FTP 服务器发起连接:
在 IP 地址中填入 FTP 服务器地址 172.16.1.253,端口填入 FTP 服务端口 21,然后点击连接。
4、捕捉三次握手过程中的报文并分析捕获到的三次握手过程中的第一个报文如图所示
TCP报头部分详解:
源端口:1627,由于发起连接的是客户端,因此源端口为 TCP 程序随机出的短暂端口,在此连接中是 1627。
目的端口:21,由于是向 FTP 服务发起连接,因此目的端口为 FTP 服务的熟知端口,为 21。
序列号:0XE9999DE15,此序列号为 TCP 程序随机出的字节编号。
确认序号:0X00000000,第一个发出的连接请求中,确认号为 0。
TCP 首部长度:7,TCP 首部长度包括 TCP 报头长度和数据长度,这个字段表示 TCP 报头长度,其中 20 字节为标准 TCP 报头长度,另有 8 字节选项字段长度,选项字段中和服务器端协商了最大报文段长度。
标识位:SYN 位置 1,只有 TCP 连接中三次握手第一次连接的报文段中 SYN 位置 1。
窗口大小:65535,默认大小。
校验和:0X58F3,校验和是对 TCP 报头、数据和伪首部进行计算得出的校验和。
紧急指针:0,当紧急标识位置 1 时,此 16 位字段才有效,说明此时报文段中包含紧急数据,紧急数据到达接受端后可以不按次序优先被接受程序处理。
TCP 三次握手过程中第二个报文如图所示
TCP报头部分详解:
源端口:21,服务端的源端口为相关服务的熟知端口,FTP 服务端口为 TCP21。
目的端口:1627,为客户端源端口复制过来得到。
序列号:0X2346F3FF,为服务端随机计算出的字节序号。
确认序列号:0XE9999DE16,确认序列号的功能是对发送端数据进行确认,为发送端序号0XE9999DE15+1 得到。
TCP 首部长度:7,包含 20 字节标准 TCP 首部长度和 8 字节选项长度。
标志位:SYN 位和 ACK 位置 1,表示此报文为 TCP 三次握手的第二个报文。
窗口大小:65535,为默认大小。
校验和:0X419C,TCP 校验和为 TCP 首部、数据和伪首部三部分计算得出校验和。
紧急指针:0。
TCP 三次握手第三个报文如图所示:
TCP报头部分详解:
源端口:1627,同一个连接发送的数据,源端口保持不变。
目的端口:21,对同一个服务发送的数据段中的目的端口保持不变。
序列号:0XE9999DE,为前一个数据段序列号加 1。
确认序号:0X2346F3FF,由于此报文是对服务端发回的连接应答消息的确认,因此是上一个报文序号 0X2346F3FF 加 1。
TCP 首部长度:5,标准 TCP 首部长度为 5*4 字节=20 字节。
标识位:TCP 三次握手第三个报文段 ACK 位置 1。
窗口大小:65535,默认窗口大小。
校验和:0X6E60,为 TCP 首部、数据、伪首部计算得出的校验和。
紧急指针:0,未使用紧急指针。
步骤三:查看本地 TCP 状态
1、在浏览器的地址栏输入:;在命令行下输入:netstat-n 回车,如图所示:
2、观察 TCP 状态,记录 Local Address、Foreign Address 和State。
3、在浏览器的地址栏输入:;在命令行下输入:netstat-n 回车,如图所示:
4、观察 TCP 状态,记录 Local Address、Foreign Address 和State
5、二次记录有什么不同,为什么?
6、使用带其他参数的 netstat 命令,查看网络状态。
例如:netstat -a
netstat -b
步骤四:查看分析 TCP 确认机制
1、在实验机中开启协议分析软件进行数据包捕获
2、在协议分析软件工具栏中的 TCP 连接工具中连接到主机 B 的FTP 服务器并发送 dir 命令,如图所示:
3、分析捕获到的 FTP 数据包,如图所示。
分析上图中 TCP 数据段首部,可以看到序列号为 0X7257BB5D,数据部分长度为 5 字节。
再查看从分析端会返回的确认数据段,如图所示。
分析上图中 TCP 数据段首部,可以看到序列号为 0X7257BB62,因为0X7257BB5D+5=0X7257BB62,因此,此确认序号的含义为上一个发送的 TCP 数据段信息全部处理,发送端可以发送 0X7257BB62 以后的数据,此即是 TCP 确认机制的过程。
步骤五:查看 TCP 连接超时重传过程
1、查看其中一台主机的 ARP 缓存记录,确保有同组实验机器的ARP 记录
2、将主机 A 从网络中断开,确保分析不会对编辑段发送的 TCP 连接请求进行回应。
3、在主机 A 中开启协议分析软件,进行数据包捕获。
4、在主机 A 中用工具栏中的 TCP 连接工具对主机 B 的 FTP 服务发起连接,如图所示
5、在主机 A 中分析捕获的 TCP 数据段,如图所示
从上图中可以看到,在发出 SYN 位置 1 的 TCP 连接请求没有得到相应后,连接工具又发送了第二个相同的 SYN 位置 1 的 TCP 连接请求,进行重传,确定数据段为重传数据段可以通过 TCP 首部中6、的序列号确认,例如本例中,重传数据段中的序列号均为0XA82D33B5。
七思考问题
1、 TCP建立连接的三次握手和连接释放的四次挥手是如何实现的?
2、根据实验中窗口的变化和确认序号,分析 TCP 协议所使用的滑动窗口协议机制。