JAVA面试-计算机网络-TCP三次握手
学习原因
这个是面试的一个常问热点,所以务必要掌握。
通俗示例
小红是人事部门的员工,现在正在招收IT人员,小明看到招聘信息和待遇,感觉很适合自己,所以准备和小红发消息了解具体情况。而简历在本故事中代表最终要发送的数据。
首先,小明发消息给小红,向她表示想要应聘公司的IT部门,想要投简历进一步交流了解。这是第一次信息交流,这个时候简历还没有投递,只是小明让小红知道他想要投简历应聘这个职位。这也是第一次握手的作用,用于客户端询问服务端是否可以进行交互。
而小红看到了小明的信息后,就回消息和他说,可以啊,我们人数还没招满,我欢迎你投简历。这是第二次信息交流,是小红表示她有空,也有兴趣接收小明的简历。这也是第二次握手的作用,用于服务端向客户端表示可以接收信息。
小明看到消息后,又回了小红信息说,谢谢你能给我机会去应聘这个职位,我现在简历准备好了,也做好发送简历的准备了,你现在开放一下邮箱,两分钟后就能接收到我的简历了。这是第三次信息交互,为了小红知道小明已经做好发送简历准备,并让小红开放接收简历的渠道,让简历能顺利接收。这也是第三次握手的作用,让服务端知道客户端已经做好发送信息准备,并让服务端开放信息接收,从而完成三次握手。
小红看到消息后,打开了邮箱接收功能,过了一会,就接收到了小明的简历了。
以上就是三次握手的通俗表达,第一次小明询问是否还招人,第二次是小红回复还招人,第三次是小明为了确保小红能收到信息,进行最终的确认。这就是三次握手的通俗表达。
有的人可能觉得最后还要再提醒,就很墨迹,觉得可以改成下面这个步骤:
1、小明跟小红发消息,我想要应聘贵公司,如果还招人的话,我直接投简历给您。这是第一次。
2、小红回消息说,我们还招人,你投吧。然后就打开邮箱等待接收简历。这是第二次。
3、小明看到信息后,直接发送简历,然后小红就可以接受到简历了。
按照上面的描述,直接就省略了小明第三次最终确认的步骤,减少了信息交互的步骤,提升了信息交互效率,何乐而不为呢?按照效率来说,的确是这样的,毕竟少了一次信息最终确认,但是这样可能导致资源浪费的问题。
我再讲两个例子,来描述只交换信息两次的两大弊端。
弊端一:
1、小明跟小红发消息,我想要应聘贵公司,如果还招人的话,我直接投简历给您。这是第一次。但是好巧不巧,这一次发送时页面一直转圈圈等待,小明以为没有发送出去,刷新页面又再发送一遍。而实际上第一次由于网络卡顿,已经发出去了,但是比第二次更晚到达。
2、这时候,小红接受到小明第二次发送的信息,小红回消息说,我们还招人,你投吧。然后就打开邮箱等待接收简历。这是第二次。小明接收到信息后就直接发送简历过去,完成信息交互。
3、而在小红接收到简历后,突然,小明发送的第一次信息突破重重关卡又到了,这是时候小红就接收到小明第一次的发送信息。然后小红以为这是小明要重新发一个建立给她,所以又开放邮箱,并回复小明说,你可以发消息了。
4、这时候小明看到消息直接蒙逼,简历都发过去了,没法发第二遍了,所以小红和小明都只能在那干瞪眼。半小时后小红气愤的关闭了邮箱。
弊端二:
1、小明跟小红发消息,我想要应聘贵公司,如果还招人的话,我直接投简历给您。这是第一次。
2、小红回消息说,我们还招人,你投吧。然后就打开邮箱等待接收简历。这是第二次。
小明看到消息后,刚准备发消息,但好巧不巧,家里停电了,没网了,小明只能在这苦苦等待。而小红呢,完全不知道小明那边的问题,也是在那里傻等,等着小明发简历。从而导致小红没法去处理其它问题,而小红等了半小时后,直接关了小明的联系。
可以看到,如果没有第三次的最终确认,提前确认发送环境等,可能就导致小红白等半小时。
而又有人可能会说了,你这不扯淡嘛,难道第三次确认之后,就能保证小明能百分百成功发送简历到小红那里了吗?就算有第三次的环境确认,最后发送的时候还是可能因为停电没网而导致发送不成功嘛。
对,的确,即使最终确认后,最终发送也会有断网的风险。甚至就算提升到10000000次握手,都无法确保信息能够准确发送和接收,为什么?因为发送过去的确认信息,只能保证发送当时的那一刻,发送方环境是好的,就好像12点整小明发送信息说我的电脑好的一匹,随时可以发送信息,但是小红接收到信息可能是12点10分,这十分钟时间里面的电脑状态是随时会变化的,可能十二点零一秒,电脑就用不了了,所以,无论多少次握手,都无法确保信息能准确发送。
那三次握手的意义是什么?
因为三次握手是确保双方互相知道对方状态正常的最低成本方案。
这句话怎么理解?
我们再说如果只要两次握手,
第一次发送信息,是小明发送信息给小红,只是确认小红是否还招人,并没有向小红表述他的环境能百分百发送成功简历。所以小红不知道小明能否百分百发送成功简历。
第二次发送信息,是小红发送信息给小明,让小明知道她能接收信息。这个时候小明知道小红做好接收简历准备,但是小红不知道小明做好简历发送准备。
如果是三次握手,
第一次发送信息,是小明发送信息给小红,只是确认小红是否还招人,并没有向小红表述他的环境能百分百发送成功简历。所以小红不知道小明能否百分百发送成功简历。
第二次发送信息,是小红发送信息给小明,让小明知道她能接收信息。这个时候小明知道小红做好接收简历准备,但是小红不知道小明做好简历发送准备。
第三次发送信息,是小明发送信息给小红,让小红知道小明已经做好发送简历的准备。这个时候小明知道小红做好接收简历准备,小红也知道小明做好简历发送准备。
这就是三次握手和两次握手的本质区别。一个是双方知道,一个只是单方面知道。如此三次握手比两次握手更加安全。
而最低成本方案的概念就是说,通过三次接收,双方都知道对方已经OK了,直接发数据就行,没必要再第四次,第五次握手了。
三次握手处理问题的本质
三次握手最终要解决的问题,就是网络信息交互的不稳定问题。提升信息交互成功率,降低由于无法接受到信息而导致的资源浪费问题。
以上就是三次握手的理解,之后还会继续进行修改,如果有什么建议,我会及时采纳和更正。
JAVA面试-计算机网络-TCP三次握手的更多相关文章
- 计算机网络TCP“三次握手”
终于有时间写这篇文章了,最近真的比较忙! TCP协议 之 “三次握手” 引言:我们知道,TCP是面向连接的协议(相较于UDP无连接的协议),会在传送数据之前先在 发送端 & 接收端 之间建立 ...
- 计算机网络--TCP三次握手和四次挥手
TCP(传输控制协议) TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的.可靠的.基于字节流的传输层通信协议.通过三次握手建立连接,通讯完成时要拆除连 ...
- 面试问题之计算机网络:TCP三次握手四次挥手
转载于:https://www.cnblogs.com/Andya/p/7272462.html TCP三次握手: 起初A和B都处于CLOSED关闭状态 B创建TCB,处于LISTEN收听状态,等待A ...
- 面试官问我TCP三次握手和四次挥手,我真的是
候选者:面试官你好,请问面试可以开始了吗 面试官:嗯,开始吧 面试官:今天来聊聊TCP吧,TCP的各个状态还有印象吗? 候选者:还有些许印象的,要不我就来简单说下TCP的三次握手和四次挥手的流程吧 候 ...
- Java网络编程学习A轮_02_抓包分析TCP三次握手过程
参考资料: https://huoding.com/2013/11/21/299 https://hpbn.co/building-blocks-of-tcp/#three-way-handshake ...
- 阿里二面,面试官居然把 TCP 三次握手问的这么细致
TCP 的三次握手和四次挥手,可以说是老生常谈的经典问题了,通常也作为各大公司常见的面试考题,具有一定的水平区分度.看似是简单的面试问题,如果你的回答不符合面试官期待的水准,有可能就直接凉凉了. 本文 ...
- 计算机网络(四),TCP三次握手
目录 1.三次握手详情 2.为什么需要三次握手才能建立连接 3.首次握手的隐患---SYN超时的问题 4.建立连接之后,Client出现故障 四.TCP三次握手 1.三次握手详情 (1)一开始,客户端 ...
- 面试官:为什么 TCP 三次握手期间,客户端和服务端的初始化序列号要求不一样?
大家好,我是小林. 为什么 TCP 三次握手期间,客户端和服务端的初始化序列号要求不一样的呢? 接下来,我一步一步给大家讲明白,我觉得应该有不少人会有类似的问题,所以今天在肝一篇! 正文 为什么 TC ...
- 脑残式网络编程入门(一):跟着动画来学TCP三次握手和四次挥手
.引言 网络编程中TCP协议的三次握手和四次挥手的问题,在面试中是最为常见的知识点之一.很多读者都知道“三次”和“四次”,但是如果问深入一点,他们往往都无法作出准确回答. 本篇文章尝试使用动画图片的方 ...
随机推荐
- IT-ebooks free download website & IT 电子书籍免费下载网站
free ebooks of programming 1. http://www.it-ebooks.info/ http://www.it-ebooks-api.info/ 2. http://ww ...
- Xcode show whitespace
Xcode show whitespace Xcode 11.5 how to config Xcode show whitespace 如何配置 Xcode 显示空白字符 Editor -> ...
- React & redux-saga & effects & Generator function & React Hooks
React & redux-saga & effects & Generator function & React Hooks demos https://github ...
- Flutter: IntrinsicWidth类,将孩子的宽度调整为孩子的最大内在宽度
文档 原文 class HomePage extends StatefulWidget { @override _HomePageState createState() => _HomePage ...
- MySQL修改表中字段的字符集
MySQL修改表中字段的字符集 ALTER TABLE 表名 MODIFY 字段名 要修改的属性: 例:ALTER TABLE `guaduates` MODIFY `studentno` CHAR( ...
- 基本的DOS命令
基本的DOS命令 打开CMD的方法 菜单+系统+命令提示符 WIN+R后输入CMD 桌面或文件夹任意位置按住SHIFT后鼠标右键 常见的DOS命令 #盘符切换 直接输入要切换的盘符名称 如输入&quo ...
- [转]RoboWare Studio的使用和发布器/订阅器的编写与测试
原文地址:https://blog.csdn.net/han_l/article/details/77772352,转载主要方便随时查阅,如有版权要求,请及时联系. 开始ROS学习之前,先按照官网教程 ...
- C++ 多线程使用future传递异常
如果 std::async 调用的函数抛出异常,那么这个异常会被存储在值的位置,同时 future 变为 ready ,如果调用 get() 会重新抛出存储的异常. Note: 标准并没有指定原来的异 ...
- JDK源码阅读-Reference
本文转载自JDK源码阅读-Reference 导语 Java最初只有普通的强引用,只有对象存在引用,则对象就不会被回收,即使内存不足,也是如此,JVM会爆出OOME,也不会去回收存在引用的对象. 如果 ...
- 数据库范式(1NF/2NF/3NF)
本文转载自数据库范式(1NF/2NF/3NF) 概述 范式:英文名称是 Normal Form,它是英国人 E.F.Codd(关系数据库的老祖宗)在上个世纪70年代提出关系数据库模型后总结出来的,范式 ...