三次挥手
TCP的三次挥手实质是TCP的通信的连接,TCP的协议是位于传输层,其作用是建立可靠的通信服务,而为了准确的将数据可靠的传送到目的地,TCP协议采用三次挥手的方式来保障数据的可靠性传递。
首先三次挥手建立与客户端和服务端的握手过程。首先TCP通过同步序列号请求的方式让同步序列号连接。第一次握手是客户端(PC1)向服务端(PC2)发起握手的同步序列号SYN请求;第二次握手是服务端(PC2)向服务端(PC1)发送确认收到第一次的同步序列号申请(ACK),并且向服务端(PC1)发起第二次握手的同步序列号SYN申请;第三次握手是客户端(PC1)向服务端(PC2)发送确认收到第二次的同步序列号SYN申请(ACK),即完成三次握手,实现了数据传递期间的可靠性保障。其中TCP是使用序列号和确认序列字段的方式来实现数据的可靠和有序传递。
四次挥手
当数据通过三次握手建立了数据的可靠性传递之后,TCP需要通过“四次挥手”的机制来实现来断开TCP的连接。“四次挥手”的断开一定是建立在“三次握手”的基础之上,没有“三次握手”的建立就一定不会有“四次握手”的断开。
第一次挥手:客户端(PC1)会向服务端(PC2)发送请求断开连接(FIN),在第一次挥手的时候客户端会携带序列号(Seq)和“三次握手”的确认(ACK)发送至服务端。第二次挥手:服务端(PC2)会向服务端(PC1)发送确认收到第一次挥手的FIN请求,在此期间服务端(PC2)仍然会携带seq和ACK。第三次挥手:服务端(PC2)会向客户端(PC1)发送请求断开链接(FIN),期间仍然会携带seq和ACK向客户端发送FIN。第四次挥手:客户端(PC1)向服务端(PC2)发送确认断开链接(ACK)实现了四次挥手的全过程。
四次挥手是是因为断开必须要确保数据完成传输,并且在保证一方确认断开的前提下,另一方完成断开,在四次挥手的第二次挥手和第三次挥手,在人们的宏观意识之下,认为第二次挥手和第三次挥手是在同一时间下完成的,但是在微观意识之下,第二次挥手相较于第三次挥手较快。
为什么四次挥手不能是三次挥手?
这个因为第一次挥手表示客户端发送了一个FIN的包,表示客户端已发送数据完毕,但是服务端这 个时候可能还有数据没有发送完成,先发送给客户端一个ACK的包,等待自己的数据发送完成才能向客户端发送一个 FIN的包,表示自己的数据也已发送完成。