目录
1. 三次握手
2. 为什么是三次握手,两次?四次不行吗?
3. 四次挥手
4. 为什么不能三次挥手?
1. 三次握手
三次握手的大致流程图如下所示
(1)当客户端想与服务端建立连接时,客户端会先发送连接请求到服务端,该请求需要服务器接收并确认,这是一次握手;
(2)当服务端收到了客户端发来的请求后,服务端会给客户端一个响应,告诉客户端我接受到了你的连接请求,这是第二次握手;
(3)客户端收到了服务端发来的确认消息之后,会再次向服务端发送确认信息,然后链接就建立成功,这是第三次握手。
2. 为什么是三次握手,两次?四次不行吗?
只进行两次握手是不行的,因为很有可能客户端只发送一次数据,或者发着玩,恶意攻击等。如果是这样,当客户端接收到请求时候,在返回响应时连接就已经建立了,此时连接已经建立,但客户端却又不发送信息,就会造成连接资源的浪费;
四次握手其实也是可以的,但是三次握手就已经能确认服务端与客户端发送与接收信息的能力,不需要再进行第四次握手,多一次握手也会造成资源的浪费。
3. 四次挥手
当我们想要关闭客户端与服务端的连接时,需要进行四次挥手,大致流程如下图所示
(1)客户端想要断开与服务端的链接,先向服务端发送断连请求;
(2)服务端收到了客户端发来的请求,然后会给客户端一个响应,表示已经接收到断连请求,但此时连接还未中断;
(3)服务端在接收到断连请求后,会将连接通道内的数据尽快处理完毕,当处理完成数据之后,服务端会再次向客户端发送请求,表示数据已经处理完成,可以断开连接;
(4)客户端收到了服务端发送的确认消息后,会再次发送确认消息,然后连接就会断开;
4. 为什么不能三次挥手?
有些面试官可能会问到,我们能不能将第二次与第三次客户端的发送合并在一起,这样就能减少一次发送?文章来源:https://www.toymoban.com/news/detail-663808.html
其实是不行的,因为第二次服务端向客户端发送确认收到断开连接的时候,它还只是处于一个待关闭的状态,此时服务端可能还有一些资源没有释放,还有一些请求未处理完,实际上第二次挥手与第三次挥手它们中间其实可能会有很高的延迟,30s甚至是1~3分钟,如果我们将第二步与第三步合并发送,那么在此期间客户端需要等但很长时间,客户端一直未收到服务端发送的响应,很有可能超时,认为发送失败,它就会选择再重新发送一次断连请求,甚至发送好几次断连请求,就会造成重复操作,造成资源的浪费。而且第二次发送能保证客户端在发送请求后短时间内就可以收到服务端发送的信息,在保证两端收发信息的能力。文章来源地址https://www.toymoban.com/news/detail-663808.html
到了这里,关于怎样理解三次握手和四次挥手?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!