zoukankan      html  css  js  c++  java
  • 计算机网络-TCP四次挥手

    通俗示例

    小明和小红是网上认识的网友,两个人关系非常好。

    小明喜欢吃土鸡蛋,所以小红经常给小明寄家里的土鸡蛋,小红喜欢吃苹果,所以小明经常给小红寄家里种的苹果。

    这一次,由于小红家要搬去外国,以后没办法再寄鸡蛋了,小红就发消息跟小明说,“我全家都要搬去国外了,我发完最后这一框鸡蛋后,我就不再给你寄鸡蛋了。”,发完信息后,小红寄完最后的鸡蛋后,就不再寄鸡蛋了。这是第一次信息交互,小红发送完最后的数据,同时让小明知道她要搬家了,以后不再寄鸡蛋了。这就是第一次挥手,客户端向服务端发送完最后数据后,停止发送数据,并发送消息让服务端知道。

    注意:第一次挥手后,客户端但是仍然可以进行信息交互,接收数据和发送数据,不是不能发送数据,只是不发数据;服务端依旧可以发送、接收数据,同时可以进行信息交互。

    小明接收到小红的消息后,并不会立即回复消息,而是等接收到到小红最后寄来的鸡蛋后,就给小红回个消息,“你最后的鸡蛋我收到了,但是我家里的还有很多苹果没有寄过去,你先别搬家,等我寄完了,我会和你说一声的”。这就是第二次信息交互,是小明回应小红的答复,同时跟小红表达,自己还寄了很多苹果过去,先别搬家。这就是第二次挥手,在接收客户端停止发送数据的请求和接收完最后的数据后,服务端向客户端发送请求表示已经知晓客户端停止发送数据了。但是服务端还有数据给客户端发送过去,所以,服务端在第二次挥手的时候同时也会表示,自己的数据还没发送完毕,所以先不要关闭数据接收功能。

    注意:第二次挥手后,客户端可以进行信息交互,和接收数据,但是不可以发送数据;服务端依旧可以发送、接收数据,同时可以进行信息交互。

    一个月过后,小明家里的苹果也没有了,这时候小明停止发送苹果,并给小红发送消息说,“小红,我家里的苹果没有了,所以我之后不会再给你发苹果了,你可以去国外了。”。这就是第三次信息交互,小明的苹果发完了,并且同时让小红可以离开了。这也是第三次挥手的作用,在服务端发送完所有请求后,就停止发送数据,并通知客户端不用再接收数据了。

    注意:第三次挥手后,客户端仍然可以进行信息交互,和接收数据;服务端不能再发送数据,但是可以接收数据和进行信息交互。

    小红接收到小明的信息后,就给小明发送消息,“我接收到你最后的苹果了,谢谢你,再见。”,小明看到消息后,就不再发送信息了,而小红也不再发送信息,搬家去了国外。这就是第四次信息交互,小红让小明知道她已经收到小明不再寄苹果的消息。这就是第四次挥手,客户端确认服务端没有数据发送后,就向服务端发送断开连接的请求,服务端接收到后,断开连接,客户端在没有接收到数据后也断开连接。

    注意:第四次挥手之后,双方断开连接,都无法互相发送数据和信息。除非重新发起请求,进行三次握手,才能再互相发送数据。

    为什么不可以把第二次和第三次挥手合并成一次发送,毕竟都是同一个端发送的信息?

    其实在清楚了解四次挥手的原理和机制之后,我们就可以清楚的明白为什么不可以把第二次和第三次挥手合并。

    客户端虽然停止发送数据,但是服务端还有数据要发送,所以第二次只是通知客户端要继续接收数据;而服务端发送完数据后,就发送第三次挥手,停止发送数据。就比如小红虽然停止寄鸡蛋,但是小明还有苹果没给小红寄过去,所以第二次是为了提醒小红还有苹果没有传过去,所以先不要搬家,再寄完苹果后,小明又发送信息通知小红说没有苹果了,我也不寄了。这个也是面对这个问题的时候常用的解释。

    那如果先不发送第二次挥手,而是等到服务端也发送完数据后,直接发送第三次挥手信息给客户端,这不就即可以实现三次挥手,又可以保证服务端数据可以全部发送完毕?

    可以的,这在理论上是可行的,通过延迟确定,可以让服务端的第二次请求延迟,等到数据发送完毕后,直接发送第三次挥手一块发送给客户端。从而实现三次握手。但是这样导致的一个问题就是,如果第三次挥手迟迟未到,客户端发送数据功能迟迟不能关闭,可能导致资源浪费。因为客户端要在接收到服务端的第二次挥手才停止发送数据功能。

    四次挥手只能是客户端发起吗?

    很显然不是,TCP中断的请求,任意一方都可以发起,所以四次挥手的发起任意一方都可以先进行。

    结语

    以上就是四次挥手的知识点讲解。四次挥手在是否能实现三次挥手的问题上是可以进行探讨,


     

    aHR0cHM6Ly9zczEuYmRzdGF0aWMuY29tLzcwY0Z1WFNoX1ExWW54R2twb1dLMUhGNmhoeS9pdC91PTQw.png
     
    四次挥手的自己理解:
    相当于 男(服务器)女(客户端)朋友分手这个过程
    第一次       女生告诉男生   我们分手吧     这个时候    双方还有商量的余地 【双发可以就分手事件展开交流】 (双发都可以发送和接受数据 ) 都有家里的钥匙   可以随便进出家门。
    第二次       男生告诉女生   好的,等我收拾完东西就分手   这个时候 双方还有商量的余地  【男生的缓兵之计,试图挽留】(双发都可以发送和接受数据 ) 都有家里的钥匙   可以随便进出家门。
    第三次       男生挽留失败,被女方赶出家门,男生只能把自己的东西收拾完毕拉走   钥匙也交给了女生   女生有钥匙 可以自由进出家门(接收和发送数据 )在屋里和室外的男方对话    告诉男生 赶紧走,没有挽回的余地了  这个时候  男方没有了钥匙  进不了家门(发送不了数据)   只能 站在门外听(接收数据)  
    第四次      男生心一狠  ,觉得女方好狠,爱错了人,拉着行李就走了, 双方谁也听不到谁讲话    一拍两散 各自安好。 (数据停止发送和接受   链接结束)
  • 相关阅读:
    路由的添加和删除
    extjs中的tabpanle下的combobox提交问题
    Asp.net下from认证统一认证配置
    ASP.NET权限管理系统(FrameWork) 1.0.8 Release
    Web网站架构设计
    手机6120C 玩仙剑dos版
    Extjs 4.07 对类型定义引发的匹配问题
    Supesoft权限管理系统(FrameWork) 1.0.9 Release
    Google静态地图如何显示两点之间路线1(简单路线)
    Chrome不支持showModalDialog模态对话框和无法返回returnValue的问题
  • 原文地址:https://www.cnblogs.com/ndh074512/p/14608267.html
Copyright © 2011-2022 走看看