三次握手:
客户端和服务器之间的通话要创建TCP来当作数据请求和返回的一种通道。三次握手就是客户端和服务器通过TCP进行的正常数据交互之前的三次报文交换,只有这三次报文交换成功了,才能正确开始客户端与服务器的数据交互。
第一次握手,客户端向服务器发送一次请求报文:“你好,很高兴认识你,可以聊聊吗?”
第二次握手,服务器返回客户端一次响应报文:“你好,很高兴认识你,那我们聊聊吧!”
第三次握手,客户端向服务器发送一次请求报文:“太好了,那我们开始正式聊天吧!”
四次挥手:
所谓四次挥手就是TCP连接的释放和解除。连接的释放必须是一方主动释放,另一方被动释放。
第一次挥手,客户端向服务器发送一次请求释放报文,并且客户端处于半关闭阶段,停止向服务器传送数据,但可以接受服务器返回的数据。
第二次挥手,服务器收到报文后,进入半关闭阶段,并且返回给客户端报文,告诉客户端已经收到请求。
(前"两次挥手"既让服务器端知道了客户端想要释放连接,也让客户端知道了服务器端了解了自己想要释放连接的请求。于是,可以确认关闭客户端到服务器端方向上的连接了)
第三次挥手,服务器发送完第二个报文后,进行连接的释放和解除准备,准备好以后,会继续给客户端发送报文,告诉客户端,这边已经准备好了。
第四次挥手,客户端接收到服务器“准备好释放解除”的报文后,自己也进入释放解除的准备阶段,并向服务启发送这边已经准备好的报文。发送过后,等待2MSL后(确保服务器已经解除释放完成),客户端正式关闭TCP连接。
为什么握手三次,挥手四次:
因为在释放解除的时候,服务器属于被动方,突然接收到释放解除请求,需要缓冲,需要给服务器一些时间去处理数据,保证连接的正常释放解除。