QSocket-为什么TCP连接建立需要三步握手过程?

TCP协议在初始化连接时,分为三步:

(1)、发起端发送 SYN 请求到接收端。

(2)、接收端发送 SYN+ACK 数据包到发送端。

(3)、发送端发送 ACK 请求到接收端。

有人对为什么需要这三步存颖,觉得两步就够了,实际上是没有完全理解他们分别做了什么。

(1)、SYN 请求就不用说了,发起端通知接收端我要和你建立联系。

(2)、接收端收到 SYN 请求,说明发起端到接收端的路是通的,发起端发送给接收端的数据,接收端能够正常接收到。但这并不意味着,接收端回去的路也是畅通的,这有可能是一条我们生活中的单行线,所以接收端需要向发起端发送一个数据包告诉发起端,我收到你的请求了。那么在现在这个状态下,我们可以知道,接收端知道发送端到自己的路是通的,但发起端并不知道,所以才回送了 SYN+ACK 数据包,以便接收端也知道。

(3)、发起端收到接收端的 SYN+ACK 数据包,那它就知道自己与接收端之间的路是双向通道,可以收发数据。但请等待,这事接收端并不知道,它目前只知道发起端到接收端的路是通的,所以,发送端需要再次回送一个 ACK 数据包给接收端,以便接收端也知道。然后才能哥俩好,六六大顺,一路发财,连接建立成功。

所以,你看三步一步不好,环环相扣,设计还是很严密的。只不过第三步回送ACK数据时,TCP协议已经可以携带有效数据载荷了。

分享到: