TCP三次握手

7/10/2021 TCP网络协议

当 A 和 B 要进行 TCP 通信,传输数据前,必须要进行三次信息交换来建立连接,就是人人熟知的三次握手。

# **三次握手的主要目标:**

握手最主要的目标就是让 A,B 双方知道自己的发送信息是正常,知道对方接收信息是正常的。下面就是三次握手的有限状态机和建立需要传输的信息。

TCP三次握手

第一次握手,A 向 B 发送 SYN,同时消耗一个序列号, 这时 B 知道 A 的发送能力是正常的。

第二次握手,B 向 A 发送 SYN,回复 ACK,同时也消耗一个序列号,发送 SYN 的时候会消耗序列号的,这时 A 知道自己的发送能力是正常的,B 的接收能力也是正常的。

第三次握手,A 向 B 回复 ACK,这时 A 的接收能力是正常的,B 知道自己的发送能力也是正常的。

所以三次握手都为了证明, A 知道 B 的发送接收能力正常,自己的发送接收能力正常, B 也知道 A 的发送接收能力正常,自己的发送接收能力正常。

A 和 B 连接成功,开始交换数据。

# 如果 TCP 第三次握手失败,服务器会怎么样?

这种情况很有可能是遭受 SYN Flood 攻击,这时服务器会返回 RST,然后关闭连接。

SYN Flood 是攻击者伪装大量的 IP 地址去请求服务器进行 TCP 连接,服务器会把两次握手的连接放入半连接队列里,使得队列塞满,导致服务器无法响应。

# **为什么不能只进行两次握手?**

两次握手无法满足 TCP 建立连接的要求,因为在这种情况下无法确认客户端(A)的接收能力。如果服务器(B)在第二次握手后立即发送数据,而客户端已经断开连接,那么数据将被浪费。三次握手允许服务器确认客户端的接收能力,从而确保数据不会被浪费。

# **关于四次握手**

虽然可以进行四次握手,但通常情况下三次握手已经足够了。四次握手可能用于特殊情况,但它不是 TCP 连接建立的标准过程。三次握手确保了双方的发送和接收能力正常,这通常足以建立可靠的 TCP 连接。

总之,三次握手是 TCP 建立连接的关键步骤,它确保了通信的可靠性和双方的正常运行。了解这个过程有助于我们更好地理解 TCP 协议的工作原理。