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

TCP 的三次握手

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

来看下这个图:

为什么需要三次握手

有两个原因

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

避免历史错误连接的建立

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

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

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

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

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

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

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

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

相关文章:

  • 构造题(Constructive Problem)
  • 历年福州大学保研上机真题
  • 【论文阅读】KIMI-VL TECHNICAL REPORT
  • C语言中的寄存器:理解与应用
  • 2025年渗透测试面试题总结-匿名[实习]安全工程师(大厂) (2)(题目+回答)
  • OpenGL Chan视频学习-6 How Shaders Work in OpenGL
  • JVM——JNI 的运行机制
  • 【Linux】进程问题--僵尸进程
  • 神经网络加上注意力机制,精度反而下降,为什么会这样呢?注意力机制的本质是什么?如何正确使用注意力机制?注意力机制 | 深度学习
  • xml双引号可以不转义
  • 购物车系统的模块化设计:从加载到结算的全流程拆解
  • SpringBoot返回xml
  • HttpServletRequest 对象包含了哪些信息?
  • 计算机网络总结(物理层,链路层)
  • MongoDB | 零基础学习与Springboot整合ODM实现增删改查
  • docker部署XTdrone
  • 如何确定是不是一个bug?
  • HDFS存储原理与MapReduce计算模型
  • 0基础 Git 代码操作
  • Python实例题:Python打造漏洞扫描器
  • 地方网站怎么做/关键词排名优化怎么做
  • 工业设计专业怎么样/杭州优化seo公司
  • 做推广的网站/百度推广代运营公司
  • 企业线上培训平台有哪些/广州seo和网络推广
  • 苏州网络推广苏州网站建设/优化关键词的方法正确的是
  • wordpress维护插件/湖南广告优化