TCP通信是点到点的连接,能够保证数据的准确性。三次握手和四次挥手只有在TCP通信中才有,UDP没有。
三次握手:
在服务器接收客户端的挥手包之前,服务器处于监听状态。
第一次握手:客户端向服务器第一次发送握手包,服务器接收到握手包。
第二次握手:服务器接收到握手包以后,给客户端发送一个包,包含两个数据。挥手包的数据
和回应包的数据。
第三次握手:客户端接收到数据包之后也要向服务器发送一个回应包。
至于说为什么需要至少三次握手,是因为客户端在第一次发送数据包,服务器收到数据包后,服务器能确定客户端的发送功能和自己的接收功能是正常的。
第二次数据包由服务器发送,在客户端收到数据包后,客户端能确定自己的接收功能、发送功能和服务器的发送功能是正常的。
第三次数据包由客户端发送,服务器接收到数据包后,服务器能确定客服端的接收功能和自己的发送功能是正常的。
三次握手保证了客户端和服务器双方都能确认彼此的收发功能正常。
四次挥手:
四次挥手发生在客服端与服务器已经建立连接的情况下。
第一次挥手:主动方向被动方发送挥手请求。
第二次挥手:在被动方接收到主动方发送的挥手请求包之后,同时要向主动方回应一个数据包。
第三次挥手:被动方想主动方发送挥手请求。
第四次挥手:主动方在接收到被动方的挥手请求包后,向被动方回应一个数据包。
为什么握手三次,而挥手四次?
此时挥手要挥手四次而不是三次是因为,被动方可能还有其他的消息没有处理完,所以先向主动方发送一个应答包,待自己的数据处理完成以后才会向主动方发送挥手请求包。
主动方的TIME_WAIT状态
主动方向被动方发送的应答包,由于网络的不可靠信,这个应答包可能在发送的过程当中丢失,这个时候被动方没有收到应答包,被动方会向主动方重新发送挥手请求包,如果说主动方已经断开连接,则被动方会认为连接出错。所以主动方在发送完应答包以后还会处于一个两倍的最大报文段的等待时间。