怎样理解三次握手和四次挥手?

1. 三次握手

三次握手的大致流程图如下所示

(1)当客户端想与服务端建立连接时,客户端会先发送连接请求到服务端,该请求需要服务器接收并确认,这是一次握手;

(2)当服务端收到了客户端发来的请求后,服务端会给客户端一个响应,告诉客户端我接受到了你的连接请求,这是第二次握手;

(3)客户端收到了服务端发来的确认消息之后,会再次向服务端发送确认信息,然后链接就建立成功,这是第三次握手。

2. 为什么是三次握手,两次?四次不行吗?

只进行两次握手是不行的,因为很有可能客户端只发送一次数据,或者发着玩,恶意攻击等。如果是这样,当客户端接收到请求时候,在返回响应时连接就已经建立了,此时连接已经建立,但客户端却又不发送信息,就会造成连接资源的浪费;

四次握手其实也是可以的,但是三次握手就已经能确认服务端与客户端发送与接收信息的能力,不需要再进行第四次握手,多一次握手也会造成资源的浪费。

3. 四次挥手

当我们想要关闭客户端与服务端的连接时,需要进行四次挥手,大致流程如下图所示

(1)客户端想要断开与服务端的链接,先向服务端发送断连请求;

(2)服务端收到了客户端发来的请求,然后会给客户端一个响应,表示已经接收到断连请求,但此时连接还未中断;

(3)服务端在接收到断连请求后,会将连接通道内的数据尽快处理完毕,当处理完成数据之后,服务端会再次向客户端发送请求,表示数据已经处理完成,可以断开连接;

(4)客户端收到了服务端发送的确认消息后,会再次发送确认消息,然后连接就会断开;

4. 为什么不能三次挥手?

有些面试官可能会问到,我们能不能将第二次与第三次客户端的发送合并在一起,这样就能减少一次发送?

其实是不行的,因为第二次服务端向客户端发送确认收到断开连接的时候,它还只是处于一个待关闭的状态,此时服务端可能还有一些资源没有释放,还有一些请求未处理完,实际上第二次挥手与第三次挥手它们中间其实可能会有很高的延迟,30s甚至是1~3分钟,如果我们将第二步与第三步合并发送,那么在此期间客户端需要等但很长时间,客户端一直未收到服务端发送的响应,很有可能超时,认为发送失败,它就会选择再重新发送一次断连请求,甚至发送好几次断连请求,就会造成重复操作,造成资源的浪费。而且第二次发送能保证客户端在发送请求后短时间内就可以收到服务端发送的信息,在保证两端收发信息的能力。

相关推荐
_别来无恙_2 分钟前
TFTP的使用Linux
linux·服务器
gaize12134 分钟前
Moltbot(Clawdbot) 专属轻量服务器
运维·服务器
大橙子额5 分钟前
【解决报错】Cannot assign to read only property ‘exports‘ of object ‘#<Object>‘
前端·javascript·vue.js
Zaralike12 分钟前
Linux 服务器网络不通排查 SOP(标准操作流程)
linux·服务器·网络
_F_y15 分钟前
C++重点知识总结
java·jvm·c++
打工的小王17 分钟前
Spring Boot(三)Spring Boot整合SpringMVC
java·spring boot·后端
毕设源码-赖学姐18 分钟前
【开题答辩全过程】以 高校体育场馆管理系统为例,包含答辩的问题和答案
java·spring boot
我真会写代码19 分钟前
SSM(指南一)---Maven项目管理从入门到精通|高质量实操指南
java·spring·tomcat·maven·ssm
vx_Biye_Design20 分钟前
【关注可免费领取源码】房屋出租系统的设计与实现--毕设附源码40805
java·spring boot·spring·spring cloud·servlet·eclipse·课程设计
DN金猿25 分钟前
接口路径正确,请求接口却提示404
java·tomcat