一:为了确认建立连接的双方拥有收发能力。
二:为了防止超时。
具体解释如下图所示:

图片描述

A,B两个机器建立连接,A发送建立信号这是第一次握手,B收到后发送确认信号这是第二次握手,A收到确认后再次发送确认信号这是第三次握手。
接下来我们看看三次握手是如何确认收发能力的:
所谓确认收发能力,就是确认自己具有收发能力和确认对方具有收发能力。
当B第一次收到A发来的连接握手时,B方能够确认B拥有接收能力,并且A具有发送能力。
当A收到B的确认握手时,A方能够确认A拥有发送能力(否则B不能回发),B拥有接收能力(否则B不能回发),A拥有接收能力,B拥有发送能力。
此时A确认的有:A接收能力,A发送能力,B接收能力,B发送能力。
此时B确认的有:A的发送能力,B的接收能力。
那么B还需要确认A的接收能力,B的发送能力。
而当B第二次接收到A发来的确认握手时候则B还需确认的能力此时得到确认。

如何防止超时:
如果两次握手就可以建立连接:
那么A的一个超时连接发送给B,B就会认为这个连接是新的建立连接的请求并没有超时,然后建立连接,但是超时连接是对于A来说的,A知道它发送的连接已经超时,只是B不知道,此时B单方面建立连接,不过A并没有,此时不仅是连接超时,而且B还建立了脏连接。
如果是三次握手的话:
A的超时连接发送给B,B发送确认连接,因为A知道已经超时,所以A不会理会B发来的握手,那么B等待一段时间后发现自己的连接超时,连接就没有建立。


Linus脱袜子
183 声望63 粉丝

硕士研究生在读。