前言

关于这个问题,网上有很多教程和博客,都大同小异。但我看了之后,并不认同。那些复杂的解释给我一种“看着答案推过程”的牵强感觉,经不住推敲。

一,连接为什么是三次握手,而不是两次握手

一次就不讨论了,连一个来回都没走,根本就验证不了两个方向的通路
我的解释:不是三次握手,而是四次握手
只不过是第二次和第三次 因为是同一个方向,合并了。所以呈现出三次的结果。
目的就是:我问你答,你问我答,保证两个方向的“来回”都是通的。
注意:是来回,也就4次。即便是同一个方向,也要双方都走一遍才算通。就像是一条简单的路,给路痴去走,他就可能走不通。

而按照网上那些猜疑链的复杂说法,那得“无数次”握手(大家仔细想想是不是)

二,断开为什么是四次(断开和开启有什么区别)

我的解释:逻辑上,连接是瞬时的,(服务器)断开是一段时间。
为什么?有人就不认同了,如果说断开需要清理各种资源,那开启连接还需要创建各种资源的,时间上可能比断开还要更长呢。
没错,连接确实可能比断开时间还要更长。但连接和断开有个逻辑上的区别:触发连接之后,无论是客户端还是服务端“都是活的”,两边有能力有时间处理任何异常。 但断开就不一样了,自己断开,就相当于“自行了断”。
如果你想记录自己“自行了断”的全过程是,是不可能的。因为你没了,后面什么事也做不了了。保证开启,我们理论上有“无限大好时光”可以利用。但保证关闭,就得精心设计,来保证全程不会出现任何差池。
所以从逻辑上说,
开启:双方给个信号 提示一下,只要能确定路通了就行。
关闭:双方(主要是复杂的服务端)必须要全程处于另一方的监控之下完成,而客户端很简单,不太需要另一个人监控完着成断开(两个人总有一个先挂,另一个人最后孤零零的走)。
下面给一个时间分配图:

如果这一条长柱看成整个tcp的时间段的话,那么开启连接的过程就是那一条绿线,黄色的是大段的传输过程,蓝色是断开的过程。
这里把“开启”和“连接”作为一个意思,是因为:所谓开启,就是连接上,就是把开启的信息告知对方,就是打个电话告诉对方,我接下来要干什么事了。所以“打电话”相对于全过程,可以抽象为“一个时间点”。tcp断开之前也是要先连接上,告知对方我要断开了。断开这段蓝色的时间,就是服务器分两次回应的时间段。

下面说网上解释的不合理

服务端接受到客户端端关闭消息之后,可能还还有数据要传输,所以先给个回应,确认没问题了 再次给个确认。

那我就不明白了:你还有shi没拉完,刚才怎么不说,就不能在第一个回应里就一并说了,还非要分两步。
而且大家有没有想过这个问题:客户端是什么时机选择的发送“断开连接”但请求的。它是脑子一热就跟服务器说拜拜?当然不是。就好像你拉shi拉一半,马桶突然告诉你 我要下班了,怎么可能。肯定是你说我拉完了,然后马桶才会给你发出准备关门的消息。在计算机世界里,能一步完成的事情,绝不会多此一举分成两步(通过消息长度判断,传输完成 是双方都已经知道的事情)。

服务器之所以先给个回应,然后再给个回应。那是因为在这两个回应之间是服务器关闭资源的时间(关闭的时间也许比较长)。第二个回应之后,服务器彻底安全关闭。这个过程相当于全程被客户端监控着。
反过来想想:如果服务器还没完全关闭,就给了回应,客户端就信了,然后也关门走人了。结果服务器没关上,客户端此时早已人去楼空,只剩下服务器这边孤立无援。
但这种情况在开启的时候就不会出现:服务器如果没开启成功,但客户端就站在那里。哪怕它在发送数据的时候发现 其实服务器根本没开启成功。那又如何,再重新请求一次呗。反正人在这里就好,有问题都可以解决。一旦另一方人走了,那服务器就彻底凉凉。 这就我前面为什么说:开启可以抽象为“一个瞬时的点”(因为开启的过程,理论上可以融入传输数据的过程中),而关闭是一段时间,必须安全完整处理。

