文|洪生鹏

关于TCP协议三次握手的问题,在面试中是最为常见的知识点之一,得到了很多面试官的青睐,如果这个知识点没有掌握好,面试官要是问得深入一点,求职者往往会不知所措。

为什么建立连接需要三次握手?

首先非常明确的是两次握手是最基本的。第一次握手,客户端发了个连接请求消息到服务端,服务端收到信息后知道自己与客户端是可以连接成功的,但此时客户端并不知道服务端是否已经接收到了它的请求,所以服务端接收到消息后得应答,客户端得到服务端的反馈后,才确定自己与服务端是可以连接上的,这就是第二次握手。

客户端只有确定了自己能与服务端连接上才能开始发数据。所以两次握手肯定是最基本的。

image

看到这里,你或许会问,那么为什么需要第三次握手呢?我们来看一下,假设一下如果没有第三次握手,而是两次握手后我们就认为连接成功了,那么会发生什么?第三次握手是为了防止已经失效的连接请求报文段突然又传到服务端,因而产生错误。

譬如发起请求遇到类似这样的情况:客户端发出去的第一个连接请求由于某些原因在网络节点中滞留了导致延迟,直到连接释放的某个时间点才到达服务端,这是一个早已失效的报文,但是此时服务端仍然认为这是客户端的建立连接请求第一次握手,于是服务端回应了客户端,第二次握手。TCP三次握手

如果只有两次握手,那么到这里,连接就建立了,但是此时客户端并没有任何数据要发送,而服务端还在傻傻的等候佳音,造成很大的资源浪费。所以需要第三次握手,只有客户端再次回应一下,就可以避免这种情况。

如果你觉得上面的阐述过于专业化,还是有点萌萌的,不要紧,下面我们来个生活案例来阐述。

TCP 三次握手好比在一个夜高风黑的夜晚,你一个人在小区里散步,不远处看见小区里的一位漂亮妹子迎面而来,但是因为路灯有点暗等原因不能100%确认,所以要通过招手的方式来确定对方是否认识自己。

你首先向妹子招手(syn),妹子看到你向自己招手后,向你点了点头挤出了一个微笑(ack)。你看到妹子微笑后确认了妹子成功辨认出了自己(进入estalished状态)。

但是妹子有点不好意思,向四周看了一看,有没有可能你是在看别人呢,她也需要确认一下。妹子也向你招了招手(syn),你看到妹子向自己招手后知道对方是在寻求自己的确认,于是也点了点头挤出了微笑(ack),妹子看到对方的微笑后确认了你就是在向自己打招呼(进入established状态)。

于是两人加快步伐,走到了一起,彼此之间相互拥抱。

我们来回顾一下,这个过程中总共有四个动作,

你招手

妹子点头微笑

妹子招手

你点头微笑

其中妹子连续进行了两个动作,先是点头微笑(回复对方),然后再次招手(寻求确认),实际上我们可以将这两个动作合成一个动作,招手的同时点头和微笑(syn+ack)。于是这四个动作就简化成了三个动作。

你招手

妹子点头微笑并招手

你点头微笑

这就是三次握手的本质,中间的一次动作是两个动作的合并。通过这个案例,不知你对TCP三次握手,有没有进一步的理解。

握手完成后,开始TCP 数据传输

TCP 数据传输就是两个人隔空交流,有一定的距离,需要对方反复确认听见了自己的话。

你喊了一句话(data),妹子听见了之后要向你回复自己听见了(ack)。如果你喊了一句,半天没听到妹子回复,你会很低落,好比谈恋爱的时候,你满腔热情,而妹子忽冷忽热,所以你锲而不舍,一次不行,就两次,两次不行就三次,这就是tcp重传。

也有可能是妹子知道你的本意了,但是妹子有点害羞,迟迟没有回复亦或是妹子回复了你没收到,以至于你没收到妹子的回复。你不能判断究竟到底妹子喜不喜欢你,对你有没有好感,没关系,男人嘛?要主动点,重传一下就好。

既然会重传,妹子就有可能同一句话听见了两次,这就是去重。对于重传和去重这两项工作操作系统的网络内核模块都已经帮我们处理好了,我们不用理会。

由于笔者水平有限,由于笔者水平有限,很多网络基础知识需要去深入了解去探索,文中纰漏之处在所难免,权当抛砖引玉,还请各位大牛不吝赐教。欢迎交流。

【END】

