TCP 握手次数

TCP 协议是网络协议中重要的一环,也是理解 HTTP 协议的基础。

TCP 协议建立链接需要三次握手,释放链接需要四次握手。

为什么不是更少或者是更多?

本文将会给你一个答案。

连接阶段

TCP 连接需要三次握手,如下所示:

Client ------SYN-----> Server
Client <---ACK/SYN---- Server
Client ------ACK-----> Server

为什么不是两次握手呢?

Client ------SYN-----> Server
Client <-----ACK------ Server

这是因为 TCP 协议是一个双向通信协议。

这意味着,采用 TCP 协议的通信双方都有发送消息的权利。

所以,通信双发都必须认证对方能够收到自己的连接请求。如下所示:

Client ------SYN-----> Server
Client <-----ACK------ Server
Client <-----SYN------ Server
Client ------ACK-----> Server

幸运的是, ACK 和 SYN 可以在一个请求中发送,所以最后只需三次握手。

Client ------SYN-----> Server
Client <---ACK/SYN---- Server
Client ------ACK-----> Server

断开阶段

断开连接需要四次握手

Client ------FIN-----> Server
Client <-----ACK------ Server
Client <-----FIN------ Server
Client ------ACK-----> Server

为何不像建立链接一样三次握手呢?

Client ------FIN-----> Server
Client <----ACK/FIN--- Server
Client ------ACK-----> Server

这是因为开头提到的 TCP 是一个双向通信的协议,

因此,Server 端此时可能仍然在发送数据,

只有当 Server 端结束数据发送之后,才会关闭连接。

所以 ACK 和 FIN 需要分开发送。

参考链接

Why do we need a 3-way handshake? Why not just 2-way?

Explain Four-way Handshaking method to terminate a connection in TCP?

发表评论

电子邮件地址不会被公开。 必填项已用*标注