开发者社区> 问答> 正文

讲⼀下四次握⼿?✨

展开
收起
前端问答 2019-12-11 07:54:45 707 0
1 条回答
写回答
取消 提交回答
  • 前端问答小助手

    TCP 的连接的拆除需要发送四个包,因此称为四次挥⼿(Four-way handshake),也叫做改进的三次握⼿。客户端或服务器均可主动发起挥⼿动作,在 socket 编程中,任何⼀⽅执⾏ close() 操作即可产⽣挥⼿操作。

    • 第⼀次挥⼿(FIN=1,seq=x)

    假设客户端想要关闭连接,客户端发送⼀个 FIN 标志位置为1的包,表示⾃⼰已经没有数据可以发送了,但是仍然可以接受数据。 发送完毕后,客户端进⼊ FIN_WAIT_1 状态。

    • 第⼆次挥⼿(ACK=1,ACKnum=x+1)

    服务器端确认客户端的 FIN 包,发送⼀个确认包,表明⾃⼰接受到了客户端关闭连接的请求,但还没有准备好关闭连接。 发送完毕后,服务器端进⼊ CLOSE_WAIT 状态,客户端接收到这个确认包之后,进⼊ FIN_WAIT_2 状态,等待服务器端关闭连接。

    • 第三次挥⼿(FIN=1,seq=y)

    服务器端准备好关闭连接时,向客户端发送结束连接请求,FIN 置为1。 发送完毕后,服务器端进⼊ LAST_ACK 状态,等待来⾃客户端的最后⼀个ACK。

    • 第四次挥⼿(ACK=1,ACKnum=y+1)

    客户端接收到来⾃服务器端的关闭请求,发送⼀个确认包,并进⼊ TIME_WAIT 状态,等待可能出现的要求重传的 ACK 包。 服务器端接收到这个确认包之后,关闭连接,进⼊ CLOSED 状态。 客户端等待了某个固定时间(两个最⼤段⽣命周期,2MSL,2 Maximum Segment Lifetime)之后,没有收到服务器端的 ACK ,认为服务器端已经正常关闭连接,于是⾃⼰也关闭连接,进⼊ CLOSED 状态。

    四次挥⼿的示意图如下:

    image.png

    2019-12-11 07:56:28
    赞同 1 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
数据市场⼤数据⽣态的滋养地 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载