Http协议为什么是三次握手

一、为什么是三次握手

网络连接为什么是三次握手而不是两次,或者是四次?TCP三次握手是为了建立一个网络连接,进而进行数据传输。TCP通过三次握手,建立了连接,告诉了客户端和服务器自己和对方的发送数据和传输数据的能力。

三次握手。三次握手的主要目的是确保双方(客户端和服务器)的发送和接收能力都没有问题。具体过程如下:

  1. 第一次握手:客户端发送一个SYN报文给服务器,服务器收到后知道客户端的发送能力没问题,但不知道自己的接收能力。
  2. 第二次握手:服务器发送一个SYN+ACK报文给客户端,客户端收到后知道自己的接收能力和服务器的发送能力都没问题。
  3. 第三次握手:客户端发送一个ACK报文给服务器,服务器收到后确认自己的发送能力没问题。
    这样,双方都确认了自己的发送和接收能力,可以开始正常通信。

这个过程可以类比于两个小朋友隔着一堵墙玩丢沙包游戏。
在这里插入图片描述

有两个小朋友,一个叫小客(客户端), 一个叫小服(服务器),他们从来没有玩过丢沙包游戏,突然间他们心血来潮,想玩丢沙包,但他们隔着一堵墙,他们该怎么确定两个人能不能玩成这个游戏呢?

他们需要确定自己会不会扔沙包和接沙包,还需要确定对方会不会扔沙包和接沙包。等两边都确定了自己和对方的都具有接收能力后,他们就可以快乐的在一起玩丢沙包游戏了。

那么怎么样确定自己和对方有没有接收能力呢,他们需要经过如下步骤:

1、小客把沙包扔到墙的另一边给小服,小服接到沙包后就立即知道了一件事情,小客会扔沙包,而自己会接沙包

在这里插入图片描述

2、接着小服把沙包再扔给小客,小客接到沙包
在这里插入图片描述

这时候小客就知道了小服会接沙包,也会扔沙包,而自己既会扔沙包,也会接沙包。小客已经充分知道了对方和自己的实力,他们都会扔沙包和接沙包,可以玩成丢沙包的游戏。

但此时小服那里还有疑问,我只接到了小客的沙包,我扔出去的沙包小客会不会接到呢,对方有没有接沙包的实力呢,万一对方眼神有问题呢,他只会扔,不会接咋办,那我和他玩啥呀。

3、正在小服犯嘀咕的时候,小客把沙发丢回来了

在这里插入图片描述

小服高兴了,对方能把沙包丢回来,证明对方会接沙包,眼神没问题, 我们俩能玩的起来。这样小服这边就完全知道了小客和自己接收沙包的能力,于是俩人就可以嗨皮的玩了起来。

网络的三次握手就是这个原理,整个三次握手的过程就是服务器和客户端互相确认对方和自己是否有接收数据的能力。

二、两次握手

如果不是三次握手而是两次握手会有啥结果呢?

还是拿丢沙包举例,试想如果不是三次丢沙包确定双方能力,而是两次丢沙包确定双方能力,结果会怎么样呢?

假如小客第一次扔沙包,抄得太高了,扔出一亿米,小服一时半会都接不到沙包
在这里插入图片描述

小客迟迟得不到小服的回应,于是又扔了一个新沙包

在这里插入图片描述

这个新沙包被小服顺利接到,于是,两个又嗨皮的继续第二次确认。确认完毕后两个人开始玩游戏,玩完这个游戏后,小客回家吃饭了。这时小客扔的第一个沙包终于落下来了,到了小服手里,小服接到了沙包,以为又有小朋友要跟他玩丢沙包的游戏。

在这里插入图片描述

于是,小客把沙包扔到了墙的另一边,由于他们执行的是扔两次确定可以玩游戏的规则,小客扔完沙包,就认为对方有接收沙包的能力,于是便等着两人玩游戏,可是墙的另一边已经没有人了,小服会无限的等下去,造成了小服的时间和资源的浪费。

在这里插入图片描述

这就是两次握手所带来的问题,服务器不知道对方已经没有“扔沙包”的能力了,会一直等待下去。

三、四次握手

如果是四次握手呢?无疑是做了无用功,因为三次握手,已经让双方都确认了接收数据的能力,再多次握手,也不过是确定了已经确定的事情。

在这里插入图片描述
所以网络连接用的是三次握手,不是两次,也不是四次

  • 14
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值