防止已失效的连接请求又传送到服务器端,因而产生错误。
如果不是出于这种担心,两次握手完全可以建立连接。正常情况下是,client发出连接请求,告知server自己的序列号。server接收到消息后,向client发送自己的序列号。这样连接就已经可以建立了。
再说异常情况,第一次握手失败,服务端收不到信号,自然没有第二次握手。这个时候客户端会重新发送第一次握手的信息,直到超时或者成功收到第二次握手信息。如果第二次握手失败,同样客户端会重新发送信号,直到建立连接或者成功为止。这样建立连接是不存在问题的,不是说两次握手建立不了连接。问题的根源就是教科书上说的,如果仅仅只有两次握手,此时client已经连接超时失败,放弃连接了,这个时候超时的信号又到了服务端,服务第二次握手,认为建立了连接,服务器资源就被浪费了。
如果是三次握手,就不存在这个问题了。因为客户端已经放弃了,服务端是不会收到第三次握手的,不会误认为连接建立成功了。