一、三次握手的原理
通俗解释:
1> 客户端发送一条请求到服务端(通过TCP报文,其中标记位是SYN),问:我可以跟你建立连接吗? --第一次握手
2> 服务端收到了客户端发来的请求连接的报文,回复给客户端一个确认信息同意建立连接(标记为ACK),同时发送连接请求到客户端,问:我服务端可以和你客户端建立连接吗?注意:连接是双向的。 -- 第二次握手
3> 客户端收到了服务端的请求连接报文,然后回复给服务端一个确认信息同意建立连接。 -- 第三次握手
上面的三次握手其实就是为了建立如下图所示的从客户端到服务端,再从服务端到客户端的双向通路。
二、四次挥手的原理
啥玩意就三次握手,四次挥手的?啥意思呀?
其实很简单,所谓的三次握手就是建立客户端与服务端的连接,四次挥手就是断开客户端与服务端的连接。
来吧,直接上图:
通俗解释:
1> 客户端发送一条断开请求到服务端(通过TCP报文,其中标记位是FIN),说:我已经把数据传输完毕了,请求断开连接 -- 第一次挥手
2> 服务端收到了客户端发来的请求断开连接的报文,回复给客户端一个确认信息同意断开连接(标记为ACK) -- 第二次挥手
3> 服务端向客户端发送请求断开连接的报文,说:我也已经数据传输完毕了,请求断开连接 -- 第三次挥手
4> 客户端收到服务端发来的请求断开连接的报文,回复给服务端一个确认信息同意断开连接 -- 第四次挥手
哈哈,到这里我猜你一定会很困惑,为什么建立连接只需要三次,而断开连接需要四次呢?
其实很简单,答案如下:
建立连接的时候,不涉及数据传输问题,所以在第二次握手的时候,服务端在回复确认信息的同时就可以发送想跟客户端建立连接的请求。
断开连接的时候,因为可能会涉及到数据传输,客户端到服务端的传输结束了,难道就意味着服务端到客户端的传输结束了吗?想一想FTP上传下载功能,上传完能代表下载完了吗???
上面就是关于三次握手和四次挥手最正确的解释,你去问很多干了多年的老开发,老多人告诉你的答案都是错误的,甚至他们根本就不知道这个原理。当然了,不知道原理不耽误写代码,毕竟大部分人都是代码的搬运工,像我这种天赋异禀的万古奇才还是极少的,哈哈,开个玩笑。
标签:断开连接,--,正本清源,TCP,连接,四次,握手,服务端,客户端 From: https://www.cnblogs.com/kkbest/p/18342188