学习原因

这个是面试的一个常问热点,所以务必要掌握。

通俗示例

小红是人事部门的员工,现在正在招收IT人员,小明看到招聘信息和待遇,感觉很适合自己,所以准备和小红发消息了解具体情况。而简历在本故事中代表最终要发送的数据。

首先,小明发消息给小红,向她表示想要应聘公司的IT部门,想要投简历进一步交流了解。这是第一次信息交流,这个时候简历还没有投递,只是小明让小红知道他想要投简历应聘这个职位。这也是第一次握手的作用,用于客户端询问服务端是否可以进行交互。

而小红看到了小明的信息后,就回消息和他说,可以啊,我们人数还没招满,我欢迎你投简历。这是第二次信息交流,是小红表示她有空,也有兴趣接收小明的简历。这也是第二次握手的作用,用于服务端向客户端表示可以接收信息。

小明看到消息后,又回了小红信息说,谢谢你能给我机会去应聘这个职位,我现在简历准备好了,也做好发送简历的准备了,你现在开放一下邮箱,两分钟后就能接收到我的简历了。这是第三次信息交互,为了小红知道小明已经做好发送简历准备,并让小红开放接收简历的渠道,让简历能顺利接收。这也是第三次握手的作用,让服务端知道客户端已经做好发送信息准备,并让服务端开放信息接收,从而完成三次握手。

小红看到消息后,打开了邮箱接收功能,过了一会,就接收到了小明的简历了。

以上就是三次握手的通俗表达,第一次小明询问是否还招人,第二次是小红回复还招人,第三次是小明为了确保小红能收到信息,进行最终的确认。这就是三次握手的通俗表达。

有的人可能觉得最后还要再提醒,就很墨迹,觉得可以改成下面这个步骤:

1、小明跟小红发消息,我想要应聘贵公司,如果还招人的话,我直接投简历给您。这是第一次。

2、小红回消息说,我们还招人,你投吧。然后就打开邮箱等待接收简历。这是第二次。

3、小明看到信息后,直接发送简历,然后小红就可以接受到简历了。

按照上面的描述,直接就省略了小明第三次最终确认的步骤,减少了信息交互的步骤,提升了信息交互效率,何乐而不为呢?按照效率来说,的确是这样的,毕竟少了一次信息最终确认,但是这样可能导致资源浪费的问题。

我再讲两个例子,来描述只交换信息两次的两大弊端。

弊端一:

1、小明跟小红发消息,我想要应聘贵公司,如果还招人的话,我直接投简历给您。这是第一次。但是好巧不巧,这一次发送时页面一直转圈圈等待,小明以为没有发送出去,刷新页面又再发送一遍。而实际上第一次由于网络卡顿,已经发出去了,但是比第二次更晚到达。

2、这时候,小红接受到小明第二次发送的信息,小红回消息说,我们还招人,你投吧。然后就打开邮箱等待接收简历。这是第二次。小明接收到信息后就直接发送简历过去,完成信息交互。

3、而在小红接收到简历后,突然,小明发送的第一次信息突破重重关卡又到了,这是时候小红就接收到小明第一次的发送信息。然后小红以为这是小明要重新发一个建立给她,所以又开放邮箱,并回复小明说,你可以发消息了。

4、这时候小明看到消息直接蒙逼,简历都发过去了,没法发第二遍了,所以小红和小明都只能在那干瞪眼。半小时后小红气愤的关闭了邮箱。

弊端二:

1、小明跟小红发消息,我想要应聘贵公司,如果还招人的话,我直接投简历给您。这是第一次。

2、小红回消息说,我们还招人,你投吧。然后就打开邮箱等待接收简历。这是第二次。

小明看到消息后,刚准备发消息,但好巧不巧,家里停电了,没网了,小明只能在这苦苦等待。而小红呢,完全不知道小明那边的问题,也是在那里傻等,等着小明发简历。从而导致小红没法去处理其它问题,而小红等了半小时后,直接关了小明的联系。

可以看到,如果没有第三次的最终确认,提前确认发送环境等,可能就导致小红白等半小时。

而又有人可能会说了,你这不扯淡嘛,难道第三次确认之后,就能保证小明能百分百成功发送简历到小红那里了吗?就算有第三次的环境确认,最后发送的时候还是可能因为停电没网而导致发送不成功嘛。

对,的确,即使最终确认后,最终发送也会有断网的风险。甚至就算提升到10000000次握手,都无法确保信息能够准确发送和接收,为什么?因为发送过去的确认信息,只能保证发送当时的那一刻,发送方环境是好的,就好像12点整小明发送信息说我的电脑好的一匹,随时可以发送信息,但是小红接收到信息可能是12点10分,这十分钟时间里面的电脑状态是随时会变化的,可能十二点零一秒,电脑就用不了了,所以,无论多少次握手,都无法确保信息能准确发送。

那三次握手的意义是什么?

因为三次握手是确保双方互相知道对方状态正常的最低成本方案。

这句话怎么理解?

我们再说如果只要两次握手,

第一次发送信息,是小明发送信息给小红,只是确认小红是否还招人,并没有向小红表述他的环境能百分百发送成功简历。所以小红不知道小明能否百分百发送成功简历。

第二次发送信息,是小红发送信息给小明,让小明知道她能接收信息。这个时候小明知道小红做好接收简历准备,但是小红不知道小明做好简历发送准备。

如果是三次握手,

第一次发送信息,是小明发送信息给小红,只是确认小红是否还招人,并没有向小红表述他的环境能百分百发送成功简历。所以小红不知道小明能否百分百发送成功简历。

