首先呢?这样才可以确保双方都具备接收和发送的能力,如果是两次的话,那是不够的。其次,这样可以同步双方的初始序列号,首先客户端发一个序列号给服务端,服务端收到确认,再发自己的序列号给客户端,如果只有两次的话,那服务端不确定自己的序列号是否被客户端接收,可能发生丢包啊什么的,得三次握手才行。还有一个很重要的原因就是防止旧的重复连接初始化造成混乱,比如在网络拥堵的情况下,客户端连续发送多次SYN建立连接的报文,那么可能一个旧的SYN报文比最新的SYN报文早到达了服务端,那么此时服务端就会回一个ACK报文给客户端,客户端收到后,才可以根据自身的上下文,判断这是一个历史连接,那么客户端就会发生RST报文给服务端,表示中止这一次连接,如果不是历史连接,第三次发生的报文是ACK报文。但是如果是两次连接的话,就不能判断是否是历史连接。还有一个原因,如果是采用两次握手的话,比如有一种情况,服务端回复的ACK报文阻塞了,客户端一直没收到回复,那就继续发SYN报文,服务器又不清楚自己的ACK报文是否已被对方接收,那就只能来一个,开一个连接,那这样的话,就很浪费资源了。 不采用四次握手的原因就比较简单了,三次握手就已经可以保证可靠连接的建立了,就不需要再增加第四次了。