侧边栏壁纸
博主头像
colo

欲买桂花同载酒

  • 累计撰写 1823 篇文章
  • 累计收到 0 条评论

简述TCP三次握手的过程及目的

2025-12-11 / 0 评论 / 4 阅读

题目

简述TCP三次握手的过程及目的

信息

  • 类型:问答
  • 难度:⭐

考点

TCP连接建立,三次握手原理,网络基础协议

快速回答

TCP三次握手是建立可靠网络连接的过程:

  1. SYN:客户端发送SYN包(序列号=x)到服务器
  2. SYN-ACK:服务器回复SYN-ACK包(序列号=y,确认号=x+1)
  3. ACK:客户端发送ACK包(确认号=y+1)完成连接

核心目的:确保双方收发能力正常,同步初始序列号,防止历史连接错误。

解析

原理说明

TCP三次握手是面向连接的协议建立可靠通信的基础:

  1. 第一次握手 (SYN):客户端随机生成初始序列号(seq=x),发送SYN=1标志的数据包,进入SYN_SENT状态
  2. 第二次握手 (SYN+ACK):服务器收到SYN后,随机生成自己的序列号(seq=y),设置ACK=x+1(确认客户端序列号),SYN=1,进入SYN_RECEIVED状态
  3. 第三次握手 (ACK):客户端验证ACK值(x+1)正确后,发送ACK=y+1,服务器验证后双方进入ESTABLISHED状态

关键作用

  • 可靠性验证:双向确认双方的发送和接收能力
  • 序列号同步:交换初始序列号(ISN)保证数据有序传输
  • 防历史连接干扰:通过序列号验证避免旧连接报文干扰新连接

报文结构示例

# 第一次握手 (客户端 → 服务器)
[SYN] Seq=0 (实际为随机值)

# 第二次握手 (服务器 → 客户端)
[SYN, ACK] Seq=0, Ack=1 (实际为随机值)

# 第三次握手 (客户端 → 服务器)
[ACK] Seq=1, Ack=1

常见错误

  • SYN Flood攻击:恶意客户端发送大量SYN不回复ACK,耗尽服务器资源
  • 序列号预测风险:简单递增的序列号可能被劫持会话
  • 连接超时:未收到SYN-ACK时客户端会重试(默认5-6次)

最佳实践

  • 使用随机化初始序列号增强安全性
  • 服务器配置SYN Cookie机制防御洪水攻击
  • 合理设置TCP连接超时参数(Linux默认60秒)

扩展知识

  • 四次挥手:连接终止需要FIN+ACK四次交互
  • UDP对比:无连接协议无需握手,但不可靠
  • TCP状态机:包含LISTEN、SYN_SENT、ESTABLISHED等11种状态
  • Wireshark抓包:可通过过滤器tcp.flags.syn==1 and tcp.flags.ack==0观察握手过程