美团二面:TCP的挥手过程能否简化为三次而非四次?
- 内容介绍
- 文章标签
- 相关推荐
本文共计4166个文字,预计阅读时间需要17分钟。
上周有读者团时,被问到:在TCP四次挥手过程中,能不能把第二次的ACK报文,和第三次FIN报文一起发送?当然,我们在学习TCP挥手时,学到的是需要四次来完成TCP挥手,但具体操作时,是否可以合并发送呢?
上周有位读者面美团时,被问到:TCP 四次挥手中,能不能把第二次的 ACK 报文, 放到第三次 FIN 报文一起发送?
虽然我们在学习 TCP 挥手时,学到的是需要四次来完成 TCP 挥手,但是在一些情况下, TCP 四次挥手是可以变成 TCP 三次挥手的。
而且在用 wireshark 工具抓包的时候,我们也会常看到 TCP 挥手过程是三次,而不是四次,如下图:
先来回答为什么 RFC 文档里定义 TCP 挥手过程是要四次?
再来回答什么情况下,什么情况会出现三次挥手?
为什么 TCP 挥手需要四次?
TCP 四次挥手的过程如下:
具体过程:
- 客户端主动调用关闭连接的函数,于是就会发送 FIN 报文,这个 FIN 报文代表客户端不会再发送数据了,进入 FIN_WAIT_1 状态;
- 服务端收到了 FIN 报文,然后马上回复一个 ACK 确认报文,此时服务端进入 CLOSE_WAIT 状态。
本文共计4166个文字,预计阅读时间需要17分钟。
上周有读者团时,被问到:在TCP四次挥手过程中,能不能把第二次的ACK报文,和第三次FIN报文一起发送?当然,我们在学习TCP挥手时,学到的是需要四次来完成TCP挥手,但具体操作时,是否可以合并发送呢?
上周有位读者面美团时,被问到:TCP 四次挥手中,能不能把第二次的 ACK 报文, 放到第三次 FIN 报文一起发送?
虽然我们在学习 TCP 挥手时,学到的是需要四次来完成 TCP 挥手,但是在一些情况下, TCP 四次挥手是可以变成 TCP 三次挥手的。
而且在用 wireshark 工具抓包的时候,我们也会常看到 TCP 挥手过程是三次,而不是四次,如下图:
先来回答为什么 RFC 文档里定义 TCP 挥手过程是要四次?
再来回答什么情况下,什么情况会出现三次挥手?
为什么 TCP 挥手需要四次?
TCP 四次挥手的过程如下:
具体过程:
- 客户端主动调用关闭连接的函数,于是就会发送 FIN 报文,这个 FIN 报文代表客户端不会再发送数据了,进入 FIN_WAIT_1 状态;
- 服务端收到了 FIN 报文,然后马上回复一个 ACK 确认报文,此时服务端进入 CLOSE_WAIT 状态。

