三次握手的核心目的是:双方确认彼此的发送和接收能力都正常,并同步初始序列号,为可靠数据传输做准备。
第一次握手:客户端 -> 服务器第二次握手:服务器 -> 客户端
第三次握手:客户端 -> 服务器
四次挥手是任何一方(客户端或服务器) 都可以主动发起的,目的是为了安全、可靠地关闭一个TCP连接。
第一次挥手:主动关闭方 -> 被动关闭方
· 发送方:客户端(主动关闭方)
· 接收方:服务器(被动关闭方)第二次挥手:被动关闭方 -> 主动关闭方
· 发送方:服务器(被动关闭方)
· 接收方:客户端(主动关闭方)
第三次挥手:被动关闭方 -> 主动关闭方
· 发送方:服务器(被动关闭方)
· 接收方:客户端(主动关闭方)
第四次挥手:主动关闭方 -> 被动关闭方
· 发送方:客户端(主动关闭方)
· 接收方:服务器(被动关闭方)为什么需要四次挥手?
因为 TCP 连接是全双工的,即数据可以在两个方向上独立传输。关闭连接需要分别关闭两个方向的数据流。
· 第一次和第二次挥手:关闭了从客户端到服务器的这个通道。
· 第三次和第四次挥手:关闭了从服务器到客户端的这个通道。
第二次和第三次挥手不能合并,是因为在第一次挥手后,服务器可能还有未发送完的数据需要继续传输给客户端,等所有数据都发送完毕后,服务器才能发出 FIN 包来关闭自己这个方向的通道。这就导致了 ACK 和 FIN 分成了两个包发送。