TCP三次握手四次分手不一样的解释
前言
关于这个问题,网上有很多教程和博客,都大同小异。但我看了之后,并不认同。那些复杂的解释给我一种“看着答案推过程”的牵强感觉,经不住推敲。
一,连接为什么是三次握手,而不是两次握手
一次就不讨论了,连一个来回都没走,根本就验证不了两个方向的通路
我的解释:不是三次握手,而是四次握手。
只不过是第二次和第三次 因为是同一个方向,合并了。所以呈现出三次的结果。
目的就是:我问你答,你问我答,保证两个方向的“来回”都是通的。
注意:是来回,也就4次。即便是同一个方向,也要双方都走一遍才算通。就像是一条简单的路,给路痴去走,他就可能走不通。
而按照网上那些猜疑链
的复杂说法,那得“无数次”握手(大家仔细想想是不是)
二,断开为什么是四次(断开和开启有什么区别)
我的解释:逻辑上,连接是瞬时的,(服务器)断开是一段时间。
为什么?有人就不认同了,如果说断开需要清理各种资源,那开启连接还需要创建各种资源的,时间上可能比断开还要更长呢。
没错,连接确实可能比断开时间还要更长。但连接和断开有个逻辑上的区别:触发连接之后,无论是客户端还是服务端“都是活的”,两边有能力有时间处理任何异常。 但断开就不一样了,自己断开,就相当于“自行了断”。
如果你想记录自己“自行了断”的全过程是,是不可能的。因为你没了,后面什么事也做不了了。保证开启,我们理论上有“无限大好时光”可以利用。但保证关闭,就得精心设计,来保证全程不会出现任何差池。
所以从逻辑上说,
开启:双方给个信号 提示一下,只要能确定路通了就行。
关闭:双方(主要是复杂的服务端)必须要全程处于另一方的监控之下完成,而客户端很简单,不太需要另一个人监控完着成断开(两个人总有一个先挂,另一个人最后孤零零的走)。
下面给一个时间分配图:
如果这一条长柱看成整个tcp的时间段的话,那么开启连接的过程就是那一条绿线,黄色的是大段的传输过程,蓝色是断开的过程。
这里把“开启”和“连接”作为一个意思,是因为:所谓开启,就是连接上,就是把开启的信息告知对方,就是打个电话告诉对方,我接下来要干什么事了。所以“打电话”相对于全过程,可以抽象为“一个时间点”。tcp断开之前也是要先连接上,告知对方我要断开了。断开这段蓝色的时间,就是服务器分两次回应的时间段。
下面说网上解释的不合理:
服务端接受到客户端端关闭消息之后,可能还还有数据要传输,所以先给个回应,确认没问题了 再次给个确认。
那我就不明白了:你还有shi没拉完,刚才怎么不说,就不能在第一个回应里就一并说了,还非要分两步。
而且大家有没有想过这个问题:客户端是什么时机选择的发送“断开连接”但请求的
。它是脑子一热就跟服务器说拜拜?当然不是。就好像你拉shi拉一半,马桶突然告诉你 我要下班了,怎么可能。肯定是你说我拉完了,然后马桶才会给你发出准备关门的消息。在计算机世界里,能一步完成的事情,绝不会多此一举分成两步(通过消息长度判断,传输完成 是双方都已经知道的事情)。
服务器之所以先给个回应,然后再给个回应。那是因为在这两个回应之间是服务器关闭资源的时间(关闭的时间也许比较长)。第二个回应之后,服务器彻底安全关闭。这个过程相当于全程被客户端监控着。
反过来想想:如果服务器还没完全关闭,就给了回应,客户端就信了,然后也关门走人了。结果服务器没关上,客户端此时早已人去楼空,只剩下服务器这边孤立无援。
但这种情况在开启的时候就不会出现:服务器如果没开启成功,但客户端就站在那里。哪怕它在发送数据的时候发现 其实服务器根本没开启成功。那又如何,再重新请求一次呗。反正人在这里就好,有问题都可以解决。一旦另一方人走了,那服务器就彻底凉凉。 这就我前面为什么说:开启可以抽象为“一个瞬时的点”(因为开启的过程,理论上可以融入传输数据的过程中),而关闭是一段时间,必须安全完整处理。
TCP三次握手四次分手不一样的解释相关推荐
- TCP三次握手/四次分手详解
TCP三次握手/四次分手详解 | ------------------TCP(Transmission Control Protocol) 传输控制协议 ...
- TCP三次握手四次挥手简介
TCP三次握手四次挥手简介 图解三次握手.四次挥手 建立连接:三次握手 关闭连接:四次挥手 上图传递过程中出现的几个字符(SYN,ACK,FIN,seq,ack)各代表什么意思 SYN,ACK,FIN ...
- java锁一次交互二次握手_Java后台开发面试实战(二):TCP三次握手四次挥手
感谢牛客网网友提供的面试经验! 1. 解释一下TCP三次握手四次挥手 图片来源于微信公众号:码农求职小助手 答: 嗯(稍作思考)- 三次握手简单来说,在数据传输开始前: 第一次握手:客户端向服务端发送 ...
- [计算机网络][总结][常见问题][TCP][三次握手][四次挥手]
TCP三次握手 四次挥手 三次握手 目的:保证传输的可靠性,为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误.主要防止资源的浪费. 具体过程:当客户端发出第一个连接请求报文段时并没有丢 ...
- TCP三次握手四次挥手(图解)
<TCP-IP协议栈概略图与TCP三次握手四次挥手> 目录 1 TCP过程详解 1.1 三次握手 1.2 四次挥手 2 使用tcpdump分析三次握手的过程 2.1 tcpdump抓包和t ...
- TCP三次握手四次挥手过程及其中的状态量
网上看到过一些有关TCP三次握手四次挥手的过程,觉得有必要总结一下了,对于了解TCP的过程还是有帮助的 1.变量含义 SYN表示建立连接, FIN表示关闭连接, ACK表示响应, PSH表示有 DAT ...
- java 中的网络编程(Socket、TCP三次握手四次挥手、TCP/UDP/URL)
文章目录 前言 一.网络编程概述 二.网络通信要素概述 1.如何实现网络中的主机互相通信 2.网络通信协议 3.IP和端口号 4.InetAddress类 5.网络协议 6.TCP/IP协议簇 7.T ...
- wireshark抓tcp三次握手四次挥手包
wireshark抓tcp三次握手四次挥手包 首先大家要连接,tcp建立连接的过程是我们要了解的,了解了之后才能传送数据嘛. 大家要搞清除过程才行,在我前面的博客具体的讲了怎么样建立的,这里只讲抓包. ...
- TCP三次握手四次挥手详解
TCP三次握手四次挥手 1. TCP报文格式 2. TCP连接需要解决的问题 3. 三次握手 4. 四次挥手 5. 一些补充问题 1. TCP报文格式 在了解三次握手和四次挥手之前,先知道TCP报文内 ...
最新文章
- eureka/zookeeper/consul 三个注册中心的异同点
- 2012年iOS开发人员必看的精品资料(100个)
- 一个中年程序员遇到突发情况的一些胡言乱语
- Qt之线程同步(生产者消费者模式 - QWaitCondition)
- HDU 1079 Calendar Game 博弈
- 一个Windows C++的线程池类实现
- 【无标题matlab2016A安装教程及下载】
- 模拟频率f、模拟角频率Ω 、数字频率ω之间的关系
- pythoneducoder苹果梨子煮水的功效_梨子煮水真的有润肺止咳化痰的功效吗?
- 聚焦网络攻击|知道创宇云安全2018年度网络安全态势报告
- oracle中nowait怎么用,oracle中UPDATE nowait 的使用方法介绍
- 开水果店的一些拿货小建议,水果店第一次如何拿货
- 【观察】从新华三2022十大技术趋势,看数字化如何重塑未来社会
- vue 路由三种写法方式
- Android Preference详解
- 阶乘后面有多少个0!!!
- MySQL索引type级别意思
- 无源光网络的原理和构成
- hibernate和数据库设计
- day10高级表单表格bfc