两次握手存在的2个问题:
(1)半连接。客户端发送连接请求,服务器均同意连接,这样可能造成客户端发送多次连接请求(还可能引起超时重传),而服务器维护许多虚假的半连接(客户端并不知道这些连接的状态),浪费资源。
(2)旧数据当新数据接收。服务器可能收到多个、重复的数据,会将已收到的旧数据当作新数据来接收,造成数据冗余、资源浪费。
- 本质上,两次握手无法保证通信双方知道另一方想要接收数据的序号(seq),也就无法保证数据的可靠性传输,即不重复、不乱序、不出错。
- 所以至少需要三次握手才能保证通信双方都具备收发(接收、发送)能力。具体地,通过捎带技术,在第三次握手时,发送方会将数据和对服务器的ack一起发送给接收方,因而,无需四次握手(额外的握手次数不必要、会浪费资源)。
注:以上内容自中科大郑老师的计算机网络课程,B站有他本人上传的视频;如有缺漏、错误请指出与包含。