在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。
一次握手:
传输层中的TCP协议是面向连接的,在客户向服务器发送连接请求(SYN)后,但是服务器只能一次握手,所以无法给客户回复。而客户没有收到服务器的回复,就无法确定是否让服务器收到了连接请求,因此就无法判断是否连接成功。
二次握手:
因为在一次握手中,客户接收不到服务器的回应,所以二次握手,接收到回复就代表着连接成功,而在测试中并非如此。如果客户想要建立连接,就要给服务器发送一个连接请求(SYN),但是可能因为一些网络问题,导致客户在很长一段时间内未能收到回复(ACK)。与此同时,客服又给服务器发送了一个连接请求(SYN),服务器接受得很顺利,因此客户很快收到了回复(ACK)。但是之前客户发送的连接请求(SYN)终于到了服务器,服务器也为这个请求申请资源回复客户,而客户已经放弃了这个连接请求(SYN),所以不会断开连接,这就造成了资源浪费。
三次握手:
因为在二次握手中,服务器无法判断之前的连接请求(SYN)是否有效,不会中断连接请求(SYN),并再次发送回复(ACK),但是对于客户来说这个回复(ACK)已经是失效了的,而三次握手恰好解决了这个问题。第三次握手是客户给服务器进行回复第二次握手,这也就是来说服务器等待第三次握手的到来,如果第三次握手迟迟不来,那么服务器就可以识别这个连接请求(SYN)是无效的,可以安心地将它的资源释放了。还有一种情况是当第三次握手因为一些网络问题失败了,这时候客户却以为自己已经连接好了,会去给服务器发送数据,而服务器因为没有收到第三次握手,就会用RST对客户进行响应,所以收到RST的的客户很快就知道第三次握手没有成功,进行重新连接。