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

TCP 如何保证可靠性

TCP(Transmission Control Protocol)是一种面向连接、可靠、基于字节流的传输层协议。它在不可靠的 IP 网络之上,通过一系列机制来保证数据能够可靠、按序、不重复地传输给对方。


一、TCP 可靠性的定义

可靠性是指:

数据从发送端传输到接收端时,确保数据不丢失、不重复、不乱序。

TCP 相比 UDP 正是通过引入连接管理数据确认机制重传机制等手段来实现这一点。


二、TCP 如何保证可靠性(核心机制)

三次握手建立连接

  • 通过三次握手确保:
    • 通信双方都有接收和发送能力。
    • 序列号初始值(ISN)协商完毕。
  • 防止历史连接请求被误当作当前连接。
Client --> [SYN] --> Server
Client <-- [SYN+ACK] <-- Server
Client --> [ACK] --> Server

序列号和确认号机制(按序传输)

  • 序列号(SEQ):标识每个字节在数据流中的位置。
  • 确认号(ACK):接收方告知发送方下一个期望的字节序号。

例:

Client 发送 SEQ=1, LEN=100
Server 回复 ACK=101 表示已收到前100字节

保证了数据的顺序性和完整性。


校验和(Checksum)

  • 每个 TCP 报文段都带有一个 校验和字段
  • 用于检测数据在传输过程中是否被篡改或损坏。

如果校验失败,数据包会被丢弃,等待重传。


确认应答机制(ACK)

  • 每接收一个数据段,接收方就会发送一个 ACK 报文作为确认。
  • 支持累计确认(确认到某个序号,表示之前的数据都收到了)。

实现了“发—收—确认”的可靠传输流程。


超时重传机制(RTO)

  • 发送方发送数据后若在超时时间内未收到 ACK,则自动重发该数据。
  • 重传时间基于动态估算的 RTT(往返时间)

保证即使 ACK 丢失,数据也不会丢失。


快速重传(Fast Retransmit)

  • 如果接收方连续收到 3 个相同的 ACK(称为 冗余 ACK),
  • 说明某个数据段可能丢失了,立即重传,不等待超时。

提升了网络性能和响应速度。


滑动窗口机制(流量控制)

  • 接收方通过 Window Size 告诉发送方自己还有多少接收缓冲区。
  • 发送方根据窗口限制控制发送速率,避免接收方被淹没。

保证接收方不会因处理不过来而丢包。


拥塞控制机制(网络拥堵控制)

TCP 提供如下拥塞控制算法:

  • 慢启动(Slow Start)
  • 拥塞避免(Congestion Avoidance)
  • 快速重传(Fast Retransmit)
  • 快速恢复(Fast Recovery)

避免因网络过载而导致大量丢包,从而保证传输的稳定性和可靠性。


三、TCP 可靠传输的核心流程图

连接建立(三次握手)↓
数据发送(序列号 + 校验和)↓
接收确认(ACK)↓
丢包重传(RTO / 快速重传)↓
流控 + 拥控(窗口机制)↓
连接断开(四次挥手)

四、TCP vs UDP 对比(可靠性)

特性TCPUDP
是否连接是(需三次握手)否(无连接)
是否可靠传输是,重传 + 校验 + 顺序否,尽力而为
是否保证顺序是(按序传输)否(可能乱序)
传输效率相对低相对高
场景文件传输、HTTP、IM视频、语音、游戏等

五、面试总结

面试问题建议回答
TCP 如何保证数据可靠性?从三次握手、确认机制、重传机制、滑动窗口、拥塞控制等方面回答
如果 ACK 丢失怎么办?发送方会在超时后重传数据
TCP 如何处理乱序数据?接收方根据序列号排序,丢弃重复数据
TCP 校验和检测什么?校验 IP 头、TCP 头和数据部分是否损坏

六、结语

TCP 通过一整套机制(序列号、确认、重传、窗口、握手等)来确保不可靠的 IP 网络上传输的每一字节都准确无误。这也是它在需要可靠传输的场景中被广泛使用的原因。

http://www.lryc.cn/news/612975.html

相关文章:

  • FluentUI-main的详解
  • 多账号管理方案:解析一款免Root的App分身工具
  • B-树与B+树
  • 动力电池点焊机:效率质量双提升,驱动新能源制造升级
  • Dify 从入门到精通(第 20/100 篇):Dify 的自动化测试与 CI/CD
  • Oracle exp imp expdp impdp 命令详解
  • PCB制造中压接孔、插接孔、沉头孔、台阶孔的区别及生产流程
  • 《C语言》函数练习题--1
  • 基于大数据的美食视频播放数据可视化系统 Python+Django+Vue.js
  • Vscode Data Wrangler 数据查看和处理工具
  • GitHub 上 Star 数量前 20 的开源 AI 项目
  • 中国MCP市场:腾讯、阿里、百度的本土化实践
  • 医疗人效管理新标杆:盖雅工场如何赋能健康服务企业提质增效
  • Java 大视界 -- Java 大数据在智能教育在线课程互动优化与学习体验提升中的应用(386)
  • 一篇文章用大白话带初学者搞清训练集、测试集及验证集关系及场景逻辑(包清楚)
  • LLMs api价格对比平台
  • --- Eureka 服务注册发现 ---
  • 【第7话:相机模型3】自动驾驶IPM图像投影拼接技术详解及代码示例
  • TikTok Shop冷启动破局战:亚矩阵云手机打造爆款账号矩阵
  • AWS RDS自定义终端节点深度分析工具:Python脚本详解
  • 手机控制断路器:智能家居安全用电的新篇章
  • STM32HAL 快速入门(一):点灯前的准备 —— 从软件安装到硬件原理
  • 云手机存在的意义是什么?
  • 数字取证:可以恢复手机上被覆盖的数据吗?
  • 【macOS操作系统部署开源DeepSeek大模型,搭建Agent平台,构建私有化RAG知识库完整流程】
  • 如何提高云手机中数据信息的安全性?
  • Git Status 命令深度指南:洞悉仓库状态的核心艺术
  • Flutter开发 Slider组件(如音量控制)
  • C语言strncmp函数详解:安全比较字符串的实用工具
  • 使用Cloud Document Converter将飞书文档导出为markdown