可能重复:
为什么是三方握手而不是更多?
例如:如果客户想要与服务器通话,它只是告诉服务器它想build立连接,然后服务器确认。 人们说第三步就是为了让服务器知道它可以成功地向客户端发送数据。 不过,我认为服务器可以实现像超时一样的东西。 如果客户端需要太长的时间来响应,服务器可以继续:1.重新发送该段或者2.终止连接
那么,我们真的需要第三步吗? 在我看来,这么多的开销。
第一个数据包显然需要客户端到服务器来告诉服务器创build一个连接。
第二个数据包是服务器到客户端需要告诉客户端服务器已经接受连接。
第三个数据包需要客户端到服务器来告诉服务器客户端收到第二个数据包。 否则,服务器将无法知道这一点,它可能只是想知道为什么客户端没有发送任何数据。
不需要第四个数据包。 如果第三个数据包通过,双方都知道连接已经打开,并且如果他们愿意的话,完全可以发送数据。 如果第三个数据包没有通过,第二个数据包将被重新发送,提示重复发送第三个数据包。
当客户端从服务器获得SYN ACK数据包时,它认为连接完全打开(并将ACK信息粘贴在其第一个数据包的头部)。
所以,在客户端首先会话的应用程序中,第三步在握手过程中增加了零延迟。 在服务器首先谈论的应用程序中,最后的ACK步骤确实是必须的 – 服务器在知道客户端期望它们之前不能开始发送数据包。