当前位置: 首页 > news >正文

【计算机网络】TCP三次握手

三次握手(Three-Way Handshake)是 TCP(传输控制协议) 建立连接的过程,确保通信双方能够同步序列号并确认彼此的收发能力。这个过程是 TCP 可靠性的基础,以下是三次握手的详细步骤:
如下图所示:
在这里插入图片描述


三次握手的步骤

  1. 第一次握手(SYN)

    • 客户端向服务器发送一个 SYN(Synchronize Sequence Numbers) 报文,表示请求建立连接。
    • 该报文中包含客户端的初始序列号(ISN,Initial Sequence Number)。
    • 客户端进入 SYN_SENT 状态。
      在这里插入图片描述
  2. 第二次握手(SYN + ACK)

    • 服务器收到客户端的 SYN 报文后,会回复一个 SYN + ACK 报文。
      • SYN:服务器发送自己的初始序列号(ISN)。
      • ACK:确认客户端的 SYN 报文,值为客户端的 ISN + 1。
    • 服务器进入 SYN_RECEIVED 状态。
      在这里插入图片描述
  3. 第三次握手(ACK)

    • 客户端收到服务器的 SYN + ACK 报文后,会发送一个 ACK 报文,确认服务器的 SYN 报文。
      • ACK:值为服务器的 ISN + 1。
    • 客户端进入 ESTABLISHED 状态。
    • 服务器收到 ACK 报文后,也进入 ESTABLISHED 状态。
      在这里插入图片描述

至此,TCP 连接建立成功,双方可以开始数据传输。

抓包如下图所示:在这里插入图片描述


三次握手的作用

  1. 同步序列号

    • 双方交换初始序列号(ISN),用于后续数据传输的排序和确认。
  2. 确认双方的收发能力

    • 通过三次交互,确认客户端和服务器都具有发送和接收数据的能力。
  3. 防止历史连接的干扰

    • 如果客户端发送了一个旧的 SYN 报文(由于网络延迟),服务器会回复 SYN + ACK,客户端可以根据上下文判断是否接受该连接。如果不接受,可以发送 RST 报文终止连接。

三次握手的报文结构

  • SYN 报文:标志位 SYN = 1,序列号为 ISN。
  • SYN + ACK 报文:标志位 SYN = 1,ACK = 1,序列号为服务器的 ISN,确认号为客户端的 ISN + 1。
  • ACK 报文:标志位 ACK = 1,确认号为服务器的 ISN + 1。

为什么需要三次握手?

  • 两次握手不够:如果只有两次握手,服务器无法确认客户端是否收到了自己的 SYN + ACK 报文,可能导致服务器单方面建立连接,浪费资源。
  • 防止历史连接问题:三次握手可以避免旧的 SYN 报文导致错误连接。

三次握手的缺点

  • 延迟较高:三次握手需要 1.5 RTT(Round-Trip Time)的时间,增加了连接建立的延迟。
  • SYN 泛洪攻击:攻击者伪造大量 SYN 报文,耗尽服务器资源,导致拒绝服务(DoS)。

总结

三次握手是 TCP 协议中建立可靠连接的关键步骤,通过同步序列号和确认双方的收发能力,确保数据传输的可靠性。尽管它增加了连接建立的延迟,但这是 TCP 可靠性和稳定性的重要保障。

http://www.dtcms.com/a/18993.html

相关文章:

  • GeekPad智慧屏编程控制(三)
  • 光谱相机在天文学领域的应用
  • 【Python爬虫(3)】解锁Python爬虫技能树:深入理解模块与包
  • cursor免费次数用完了怎么再续?以及如何更新机器码?
  • JavaWeb——Servlet基础
  • complete_all 简介
  • 面试真题 | 招银 C++
  • DeepSeek的API密钥怎么使用
  • 【触想智能】工业显示器和普通显示器的区别以及工业显示器的主要应用领域分析
  • Neo4j集群学习
  • C#使用文件读写操作实现仙剑五前传称号存档修改
  • 工作一个月的经历和总结
  • Unity学习part3
  • 云计算——AWS Solutions Architect – Associate(saa)7.放置群组
  • 【LeetCode Hot100 普通数组】最大子数组和、合并区间、旋转数组、除自身以外数组的乘积、缺失的第一个正整数
  • 【Black Mesa】黑山起源用服务器开服多人联机教程
  • 2025年2月15日(虚拟环境-deepseek)
  • 什么是BlockingQueue?什么是阻塞队列?它的特点是什么?阻塞队列的生产方法和消费方法有什么?
  • 最佳的出牌方法
  • PbootCMS增加可允许上传文件类型,例如webp、mov等文件格式扩展
  • [小M全新力作-修稿]PFC_LLC电源设计全攻略:从原理学习到SIMULINK仿真到EDA板实战,再到实物电源调试
  • 什么是元学习?
  • 算法思考:非0整数除法
  • 建造者模式构建对象
  • 电解电容的参数指标
  • 高频更新字段问题思路
  • 【C++】基础入门(详解)
  • CAS单点登录(第7版)9.属性
  • 关于Redis的主从复制(上)
  • 【大模型部署实战】Ollama如何保持模型常驻内存,或者显存,如何立刻释放