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

通俗解释 TCP 的三次握手、四次挥手

TCP(Transmission Control Protocol,传输控制协议)是互联网最核心的通信协议之一,相当于互联网世界的可靠快递系统;

普通如 UDP 协议:

        直接发送,不关心对方是否收到;

TCP 协议:

        三次握手建立连接;

        ACK 确认;

        丢包重传;

        四次挥手断开连接;

核心任务:

        1. 数据准确传输(不丢包、不乱序)

        2. 稳定连接(先建立连接,再传数据)

        3. 可靠通信(收到数据要回复确认)

TCP 三次握手(建立连接)

防止历史错误连接,确保双方都能收发;

把它想象成两个人(A 和 B)打电话的场景,确认对方是否能听见。

1、A 发送一个 SYN 包,表示想建立连接;

        (A打给B:能见听到吗?)

2、B 收到后回复 SYN + ACK 表示我收到了你的请求,我要也确认你能听到;

        (B回答A:我能听到,你能听到我吗?

3、A 再回复 ACK,表示确定你能听到我;

        (A回答B:我也能听到你)

连接建立成功就可以正常传输数据了!

为什么是 3 次?

2次不行:B 不知道 A 是否收到自己的回复,3次刚好确认双方都能收发数据;

TCP 四次挥手(断开连接)

因为双方可能还有数据要传,不能直接挂断;

把它想象成两个人(A 和 B)打完电话的场景,要挂断电话。

1、A 发送FIN 表示自己不再发送数据了;

        (A对B说:我说完了,要挂了)

2、B 先回复 ACK 表示收到你的结束请求;

        (B回答A:好的,我知道了)

3、B 可能还有数据要传,等传完后也发 FIN 表示结束;

        (B对A说:我也说完了,我也要挂了)

4、A 最后回复 ACK 确认 B 可以关闭连接;

        (A回答B:好的 拜拜)

为什么是 4  次?

因为 TCP 是全双工(双方可以同时收发数据),所以必须分别确认关闭,B 可能还有数据要传,不能直接挂断,所以比握手多一步!

TCP工作场景:

       网页浏览(HTTP)、文件传输(FTP)、电子邮件(SMTP)、远程登录(SSH)

不适用场景:

视频直播(UDP更合适)、网络游戏(部分实时操作用UDP)、VoIP语音通话(少量丢包不影响理解)

-------------------------------------------------手动分割线-------------------------------------------------

SYN(Synchronize,同步序列号)

用来发起一个新连接,同步双方的初始序列号;

三次握手中客户端和服务端各发送一次 SYN,携带初始序列号,用于后续数据顺序控制;

ACK(Acknowledgment,确认)

确认已收到对方的数据包;

除了初始 SYN 包外,TCP 通信中几乎每个包都设置 ACK 位,携带确认号,表示期望收到的下一个字节的序号;

FIN(Finish,结束)

用来正常关闭TCP连接;

发送 FIN 表示本方不再发送数据,但还可以接受数据,需要对方确认才能完全关闭连接;

当你在浏览器输入网址时,背后是TCP在默默确保每个网页元素都完整加载

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

相关文章:

  • 《深度探索:数据库树形数据遍历与节点更新的游标之道》
  • 在PyTorch中使用GPU加速:从基础操作到模型部署
  • React-01React创建第一个项目(npm install -g create-react-app)
  • 【扣子agent入门】搭建计算热量工作流
  • 【QT】构建项目
  • DIY搭建网站(学术个人介绍主页)
  • 2025年大模型与Transformer架构:重塑AI未来的科技革命
  • docker的入门以及使用
  • unity运行中场景指定模型回放功能(模型是地形并且可以加载预制体进行回放)
  • Java面试黄金宝典30
  • 无需安装Office进行 Word、Excel操作的微软开发库
  • MySQL 锁机制:数据库的交通管制系统
  • 2023年12月电子学会青少年软件编程图形化三级考级真题—打砖块游戏
  • 用Rust和WebAssembly打造轻量级前端加密工具
  • RNN模型与NLP应用——(7/9)机器翻译与Seq2Seq模型
  • SOME/IP-SD -- 协议英文原文讲解9(ERROR处理)
  • GitHub二次验证登录2FA(Enable two-factor authentication )
  • 手搓多模态-01 对比损失的优化
  • python网络爬虫开发实战之数据的存储
  • spring-security原理与应用系列:HttpSecurity.filters
  • 【算法中的数学】欧拉筛埃氏筛
  • 游戏引擎学习第194天
  • SpringBoot+Vue 中 WebSocket 的使用
  • LLM大模型教程——什么是AI大模型
  • 企业linux常用服务搭建
  • 数据结构每日一题day10(链表)★★★★★
  • Ansible(3)——主机清单与配置文件
  • 【高项】信息系统项目管理师(十四)配置与变更管理【3分】
  • unity点击button后不松开通过拖拽显示模型松开后模型实例化
  • 【工业场景】用YOLOv12实现饮料类别识别