TCP链接建立和关闭(3次握手4次挥手)
- 客户端发送SYN包(SYN = 1, seq = x)至服务端,并处于SYN_SENT状态,等待服务器确认
- 服务端解析SYN,并发送SYN + ACK(SYN = 1, ACK = x + 1, seq = y)
包至客户端,并处于SYN_RECV状态,允许建立链接(告知服务器已做好准备,可以发送数据) - 客户端获取SYN + ACK 并发送ACK(ACK = y + 1, seq = z)包至服务端,链接建立成功。(即将开始发送数据)
- TCP向服务端发送带有FIN(FINISH)标记报文,客户端进入FIN_WAIT_1状态(通知服务器端准备关闭)
- 服务端接受通知,向客户端发送ACK报文,确认序号为收到的序号加1,和SYN一样,一个FIN报文将占用一个序号。(告诉浏览器,请求报文接受完毕。我准备关闭了,你也准备吧)服务器进入CLOSE_WAIT状态。
- 服务器端发送FIN,用来关闭服务器到客户端的数据传输,服务器进入LAST_ACK状态。(告诉浏览器,响应报文发送完毕。你准备关闭吧。)
- 客户端接受FIN报文,服务器进入TIME_WAIT状态,发送ACK包给服务器(ACK = b + 1, seq = a +
1),服务器进入CLOSED状态。(告诉服务器响应报文接受完毕,准备关闭。)