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