第二次发送信息,是小红发送信息给小明,让小明知道她能接收信息。这个时候小明知道小红做好接收简历准备,但是小红不知道小明做好简历发送准备。

第三次发送信息,是小明发送信息给小红,让小红知道小明已经做好发送简历的准备。这个时候小明知道小红做好接收简历准备,小红也知道小明做好简历发送准备。

这就是三次握手和两次握手的本质区别。一个是双方知道,一个只是单方面知道。如此三次握手比两次握手更加安全。

而最低成本方案的概念就是说,通过三次接收,双方都知道对方已经OK了,直接发数据就行,没必要再第四次,第五次握手了。

三次握手处理问题的本质

三次握手最终要解决的问题,就是网络信息交互的不稳定问题。提升信息交互成功率,降低由于无法接受到信息而导致的资源浪费问题。

以上就是三次握手的理解,之后还会继续进行修改,如果有什么建议,我会及时采纳和更正。

JAVA面试-计算机网络-TCP三次握手的更多相关文章

  1. 计算机网络TCP“三次握手”

    终于有时间写这篇文章了,最近真的比较忙! TCP协议  之 “三次握手” 引言:我们知道,TCP是面向连接的协议(相较于UDP无连接的协议),会在传送数据之前先在 发送端 & 接收端 之间建立 ...

  2. 计算机网络--TCP三次握手和四次挥手

    TCP(传输控制协议) TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的.可靠的.基于字节流的传输层通信协议.通过三次握手建立连接,通讯完成时要拆除连 ...

  3. 面试问题之计算机网络:TCP三次握手四次挥手

    转载于:https://www.cnblogs.com/Andya/p/7272462.html TCP三次握手: 起初A和B都处于CLOSED关闭状态 B创建TCB,处于LISTEN收听状态,等待A ...

  4. 面试官问我TCP三次握手和四次挥手,我真的是

    候选者:面试官你好,请问面试可以开始了吗 面试官:嗯,开始吧 面试官:今天来聊聊TCP吧,TCP的各个状态还有印象吗? 候选者:还有些许印象的,要不我就来简单说下TCP的三次握手和四次挥手的流程吧 候 ...

  5. Java网络编程学习A轮_02_抓包分析TCP三次握手过程

    参考资料: https://huoding.com/2013/11/21/299 https://hpbn.co/building-blocks-of-tcp/#three-way-handshake ...

  6. 阿里二面,面试官居然把 TCP 三次握手问的这么细致

    TCP 的三次握手和四次挥手,可以说是老生常谈的经典问题了,通常也作为各大公司常见的面试考题,具有一定的水平区分度.看似是简单的面试问题,如果你的回答不符合面试官期待的水准,有可能就直接凉凉了. 本文 ...

  7. 计算机网络(四),TCP三次握手

    目录 1.三次握手详情 2.为什么需要三次握手才能建立连接 3.首次握手的隐患---SYN超时的问题 4.建立连接之后,Client出现故障 四.TCP三次握手 1.三次握手详情 (1)一开始,客户端 ...

  8. 面试官:为什么 TCP 三次握手期间,客户端和服务端的初始化序列号要求不一样?

    大家好,我是小林. 为什么 TCP 三次握手期间,客户端和服务端的初始化序列号要求不一样的呢? 接下来,我一步一步给大家讲明白,我觉得应该有不少人会有类似的问题,所以今天在肝一篇! 正文 为什么 TC ...

  9. 脑残式网络编程入门(一):跟着动画来学TCP三次握手和四次挥手

    .引言 网络编程中TCP协议的三次握手和四次挥手的问题,在面试中是最为常见的知识点之一.很多读者都知道“三次”和“四次”,但是如果问深入一点,他们往往都无法作出准确回答. 本篇文章尝试使用动画图片的方 ...

随机推荐

  1. Windows 10 Emoji shortcuts

    Windows 10 Emoji shortcuts Windows 10 Emoji 快捷方式 https://support.microsoft.com/en-us/windows/windows ...

  2. JWT & JSON Web Tokens

    JSON Web Tokens https://jwt.io json web token example https://jwt.io/introduction/ https://medium.co ...

  3. Webpack 4.x 默认支持 ES6 语法

    Webpack 4.x 默认支持 ES6 语法 Q: 为什么 webpack4 默认支持 ES6 语法的压缩? A: terser 里面实现了 ES6 语法的 AST解析. webpack 4 里使用 ...

  4. flutter & dart & vs code & bug

    flutter & dart & vs code & bug Waiting for another flutter command to release the startu ...

  5. how to delete the virtual dom that created in memory using js

    how to delete the virtual dom that created in memory using js const virtualDomConvert = (filename = ...

  6. APP 金刚区图标设计 & UI

    APP 金刚区图标设计 & UI https://www.zcool.com.cn/article/ZNzk4Njg0.html

  7. [转]ROS Q&A | How to read LaserScan data

    http://www.theconstructsim.com/read-laserscan-data/ Step 1. Open a project on ROS Development Studio ...

  8. Flex实现左右布局

    html <div class="business-content-1"> <div class="item"> 111 </di ...

  9. redis环境配置

    1.解压redis压缩包 tar -zxvf redis-5.0.7 2. 基本环境安装 进入解压后的目录 安装yum(cents需要 其它版本Linux可能不适用yum用其它工具)ubuntu:ap ...

  10. css中a元素放长英文字母或者数字自动换行的解决

    在做链接分享页面的时候遇到a元素中的下载链接长英文溢出不换行的问题 在给他以及他父元素设置宽度依然没有解决这个问题 最后解决办法给元素加上word-wrap:break-word 解释:使用break ...