TCP协议的作用在于保障数据包的可靠性。TCP 是一个工作在传输层的可靠数据传输的服务,它能确保接收端接收的网络包是无损坏、无间隔、非冗余和按序的。

序列号: 在建立连接时由计算机生成的随机数作为其初始值,通过 SYN 包传给接收端主机,每发送一次数据,就「累加」一次该「数据字节数」的大小。用来解决网络包乱序问题。
确认应答号: 指下一次「期望」收到的数据的序列号,发送端收到这个确认应答以后可以认为在这个序号以前的数据都已经被正常接收。用来解决不丢包的问题。
控制位:


4. 客户端收到服务端报文后,还要向服务端回应最后一个应答报文,首先该应答报文 TCP 首部 ACK 标志位置为 1 ,其次「确认应答号」字段填入 server_isn + 1 ,最后把报文发送给服务端,这次报文可以携带客户到服务器的数据,之后客户端处于 ESTABLISHED 状态。

1.客户端打算关闭连接,此时会发送一个 TCP 首部 FIN 标志位被置为 1 的报文,也即 FIN 报文,报文中会指定一个序列号(client_isn),之后客户端进入 FIN_WAIT_1 状态。
2.服务端收到该报文后,就向客户端发送应答报文,将ACK标志位置1,且把收到的客户端的序列号值client_isn +1 作为 ACK 报文的确认应答号值,接着服务端进入 CLOSED_WAIT 状态。
3.客户端收到服务端的 ACK 应答报文后,之后进入 FIN_WAIT_2 状态。
4.等待服务端处理完数据后,也向客户端发送 FIN被置为1的报文,且指定一个序列号(server_isn),之后服务端进入 LAST_ACK 状态。
5.客户端收到服务端的 FIN 报文后,回一个应答报文,ACK标志位置1,确认应答号为服务端的序列号值server_isn +1,之后进入 TIME_WAIT 状态。
6.服务器收到了 ACK 应答报文后,就进入了 CLOSE 状态,至此服务端已经完成连接的关闭。
7.客户端在经过 2MSL 一段时间后,自动进入 CLOSE 状态,至此客户端也完成连接的关闭。
注意:主动关闭连接的,才有 TIME_WAIT 状态。