三次握手的本质_关于TCP三次握手,这是我见过最好的解读了,通俗易懂相关推荐

  1. 三次握手的本质_动画讲解TCP的3次握手,4次挥手,让你一次看明白

    专注于Java领域优质技术,欢迎关注 作者:老钱 占小狼博客 TCP三次握手和四次挥手的问题在面试中是最为常见的考点之一.很多读者都知道三次和四次,但是如果问深入一点,他们往往都无法作出准确回答.本篇 ...

  2. c++ tcp 封装_关于TCP三次握手和四次挥手问题,求你别再问了问了...

    少点代码,多点头发 三次握手建立链接,四次挥手断开链接.这个问题算非常经典的问题,也是面试官非常喜欢问的问题. 不夸张的说,龙叔在校招面试的时候每一家公司都问到过关于三次握手和四次挥手相关的问题,相信 ...

  3. 三次握手和四次挥手图解_图解 TCP 三次握手和四次挥手

    人到中年,难免长胖发福. 大家好,我是你们有点严肃的胖福(hu), 这里我们聊学习和工作. - 内容提要 - TCP 有 6 种标示:SYN(建立联机) ACK(确认) PSH(传送) FIN(结束) ...

  4. 第三次握手为什么没有序列号_图解TCP三次握手与四次分手

    TCP三次握手和四次挥手不管是在开发还是面试中都是一个非常重要的知识点,它是我们优化web程序性能的基础.但是大部分教材都对这部分解释的比较抽象,本文我们就利用wireshark来抓包以真正体会整个流 ...

  5. 三次握手和四次挥手图解_图解TCP三次握手和四次挥手

    三次挥手 为什么建立连接需要三次握手? 三次握手的目的:为了防止已经失效的连接请求报文段突然又传到服务端,因而产生错误,保证在信道上传输可靠的数据 第一次握手:客户端发送syn包(syn=j)到服务器 ...

  6. 计算机网络tcp三次握手,快速掌握_计算机网络_TCP_三次握手

    虽然这个话题已经是老生常谈了,随手一搜资料一堆,但是让人快速掌握,我认为应该有几个概念先被明确指出,再放出那张大同小异的时序图. 01关注的字段 探讨三次握手问题前,不得不先了解TCP报文段中存在的这 ...

  7. python猜拳游戏三局两胜制_猜拳游戏三局两胜------java实现代码

    package com.javasm.exerices02; import java.util.ArrayList; import java.util.List; import java.util.R ...

  8. 三电平igbt死区时间计算_基于大功率三电平IGBT模块并联的参考设计

    当前的可再生能源行业中,光伏和风力发电均面临着补贴逐步退坡,平价上网时代即将到来的挑战.为应对这一挑战,光伏逆变器和风力变流器厂家研发的新品单机功率越来越高,以取得更低的单位功率成本.市场上1.5MW ...

  9. java如何给数字每三位加一个逗号_将每三个数字加上逗号处理Java代码

    下面是编程之家 jb51.cc 通过网络收集整理的代码片段. 编程之家小编现在分享给大家,也给大家做个参考. /** * 将每三个数字加上逗号处理(通常使用金额方面的编辑) * * @param st ...

最新文章

  1. 科研必备:10款提升科研效率的神器
  2. MySQL数据库一个字段对应多个值得模糊查询
  3. 应用程序-特定 权限设置并未向在应用程序容器 不可用 SID
  4. 使用Xpath+多进程爬取诗词名句网的史书典籍类所有文章。update~
  5. 高级软件工程第九次作业:东理三剑客团队作业-随笔4
  6. python没有报错但是没结果_python爬取豆瓣top250的电影的信息,没有报错哦,但是没有结果...
  7. mysql isamchk_mysqlcheck与myisamchk的区别
  8. Eclipse字体调整
  9. 十天学会php之第七天
  10. 基因重组- 冲刺计划
  11. 什么是结构化数据、半结构化数据、非结构化数据
  12. 帝国CMS Table '***.phome_ecms_news_data_' doesn't exist
  13. 解决Visio中对象不能通过键盘方向键微调位置
  14. MySQL数据库练习3
  15. 如何携号转网只需三步
  16. jquery 获取父级元素、子级元素、兄弟元素的方法
  17. 调整oracle服务器时间,那些年Oracle数据库主机时间调整的风花雪月
  18. 学Python一定就要做程序员吗?
  19. CyberLink PowerDVD V20.0.2325.62 ,跳脱你对影音播放工具的想象,一款全方位媒体播放器
  20. Win7 绕过密码登入系统

热门文章

  1. 8086和8088微处理器之间的区别
  2. 获取设置套接字选项:getsockopt, setsockopt
  3. Linux 下的进程间通信:管道、消息队列、共享文件、共享内存
  4. OpenCV学习笔记:绘图指令(矩形、圆、线、文本标注)
  5. jupyter notebook 快捷键设置字体大小_你可能并不知道这样定制炫酷的jupyter主题
  6. android连接django(乱哄哄的)
  7. c语言转图形化,「分享」C语言如何编写图形界面
  8. html中css修改字体,CSS字体设置 DIV内字体设置
  9. 昆仑万维C++工程师笔试
  10. linux服务进程文件,[Linux实用命令]-6-服务与进程管理