TCP 报文是 TCP 层传输的数据单元,也叫报文段。 TCP 报文的格式如下图所示

软考初级程序员案例真题和答案(软考-信息安全工程师-实验1)(1)

我们从 TCP 的报文格式中能看到 6 个标志位:URG ACK PSH RST SYN FIN,每一个标志位表示一个控制功能。

TCP 的连接和断开的过程和这几个标志位有关

TCP分段中6个编码位的含义

当值设为1时,表示分段中包含相应的控制信息

编码位(从左到右)的标识

该位置“为1”的含义

URG

表示启用了紧急指针字段

ACK

表示确认字段是有效的

PSH

请求急迫操作,即分段一到马上送应用程序而不等到接收缓冲区满时才送应用程序

RST

连接复位。复位因主机崩溃或其他原因而出现错误的连接,也可用于拒绝非法的分段或拒绝连接请求

SYN

与ACK合用以建立TCP连接。如SYN=1, ACK=0表示连接请求;而SYN=1,ACK=1表示同意建立连接

FIN

表示发送方已无数据要发送从而释放连接,但接收方仍可继续接收发送方此前发送的数据


实验所需工具:

在客户机上连接服务器的 FTP 服务:在客户机上启动 Sniffer, 然后在 DOS 命令下使用 FTP 指令连接服务器的 FTP 服务器,如图

软考初级程序员案例真题和答案(软考-信息安全工程师-实验1)(2)

默认情况下,FTP 服务器支持匿名访问,输入的用户命是 ftp,密码是 ftp。退出对方 的 ftp 使用的命令是 bye。停止 Sniffer,查看抓取的 FTP 会话过程

软考初级程序员案例真题和答案(软考-信息安全工程师-实验1)(3)

观察抓取到的 TCP 的三次握手的过程

软考初级程序员案例真题和答案(软考-信息安全工程师-实验1)(4)

第 1 次握手:由客户机的应用层进程向其传输层 TCP 协议发出建立连接的命令,则客户 机 TCP 向服务器上提供某特定服务的端口发送一个请求建立连接的报文段,该报文段中 SYN 被置 1,同时包含一个初始序列号 x(系统保持着一个随时间变化的计数器,建立连接时该 计数器的值即为初始序列号,因此不同的连接初始序列号不同)

软考初级程序员案例真题和答案(软考-信息安全工程师-实验1)(5)

第 2 次握手:服务器收到建立连接的请求报文段后,发送一个包含服务器初始序号 y,SYN 被置 1,确认号(ACK)置为 x 1 的报文段作为应答。确认号加 1 是为了说明服务器已正确收到一个 客户连接请求报文段,因此从逻辑上来说,一个连接请求占用了一个序号

软考初级程序员案例真题和答案(软考-信息安全工程师-实验1)(6)

第 3 次握手:客户机收到服务器的应答报文段后,也必须向服务器发送确认号(ACK)为 y 1 的 报文段进行确认。同时客户机的 TCP 协议层通知应用层进程,连接已建立,可以进行数据传输了。 完成三次握手,客户端与服务器开始传送数据

软考初级程序员案例真题和答案(软考-信息安全工程师-实验1)(7)

TCP三次握手如图所示

软考初级程序员案例真题和答案(软考-信息安全工程师-实验1)(8)


观察抓取到的 TCP 的四次手的过程

软考初级程序员案例真题和答案(软考-信息安全工程师-实验1)(9)

第 1 次挥手:由客户机的应用进程向其 TCP 协议层发出终止连接的命令,则客户 TCP 协议层向服务器 TCP 协议层发送一个 FIN 被置 1 的关闭连接的 TCP 报文段

软考初级程序员案例真题和答案(软考-信息安全工程师-实验1)(10)

第 2 次挥手:服务器的 TCP 协议层收到关闭连接的报文段后,就发出确认,确认号为 已收到的最后一个字节的序列号加 1,同时把关闭的连接通知其应用进程,告诉它客户机已经终止了数据传送。在发送完确认后,服务器如果有数据要发送,则客户机仍然可以继续接收数据,因此把这种状态叫半关闭(Half-close)状态,因为服务器仍然可以发送数据,并 且可以收到客户机的确认,只是客户方已无数据发向服务器了

软考初级程序员案例真题和答案(软考-信息安全工程师-实验1)(11)

第 3 次挥手:如果服务器应用进程也没有要发送给客户方的数据了,就通告其 TCP 协议层关闭连接。这时服务器的 TCP 协议层向客户机的 TCP 协议层发送一个 FIN 置 1 的 报文段,要求关闭连接。

软考初级程序员案例真题和答案(软考-信息安全工程师-实验1)(12)

第 4 次挥手:同样,客户机收到关闭连接的报文段后,向服务器发送一个确认,确认号为已 收到数据的序列号加 1。当服务器收到确认后,整个连接被完全关闭。

软考初级程序员案例真题和答案(软考-信息安全工程师-实验1)(13)

如下图所示,这就是 TCP 的四次挥手

软考初级程序员案例真题和答案(软考-信息安全工程师-实验1)(14)


知识补充

TCP连接的拒绝建立

软考初级程序员案例真题和答案(软考-信息安全工程师-实验1)(15)

,