本文章为转自果子哥丶浅谈tcp协议与tcp_tw并且自我总结
参数说明:
SYN表示建立连接,
FIN表示关闭连接,
ACK表示响应,
PSH表示有 DATA数据传输,
RST表示连接重置。
2MSL:Maximum Segment Lifetime(最大段生存期),Linux 默认1MSL为 30 秒
经过三次握手,完成业务,客户端准备关闭连接。然后发生以下步骤
- 客户端打算关闭连接,此时会发送一个 TCP 首部 FIN 标志位被置为 1 的报文,也即 FIN 报文,之后客户端进入 FIN_WAIT_1 状态。
- 服务端收到该报文后,就向客户端发送 ACK 应答报文,接着服务端进入 CLOSED_WAIT 状态。
- 客户端收到服务端的 ACK 应答报文后,之后进入 FIN_WAIT_2 状态。
- 等待服务端处理完数据后,也向客户端发送 FIN 报文,之后服务端进入 LAST_ACK 状态。
- 客户端收到服务端的 FIN 报文后,回一个 ACK 应答报文,之后进入 TIME_WAIT 状态
- 服务器收到了 ACK 应答报文后,就进入了 CLOSE 状态,至此服务端已经完成连接的关闭。
- 客户端在经过 2MSL 一段时间后,自动进入 CLOSE 状态,至此客户端也完成连接的关闭。
注意:主动关闭连接的,才有 TIME_WAIT 状态
总结:
TCP_tw发生在四次挥手的期间;
四次挥手需要双方进行确认:
首先是客户端向服务段挥手,然后服务端确认为第一阶段;
再是服务端向客户端挥手,在客户端回应最后确认之前的那段时间,就是TCP_tw;
最后双方确认然后关闭连接