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

TCP 的三次握手

具体流程文字描述就是:客户端首先发送一个SYN(同步序列编号)消息给服务器,服务器收到后回复一个SYN-ACK(同步序列编号-确认)消息,最后客户端再发送一个ACK(确认)消息确认服务器已经收到SYN-ACK消息,从而完成三次握手,建立起一个可靠的TCP连接。

来看下这个图:

为什么需要三次握手

有两个原因

  • 避免历史错误连接的建立,减少通信双方方不必要的资源消耗。
  • 帮助通信双方同步初始化序列号。

避免历史错误连接的建立

如果只有两次握手,那么接收方只能接受或者拒绝,如果网络比较拥堵,发送方可能会发送多次建立请求的连接,而这时接收方并不知道这次请求是旧的还是新的。

所以需要接收方发送 ACK (确认报文)来告知发送方自己收到的是那一次连接。

帮助通信双方同步初始化序列号

因为网络本身的不稳定性可能为导致:

  • 数据丢失
  • 数据重复传输
  • 数据乱序

而 TCP 是一个可靠传输协议,它需要保证数据不丢失且有序的传输。基于上述的问题,TCP 引入了序列号,它使得:

  • 接收方可以根据序列号去重
  • 接收方可以根据序列号排序
  • 发送方针对为接收到 ACK 的序列号对应的数据包,可以重传

序列号是有序的,因此在通信的初始化阶段,双方就需要同步序列号,不然数据后面就都对不上了。

http://www.xdnf.cn/news/640711.html

相关文章:

  • Python Day32 学习
  • 十二、【鸿蒙 NEXT】如何使用系统api实现视频压缩
  • 电子电路:电学都有哪些核心概念?
  • Oracle控制文件损坏恢复方案
  • dify_plugin数据库中的表总结
  • threejs几何体BufferGeometry顶点
  • 【报错】Error attempting to get column ‘created_time‘ from result set.解决方法
  • 手撕string类
  • 汉诺塔超级计算机堆栈区与数据区的协同
  • Docker(零):本文为 “Docker系列” 有关博文的简介和目录
  • Docker核心笔记
  • JavaWeb:SpringBoot配置优先级详解
  • 互联网大厂Java求职面试:AI应用集成中的RAG系统优化与向量数据库性能调优实战
  • 英语科研词汇的困境与汉语的崛起之光
  • 漫谈英伟达GPU架构进化史:从Celsius到Blackwell
  • vue3中使用watch
  • 什么是智能体agent?
  • Anaconda 常用命令汇总
  • Mongo DB | 多种修改数据库名称的方式
  • 明阳智慧能源社招校招入职测评 |iLogic言语逻辑数字、Talent5大五职业性格测评、TAS倍智人才测评考什么
  • 资源-又在网上淘到金了-三维模型下载
  • CodeTop之LRU缓存
  • SQL JOIN
  • 4款顶级磁力下载工具,速度提升器,可以变下变播
  • 【RocketMQ 生产者和消费者】- 生产者发送故障延时策略
  • MATLAB在逐渐被Python淘汰吗
  • 【Java高阶面经:缓存篇】35、 Redis单线程 vs Memcached多线程:高性能内存数据库设计解析
  • ComfyUI进行海报创作
  • 【Linux 学习计划】-- 冯诺依曼体系 | 操作系统的概念与定位,以及其如何管理软件
  • Reactor模式详解:高并发场景下的事件驱动架构