详解 TCP 连接的“ 三次握手 ”与“ 四次挥手 ”(14)

随后服务器端结束CLOSE-WAIT阶段 , 进入LAST-ACK阶段 。 并且停止在服务器端到客户端的方向上发送数据 , 但是服务器端仍然能够接收从客户端传输过来的数据 。 (4)客户端收到从服务器端发出的TCP报文 , 确认了服务器端已做好释放连接的准备 , 结束FIN-WAIT-2阶段 , 进入TIME-WAIT阶段 , 并向服务器端发送一段报文 , 其中: 标记位为ACK , 表示“接收到服务器准备好释放连接的信号” 。 序号为Seq=U+1;表示是在收到了服务器端报文的基础上 , 将其确认号Ack值作为本段报文序号的值 。 确认号为Ack=W+1;表示是在收到了服务器端报文的基础上 , 将其序号Seq值作为本段报文确认号的值 。 随后客户端开始在TIME-WAIT阶段等待2MSL为什么要客户端要等待2MSL呢?见后文 。 服务器端收到从客户端发出的TCP报文之后结束LAST-ACK阶段 , 进入CLOSED阶段 。 由此正式确认关闭服务器端到客户端方向上的连接 。 客户端等待完2MSL之后 , 结束TIME-WAIT阶段 , 进入CLOSED阶段 , 由此完成“四次挥手” 。 后“两次挥手”既让客户端知道了服务器端准备好释放连接了 , 也让服务器端知道了客户端了解了自己准备好释放连接了 。 于是 , 可以确认关闭服务器端到客户端方向上的连接了 , 由此完成“四次挥手” 。 与“三次挥手”一样 , 在客户端与服务器端传输的TCP报文中 , 双方的确认号Ack和序号Seq的值 , 都是在彼此Ack和Seq值的基础上进行计算的 , 这样做保证了TCP报文传输的连贯性 , 一旦出现某一方发出的TCP报文丢失 , 便无法继续\"挥手\" , 以此确保了\"四次挥手\"的顺利完成 。 3、“四次挥手”的通俗理解

推荐阅读