三次握手
第一次握手:client端建立连接,发送一个SYN同步包,发送之后状态变成SYN_SENT。
此次握手目的:client告知server要建立连接,server确认client可以发起请求
第二次握手:server端收到SYN之后,同意建立连接,返回一个ACK响应,同时也会给client发送一个SYN包,发送完成之后状态变为SYN_RCVD。
此次握手目的:client确认自己发起请求server可以接收到,server可以发出请求
第三次握手:client端收到server的ACK之后,状态变为ESTABLISHED,返回ACK给server端。server收到之后状态也变为ESTABLISHED,连接建立完成。
此次握手目的:serve确认自己发起请求client可以接收到
四次挥手
第一次挥手:client端向server发送FIN包,进入FIN_WAIT_1状态,这代表client端已经没有数据要发送了。
此次挥手目的:client告知server要请求的数据
第二次挥手:server端收到之后,返回一个ACK,进入CLOSE_WAIT等待关闭的状态,因为server端可能还有没有发送完成的数据。
此次挥手目的:server返回给client对应的数据
第三次挥手:等到server端数据都发送完毕之后,server端就向client发送FIN,进入LAST_ACK状态。
此次挥手目的:server告知client数据返回完毕
第四次挥手:client收到ACK之后,进入TIME_WAIT的状态,同时回复ACK,server收到之后直接进入CLOSED状态,连接关闭。但是client要等待2MSL(报文最大生存时间)的时间,才会进入CLOSED状态。
此次挥手目的:client告知server接收到对应的数据