简介三次握手、四次挥手

82 阅读1分钟

三次握手、四次挥手

三次握手的根本目的是为了让客户端和服务端都能够确认对方 发送和确认 的能力是正常的。

三次握手:

  1. 客户端先发一个 SYN 的包,想要和服务端建立连接。假如序号为 x,表示这是第 x 个链接。
  2. 服务端接收到 SYN(x) 的包后,表示同意建立链接,并返回 ACK(x+1) 和 SYN(y)。 ACK(x+1)表示对序号为x 的链接的同意。 SYN(y)表示服务端要和客户端建立链接的请求。
  3. 客户端接收到服务端的链接请求后,再返回 ACK(y+1) 表示同意客户端的链接

第一步,服务端知道客户端的发送能力是正常的。第二步,客户端知道服务端的发送能力和接收能力是正常的。第三部,服务端知道客户端的接收能力是正常的。

四次挥手:

  1. 客户端首先向服务器端发送要断开的请求: FIN(seq = x)
  2. 服务器同意,并向客户端发送: ACK(seq=x+1)
  3. 服务器再次向客户端发送: FIN(seq=y)
  4. 客户端向服务端发送: ACK(seq=y+1)

为什么 四次挥手中的2、3步骤不合并?
因为 2 之后服务端此时没有数据需要发送了,但是还可以接收客户端的数据,此时客户端可能还有数据需要向服务端发送。