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

TCP为什么需要三次握手,两次不行吗?

 TCP三次握手的大至流程

  1. 第一次握手:客户端发送网络包,服务端收到了。这样服务端就能得出结论:客户端的发送能力、服务端的接收能力是正常的。
  2. 第二次握手:服务端发包,客户端收到了。这样客户端就能得出结论:服务端的接收、发送能力,客户端的接收、发送能力是正常的。不过此时服务器并不能确认客户端的接收能力是否正常。
  3. 第三次握手:客户端发包,服务端收到了。这样服务端就能得出结论:客户端的接收、发送能力正常,服务器自己的发送、接收能力也正常。

TCP三次握手的目的

  • 确认双方收发能力:通过三次握手,客户端和服务器能确认彼此的发送和接收功能正常。第一次握手,客户端发送 SYN 包给服务器,服务器可确认客户端有发送能力,自己有接收能力;第二次握手,服务器回复 SYN+ACK 包,客户端收到后能确认自己有接收能力,服务器有发送和接收能力;第三次握手,客户端发送 ACK 包,服务器收到后能确认自己有发送能力,客户端有接收能力 。
  • 协商连接参数:在握手过程中,双方可以协商一些重要的连接参数。如获取对方报文发送的开始序号,以便后续对数据进行排序和确认;了解对方发送数据的缓冲区大小,避免发送数据过快导致对方缓冲区溢出;知晓能被接收的最大报文段长度(MSS),从而确定每次发送数据的合适大小;还能确认对方能否使用选择确认(SACK)、窗口缩放等选项,优化数据传输过程。
  • 建立可靠连接:TCP 是面向连接的可靠传输协议,三次握手能在客户端和服务器之间建立起一条逻辑上的虚连接。只有在三次握手成功完成,双方进入 established(已建立连接)状态后,才开始正式的数据传输,从而为后续可靠的数据传输提供基础。
  • 避免历史连接干扰:可防止旧的重复连接请求报文段在网络中滞留,影响新连接的建立。比如网络延迟导致之前的连接请求在新连接建立时才到达服务器,若没有三次握手机制,服务器可能会错误地认为是新的连接请求并建立连接,而三次握手能让双方对连接的有效性进行确认,避免这种情况发生。

假使我们使用了两次握手会导致:

  • 连接建立不可靠:无法确保双方都能确认对方的接收能力。比如缺少第二次握手,客户端就不知道服务端是否收到连接请求,难以建立连接;缺少第三次握手,服务端无法确认客户端收到自己的应答,可能出现服务端认为连接已建立,但客户端实际未确认的情况,导致后续数据传输出现问题。
  • 数据传输异常:由于不能确认双方的接收状态,可能会造成数据包丢失或重复接收,影响数据传输的准确性和完整性。
  • 安全风险增加:减少握手次数可能会遭受攻击的风险增大,例如 SYN 洪泛攻击。攻击者可不断向服务器发送 SYN 包请求建立连接,但不完成后续握手步骤,耗尽服务器的连接资源,使其无法为正常用户提供服务。

http://www.kler.cn/a/571442.html

相关文章:

  • SpringCloud系列教程(十二):网关配置动态路由
  • 前端怎么排查幽灵依赖
  • k8s面试题总结(九)
  • Spring Boot 与 MyBatis 版本兼容性
  • 三维重建(十五)——多尺度(coarse-to-fine)
  • 【开源-常用C/C++命令行解析库对比】
  • Python 的 json 模块可以帮助你把数据在两种格式之间转换
  • Qt C++ 开发 动态上下页按钮实现
  • 嵌入式学习l4day3
  • ​Unity插件-Mirror使用方法(六)组件介绍(​Network Transform)
  • Spring Cloud生态
  • 高频 SQL 50 题(基础版)_1341. 电影评分
  • 八、Redis 过期策略与淘汰机制:深入解析与优化实践
  • flutter-制作淡入淡出的Banner切换Fade效果
  • windows环境执行composer install出错
  • 轮播图案例
  • C++20中的std::bind_front使用及原理分析
  • 小米 SU7 Ultra:科技与性能的极致融合,FPC 隐匿的关键力量【新立电子】
  • Windows逆向工程入门之MASM STRUCT
  • Visual Studio Code 如何编写运行 C、C++ 程序