“三次握手,四次挥手”是指tcp协议建立和终止的链接过程:三次握手的目的是双方确认自己的发送和接受能力,以及同步序列号和确认号。四次挥手的目的是双方分别关闭自己的发送和接受能力,以及确认对方的关闭要求。
三次挥手过程如下:
第一次握手:客户端发送SYN报文,指定一个初始序列号seq=x,并告知服务器端要链接得到端口号。客户端进入syn_sent状态,等待服务器端回应。
第一次握手:客户端打电话给服务器,说“喂,你好,我是客户端,我想跟你聊聊”,并告诉服务器自己的编号x,并等待服务器回应。
第二次握手:服务器收到SYN报文后,如果同意连接,则发送一个SYN +ack报文 ,指定一个初始序列号seq=y,并将客户端的序列号加一个确认号ack=x+。服务器端进入SYN_rcvd状态,等待客户端确认。
第二次握手:服务器接到电话后,说“喂,你好,我是服务器,我收到你的编号x了,我的编号是y”,并把客户端的编号x加一再告诉客户端。
第三次握手:客户端收到SYN+ACK报文后,检查确认号是否为自己的序列号加一,如果正确,则发送一个ACK报文,将服务器端的序列号加一作为确认号ack=y+1。客户端进入ESTABLISHED状态,准备发送数据。服务器端收到ACK报文后,也进入ESTABLISHED状态,准备接收数据。
第三次握手:客户端听到服务器的回应后,说“好的,我收到你的编号y了,我把它加一再告诉你”,并准备开始聊天。服务器听到客户端的回应后,也准备开始聊天。
四次挥手的过程如下:
第一次挥手:客户端发送一个FIN报文,指定一个序列号seq=u,并告知服务器端要关闭连接。客户端进入FIN_WAIT1状态,等待服务器端回应。
第一次挥手:客户端说“好了,我没什么可说的了”,并告诉服务器自己的编号u,并等待服务器回应。
第二次挥手:服务器端收到FIN报文后,发送一个ACK报文,将客户端的序列号加一作为确认号ack=u+1。服务器端进入CLOSE_WAIT状态,等待应用层关闭连接。客户端收到ACK报文后,进入FIN_WAIT2状态,等待服务器端关闭连接。
二次挥手:服务器说“好吧,我知道了”,并把客户端的编号u加一再告诉客户端。客户端听到后就不再说话了
第三次挥手:服务器端应用层关闭连接后,发送一个FIN报文,指定一个序列号seq=v,并将客户端的序列号加一作为确认号ack=u+1。服务器端进入LAST_ACK状态,等待客户端确认。
第三次挥手:服务器说“那我也没什么可说的了”,并告诉客户端自己的编号v,并等待客户端回应。客户端听到后就说“好吧,再见”,并把服务器的编号v加一再告诉服务器
第四次挥手:客户端收到FIN报文后,发送一个ACK报文,将服务器端的序列号加一作为确认号ack=v+1。客户端进入TIME_WAIT状态,等待一段时间确保服务器端收到ACK报文后才关闭连接。服务器端收到ACK报文后,关闭连接,进入CLOSED状态。
第四次挥手:客户端等待一段时间后就挂断电话。服务器听到客户端的回应后也挂断电话。