为什么tcp需要四次挥手而不是和握手一样是三次?

背景描述:

 在学习TCP的过程中,了解到tcp的三次握手和四次挥手,其中握手和挥手通信次数的区别(三次和四次)的差别,引起了我的注意

我学习tcp看的教程:

图解TCP数据报结构以及三次握手(非常详细) (biancheng.net)

文中三次握手的形象描述:

TCP建立连接时要传输三个数据包,俗称三次握手(Three-way Handshaking)。可以形象的比喻为下面的对话:

  • [Shake 1] 套接字A:“你好,套接字B,我这里有数据要传送给你,建立连接吧。”
  • [Shake 2] 套接字B:“好的,我这边已准备就绪。”
  • [Shake 3] 套接字A:“谢谢你受理我的请求。”

 上述通俗的描述很容易就能明白这个过程,

那我们来看一下挥手的形象描述:

建立连接需要三次握手,断开连接需要四次握手,可以形象的比喻为下面的对话:

  • [Shake 1] 套接字A:“任务处理完毕,我希望断开连接。”
  • [Shake 2] 套接字B:“哦,是吗?请稍等,我准备一下。”
  • 等待片刻后……
  • [Shake 3] 套接字B:“我准备好了,可以断开连接了。”
  • [Shake 4] 套接字A:“好的,谢谢合作。”

问题:

对比两者,我们能够发现区别就是,四次挥手的时候,客户端在提出断连要求并接收服务器响应后,需要等待服务器一段时间。“等待的这一下”让我很困惑,为什么四次挥手不能是如下这样:

  • [Shake 1] 套接字A:“任务处理完毕,我希望断开连接。”
  • [Shake 2] 套接字B:“我准备好了,可以断开连接了。”
  • [Shake 3] 套接字A:“好的,谢谢合作。”

或者换一种说法,“为什么TCP握手为什么不是四次”,为什么握手就不用等待服务器“响应”

  • [Shake 1] 套接字A:“你好,套接字B,我这里有数据要传送给你,建立连接吧。”
  • [Shake 2] 套接字B:“哦,是吗?请稍等,我准备一下。”
  • 等待片刻后……
  • [Shake 2] 套接字B:“好的,我这边已准备就绪。”
  • [Shake 3] 套接字A:“谢谢你受理我的请求。”

原因

        想弄清楚这个就要从tcp的机制上再深入一层。

        首先,tcp的目的就是要再复杂的环境下达到可靠有效的传输,所以tcp有重发机制。tcp发数据过去,需要在一段时间内收到服务器的反馈,不然发送端(客户端)会认为数据没有发送过去,导致重发。这种情况是我们不想看到的。

        所以,当tcp客户端发送数据到服务器,服务器必须快速做出响应,那么如果我们将tcp的四次挥手变成三步(上述),可不可以呢?那就要看客户端第一次提出挥手消息后,服务器需要多长的处理时间了,如果服务器的处理时间过长,那么必然会导致重发机制。那为什么握手需要三次,是因为握手的时候服务器的处理时间必定很小,所以能再客户端第一次发送握手请求的时候就准备好。

        到这里我们以旁敲侧击地,大概了解为什么需要四次挥手了。

新的问题

那么会有一个新的问题?为什么挥手需要处理时间?

那我们就需要对比一下握手和挥手下,服务器的状态。

        tcp同时有收发两个缓冲区,握手时服务器相当于没有任何配置,缓冲区是空的,不需要做任何处理,所以握手时能够快速回应,而挥手时概率上说,缓冲区可能还有没发完的数据,所以服务器还需要再处理一下,所以不能够快速反应,所以导致tcp是四次挥手。

TCP为什么是四次挥手,而不是三次? - 你好世界的回答 - 知乎
https://www.zhihu.com/question/63264012/answer/3048195585

可以参考这位的回答

        我在网上还看到其他网友的留言,了解到实际上tcp也是能够三次挥手的,在刚连接上立马断开就会有这种情况,所以也应证了是缓冲区以及重发机制共同造成了tcp四次挥手而不是三次挥手的原因。

总结

        更正一个定义,tcp不是四次挥手,而是大概率四次挥手。原因是tcp的重发机制和缓冲机制。tcp挥手时需要对缓冲区处理,需要等待一段时间,所以先让客户端等待一段时间,所以造成了四次挥手的机制。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值