三次握手,为什么不是两次,也不是四次
一、为什么是三次握手
网络连接为什么是三次握手而不是两次,或者是四次?TCP三次握手是为了建立一个网络连接,进而进行数据传输。TCP通过三次握手,建立了连接,告诉了客户端和服务器自己和对方的发送数据和传输数据的能力。这个过程可以类比于两个小朋友隔着一堵墙玩丢沙包游戏。
有两个小朋友,一个叫小客(客户端), 一个叫小服(服务器),他们从来没有玩过丢沙包游戏,突然间他们心血来潮,想玩丢沙包,但他们隔着一堵墙,他们该怎么确定两个人能不能玩成这个游戏呢?
他们需要确定自己会不会扔沙包和接沙包,还需要确定对方会不会扔沙包和接沙包。等两边都确定了自己和对方的都具有接收能力后,他们就可以快乐的在一起玩丢沙包游戏了。
那么怎么样确定自己和对方有没有接收能力呢,他们需要经过如下步骤:
1、小客把沙包扔到墙的另一边给小服,小服接到沙包后就立即知道了一件事情,小客会扔沙包,而自己会接沙包
2、接着小服把沙包再扔给小客,小客接到沙包
这时候小客就知道了小服会接沙包,也会扔沙包,而自己既会扔沙包,也会接沙包。小客已经充分知道了对方和自己的实力,他们都会扔沙包和接沙包,可以玩成丢沙包的游戏。
但此时小服那里还有疑问,我只接到了小客的沙包,我扔出去的沙包小客会不会接到呢,对方有没有接沙包的实力呢,万一对方眼神有问题呢,他只会扔,不会接咋办,那我和他玩啥呀。
3、正在小服犯嘀咕的时候,小客把沙发丢回来了
小服高兴了,对方能把沙包丢回来,证明对方会接沙包,眼神没问题, 我们俩能玩的起来。这样小服这边就完全知道了小客和自己接收沙包的能力,于是俩人就可以嗨皮的玩了起来。
网络的三次握手就是这个原理,整个三次握手的过程就是服务器和客户端互相确认对方和自己是否有接收数据的能力。
二、两次握手
如果不是三次握手而是两次握手会有啥结果呢?
还是拿丢沙包举例,试想如果不是三次丢沙包确定双方能力,而是两次丢沙包确定双方能力,结果会怎么样呢?
假如小客第一次扔沙包,抄得太高了,扔出一亿米,小服一时半会都接不到沙包
小客迟迟得不到小服的回应,于是又扔了一个新沙包
这个新沙包被小服顺利接到,于是,两个又嗨皮的继续第二次确认。确认完毕后两个人开始玩游戏,玩完这个游戏后,小客回家吃饭了。这时小客扔的第一个沙包终于落下来了,到了小服手里,小服接到了沙包,以为又有小朋友要跟他玩丢沙包的游戏。
于是,小客把沙包扔到了墙的另一边,由于他们执行的是扔两次确定可以玩游戏的规则,小客扔完沙包,就认为对方有接收沙包的能力,于是便等着两人玩游戏,可是墙的另一边已经没有人了,小服会无限的等下去,造成了小服的时间和资源的浪费。
这就是两次握手所带来的问题,服务器不知道对方已经没有“扔沙包”的能力了,会一直等待下去。
三、四次握手
如果是四次握手呢?无疑是做了无用功,因为三次握手,已经让双方都确认了接收数据的能力,再多次握手,也不过是确定了已经确定的事情。
所以网络连接用的是三次握手,不是两次,也不是四次
三次握手,为什么不是两次,也不是四次相关推荐
- TCP 为什么是三次握手,而不是两次或四次?
三次握手 两次握手(情况1) 两次握手(情况2) OK,下面正经地来回答下这个问题,要搞清楚这个问题,首先得了解TCP究竟是如何保证可靠传输的. PS:TCP协议中,主动发起请求的一端称为『客户端』, ...
- TCP三次握手过程,如果两次握手会怎么样?
让我们来看一个故事,读完这个故事,我相信你和面试官的对话会非常愉快. 网络帝国的崛起 随着时间的流逝,计算机帝国的子民耐不住寂寞,他们好想去外面的世界看看,去其他的计算机家中串串门,他们经常抱怨,为什 ...
- TCP为什么连接建立需要三次握手,而不是两次握手?
标准答案:防止失效的连接请求报文段被服务端接收,从而产生错误. 什么意思呢? 首先需要解释失效的连接请求是什么:若客户端向服务端发送的连接请求丢失,客户端等待应答超时后就会再次发送连接请求,此时,上一 ...
- TCP连接的三次握手四次挥手——类比异地恋情侣开始交往和分手(通俗易懂)
首先,要详细解释的,先看下面两篇文章.这篇文章只是一个类比,可以辅助理解和记忆. 计算机网络--TCP三次握手详解为什么两次不行 计算机网络--TCP四次挥手过程详解 三次握手(开始交往) 男:(写一 ...
- pythonsocket中tcp通信接收不到数据_TCP 为什么三次握手而不是两次握手(正解版)...
先说结论 为了实现可靠数据传输, TCP 协议的通信双方, 都必须维护一个序列号, 以标识发送出去的数据包中, 哪些是已经被对方收到的. 三次握手的过程即是通信双方相互告知序列号起始值, 并确认对方已 ...
- 两将军问题和TCP三次握手
两将军问题,又被称为两将军悖论.两军问题, 是一个经典的计算机思想实验. 首先, 为避免混淆,我们需要认识到两将军问题虽然与拜占庭将军问题相关,但两者不是一个东西.拜占庭将军问题是一个更通用的两将军问 ...
- TCP 为什么三次握手而不是两次握手(正解版)
参考文章 Why do we need a 3-way handshake? Why not just 2-way 大部分网络博客的错误解读 首先需要声明的是, 百度搜索到的大部分网络博客关于这个问题 ...
- TCP网络那点破事!三次握手、四次挥手、TIME-WAIT、HTTP 2.0 ....
今天主要给各位分享TCP网络的一些常见知识点,日常工作或面试会经常遇到.考虑内容篇幅不小,建议先收藏,慢慢咀嚼. 如果有帮助,也请转给身边的朋友们,"独乐乐不如众乐乐" 首先,来个 ...
- 硬不硬你说了算!近 40 张图解被问千百遍的 TCP 三次握手和四次挥手面试题
来自:小林coding 每日一句英语学习,每天进步一点点: 前言 不管面试 Java .C/C++.Python 等开发岗位, TCP 的知识点可以说是的必问的了. 任 TCP 虐我千百遍,我仍待 T ...
- 三次握手+四次挥手,一文搞定所有!历史最佳剖析!
" TCP 三次握手和四次挥手的问题在面试中是最为常见的考点之一.很多读者都知道三次和四次,但是如果问深入一点,他们往往都无法作出准确回答.本文就来详解 TCP 连接的三次握手与四次挥手. ...
最新文章
- oracle游标的基础应用,Oracle 基础的游标的使用
- maven 学习笔记2
- sceneManager.loadscene加载场景时不会主动去加载场景的依赖包,要手动加载或添加场景到build setting列表中...
- [转] vim 正则表达式 很强大
- winxp 安装apache php,WinXP-Apache-PHP5-MySQL-phpMyAdmin环境安装
- 雾计算精华问答 | 雾计算是如何构成的?
- 动态链接库实现COM(COM技术内幕笔记之二)
- lock是悲观锁还是乐观锁_图文并茂的带你彻底理解悲观锁与乐观锁
- 转:理解TCP序列号(Sequence Number)和确认号(Acknowledgment Number)
- mysql连接字符串 .net_.net MYSQL连接字符串参数详细解析
- 数学思维游戏两则:Gabriel喇叭、世界末日论
- android 连接魅族调试,魅族 PRO6 开启USB调试模式
- Excel宏编程,给出2列进行去重合并
- Python 笔记_不积跬步无以至千里_一蓑烟雨任平生
- 编译原理(龙书第二版)--怎么求FOLLOW集
- 分门别类刷leetcode——链表(C++实现)
- Fireshot——很棒的的网页截图扩展
- 做smart报表的一般步骤
- win10 安装kali子系统
- Chrome下如何复制禁止复制网页上的文字