第一次:客户端发送请求给服务端,确定服务端可以接收到消息 第二次:服务端收到客户端的请求后,做出回应 第三次:客户端发送请求给服务端,建立TCP连接
最基础的是两次握手,那么为什么客户端还会向服务器发送一次请求呢? 第三次握手是为了防止已经失效的客服端请求又被发送到了服务端,从而发生错误。
假设没有第三次握手会怎样? 客户端发送的第一次请求因为网络延迟等原因迟迟没有发送到服务端,因为服务端没有接受到客户端的请求,就不会给客户端回应,没有收到回应的客户端就再次给服务端发送了一个请求,等待网络通畅后,失效的报文和正确的报文一起被发送到了服务端,如果只握手两次,到这里就应该已经建立TCP连接,显然这是不对的,失效的报文被发送到服务端,服务端在等待客户端发送数据,而客户端已经发送了另外的报文,自然就不会给服务端发送数据
这个过程就好比在网络里聊天 你给你的好友发送了一个“在吗?”,你的好友回复“在的”,你回复“我也在”,好了确定你俩都在线可以开始聊天了,这就是三次握手。 如果是你发送“在吗?”因为网络原因消息没被发送出去,你以为你的好友不在线随之离线,等你的设备在网络环境好的情况下吧你刚刚的消息又发送出去了,你的好友收到消息,回复了你“在的”以后,会等待与你的聊天,而你又刚好离线了,就会造成你好友不好的体验!这就是两次握手会造成的问题。