TCP三次握手四次分手不一样的解释相关推荐

  1. TCP三次握手/四次分手详解

    TCP三次握手/四次分手详解                         | ------------------TCP(Transmission Control Protocol) 传输控制协议 ...

  2. TCP三次握手四次挥手简介

    TCP三次握手四次挥手简介 图解三次握手.四次挥手 建立连接:三次握手 关闭连接:四次挥手 上图传递过程中出现的几个字符(SYN,ACK,FIN,seq,ack)各代表什么意思 SYN,ACK,FIN ...

  3. java锁一次交互二次握手_Java后台开发面试实战(二):TCP三次握手四次挥手

    感谢牛客网网友提供的面试经验! 1. 解释一下TCP三次握手四次挥手 图片来源于微信公众号:码农求职小助手 答: 嗯(稍作思考)- 三次握手简单来说,在数据传输开始前: 第一次握手:客户端向服务端发送 ...

  4. [计算机网络][总结][常见问题][TCP][三次握手][四次挥手]

    TCP三次握手 四次挥手 三次握手 目的:保证传输的可靠性,为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误.主要防止资源的浪费. 具体过程:当客户端发出第一个连接请求报文段时并没有丢 ...

  5. TCP三次握手四次挥手(图解)

    <TCP-IP协议栈概略图与TCP三次握手四次挥手> 目录 1 TCP过程详解 1.1 三次握手 1.2 四次挥手 2 使用tcpdump分析三次握手的过程 2.1 tcpdump抓包和t ...

  6. TCP三次握手四次挥手过程及其中的状态量

    网上看到过一些有关TCP三次握手四次挥手的过程,觉得有必要总结一下了,对于了解TCP的过程还是有帮助的 1.变量含义 SYN表示建立连接, FIN表示关闭连接, ACK表示响应, PSH表示有 DAT ...

  7. java 中的网络编程(Socket、TCP三次握手四次挥手、TCP/UDP/URL)

    文章目录 前言 一.网络编程概述 二.网络通信要素概述 1.如何实现网络中的主机互相通信 2.网络通信协议 3.IP和端口号 4.InetAddress类 5.网络协议 6.TCP/IP协议簇 7.T ...

  8. wireshark抓tcp三次握手四次挥手包

    wireshark抓tcp三次握手四次挥手包 首先大家要连接,tcp建立连接的过程是我们要了解的,了解了之后才能传送数据嘛. 大家要搞清除过程才行,在我前面的博客具体的讲了怎么样建立的,这里只讲抓包. ...

  9. TCP三次握手四次挥手详解

    TCP三次握手四次挥手 1. TCP报文格式 2. TCP连接需要解决的问题 3. 三次握手 4. 四次挥手 5. 一些补充问题 1. TCP报文格式 在了解三次握手和四次挥手之前,先知道TCP报文内 ...

最新文章

  1. eureka/zookeeper/consul 三个注册中心的异同点
  2. 2012年iOS开发人员必看的精品资料(100个)
  3. 一个中年程序员遇到突发情况的一些胡言乱语
  4. Qt之线程同步(生产者消费者模式 - QWaitCondition)
  5. HDU 1079 Calendar Game 博弈
  6. 一个Windows C++的线程池类实现
  7. 【无标题matlab2016A安装教程及下载】
  8. 模拟频率f、模拟角频率Ω 、数字频率ω之间的关系
  9. pythoneducoder苹果梨子煮水的功效_梨子煮水真的有润肺止咳化痰的功效吗?
  10. 聚焦网络攻击|知道创宇云安全2018年度网络安全态势报告
  11. oracle中nowait怎么用,oracle中UPDATE nowait 的使用方法介绍
  12. 开水果店的一些拿货小建议,水果店第一次如何拿货
  13. 【观察】从新华三2022十大技术趋势,看数字化如何重塑未来社会
  14. vue 路由三种写法方式
  15. Android Preference详解
  16. 阶乘后面有多少个0!!!
  17. MySQL索引type级别意思
  18. 无源光网络的原理和构成
  19. hibernate和数据库设计
  20. day10高级表单表格bfc

热门文章

  1. 测试用例excel转word(Office word篇)
  2. 你所不知道的稳压二极管
  3. 你能上进到什么地步?
  4. java 非法操作异常_电脑提示非法操作怎么办 电脑系统故障解决方法【详解】
  5. 2022,前端应该阅读这些文章
  6. Python爬虫详解:爬虫是什么,如何做爬虫?
  7. filter:grayscale(1) -- 使网页呈现哀悼模式
  8. WebRTC 教程一:WebRTC信令、架构和 API 入门
  9. 实验八无线城域网WiMax仿真实验
  10. MATLAB-- mean()的使用