TCP(传输控制协议)建立连接的过程

发布于:2025-05-15 ⋅ 阅读:(22) ⋅ 点赞:(0)

TCP(传输控制协议)建立连接的过程称为 三次握手(Three-Way Handshake)。这是为了确保通信双方能够可靠地建立连接,并同步初始序列号。以下是详细步骤:


三次握手过程(通俗比喻:打电话确认双方都能听到)

1. 第一次握手:客户端 → 服务器(SYN)
  • 动作:客户端发送一个 SYN 报文(SYN=1,随机生成一个初始序列号 seq=x)。

  • 目的:告诉服务器“我想和你建立连接,我的初始序列号是 x”。

  • 状态变化

    • 客户端进入 SYN_SENT(同步已发送)状态。

    • 服务器处于监听状态(LISTEN)。


2. 第二次握手:服务器 → 客户端(SYN-ACK)
  • 动作:服务器收到 SYN 后,回复一个 SYN-ACK 报文(SYN=1,ACK=1,确认号 ack=x+1,并生成自己的初始序列号 seq=y)。

  • 目的:告诉客户端“我收到你的请求了,同意建立连接,我的初始序列号是 y”。

  • 状态变化

    • 服务器进入 SYN_RCVD(同步已接收)状态。


3. 第三次握手:客户端 → 服务器(ACK)
  • 动作:客户端收到 SYN-ACK 后,发送一个 ACK 报文(ACK=1,确认号 ack=y+1,序列号 seq=x+1)。

  • 目的:告诉服务器“我确认你同意连接了,现在可以开始通信了”。

  • 状态变化

    • 客户端和服务器均进入 ESTABLISHED(已建立连接)状态。


为什么需要三次握手?

  1. 防止历史连接干扰
    如果客户端发送了多个旧的 SYN 请求(例如网络延迟导致),三次握手能确保服务器只响应最新的请求。

  2. 同步初始序列号
    双方通过交换序列号,确保后续数据传输的有序性和可靠性。

  3. 确认双方的通信能力
    三次握手验证了客户端和服务器的发送和接收能力均正常。


通俗比喻

想象两个人打电话:

  1. 第一次握手:A 打电话给 B,说:“喂,能听到吗?”(SYN)。

  2. 第二次握手:B 回答:“能听到,你能听到我吗?”(SYN-ACK)。

  3. 第三次握手:A 说:“我也能听到你!”(ACK)。
    此时通话正式建立,双方可以开始聊天。


常见问题

Q1:为什么不是两次握手?

如果只有两次握手:

  • 服务器无法确认客户端是否收到了自己的确认报文。

  • 若客户端的 SYN 因网络延迟重复发送,服务器可能会建立多个无效连接。

Q2:三次握手会被攻击吗?

是的,例如 SYN 洪泛攻击(攻击者伪造大量 SYN 请求,耗尽服务器资源),但现代操作系统通过优化(如 SYN Cookie 机制)可以缓解。

Q3:TCP 断开连接需要几次挥手?

四次挥手(FIN-ACK 交互),因为 TCP 是全双工的,双方需分别关闭发送和接收通道。


总结

三次握手是 TCP 可靠传输的基石,通过简单的“发请求 → 回确认 → 再确认”机制,确保了双方通信的可靠性和一致性。


网站公告

今日签到

点亮在社区的每一天
去签到