TCP可靠传输怎么实现的

我们都知道 TCP 是可靠的,UDP 是不可靠的。但 TCP 到底凭什么可靠?它在底层到底做了哪些努力?

这篇文章带你一次性吃透 TCP 保证可靠传输的 6 大核心机制,原理 + 流程 + 专业描述全部到位。


引言:什么是 "可靠传输"?

可靠传输 = 数据不丢、不乱、不重、不坏。TCP 就是通过一整套严密机制,在不可靠的 IP 网络之上,实现了可靠的数据通信。

下面是 TCP 可靠性的6 大核心机制


1. 序列号与确认应答(ACK)

这是 TCP 可靠传输的基础

  • 序列号(seq) 发送的每个字节数据都会有一个唯一编号,按顺序递增。作用:保证按序到达去重

  • 确认应答(ACK) 接收方收到数据后,必须回复一个确认号:ack = 期望收到的下一个字节序号告诉发送方:之前的数据我已经收到了。

  • 例子:发送方发送 seq=100 的 100 字节数据接收方回复 ack=200表示:100~199 字节已收到,等待 200 开始。

作用:确认数据一定收到。


2. 超时重传

这是 TCP 应对丢包的机制。

  • 发送方发完数据后启动定时器
  • 如果超时没有收到 ACK
  • 就认为报文丢失,自动重传

超时时间会动态计算(RTT 平滑值),不会乱重传、不会频繁重传。

作用:丢了就重发,保证数据不丢失。


3. 流量控制(滑动窗口)

作用:防止接收方被 "撑爆"

  • 接收方在 ACK 里告诉发送方:Window Size(窗口大小)意思是:我还能收多少数据。

  • 发送方根据窗口大小控制发送速度

  • 接收方处理变慢 → 窗口变小

  • 接收方处理变快 → 窗口变大

作用:按需发送,不溢出、不丢失。


4. 拥塞控制

作用:防止网络拥堵崩溃

如果网络本身堵了,发送方还疯狂发数据,会导致大规模丢包。TCP 拥塞控制通过 4 个算法保证网络平稳:

  • 慢启动:刚开始慢,探测网络
  • 拥塞避免:线性提速,防止过载
  • 快重传:收到 3 个重复 ACK,立刻重传,不等超时
  • 快恢复:快速恢复速率,不 "断流"

作用:保护网络,让传输更稳定。


5. 连接管理:三次握手 + 四次挥手

TCP 是面向连接的协议,连接必须可靠建立、可靠关闭。

  • 三次握手 建立连接,同步双方序列号(ISN)确保双方发送、接收能力都正常

  • 四次挥手优雅断开,保证双方数据都传输完不丢数据、不截断

  • **TIME-WAIT(2MSL)**确保最后一个 ACK 到达对方防止旧报文干扰新连接

作用:连接本身必须可靠。


6. 校验和

作用:保证数据不损坏

  • 每个 TCP 报文都会计算校验和
  • 接收方收到后校验数据是否完整
  • 校验失败 → 直接丢弃 → 不回复 ACK → 触发发送方重传

作用:数据传输出错了就丢掉重传,保证正确性。

相关推荐
Dear~yxy15 分钟前
时间同步服务器搭建
运维·服务器
春卷同学20 分钟前
HarmonyOS掌上记账APP开发实践第25篇:Image 组件高级用法 — 资源引用、网络图片与首字符占位方案
网络·华为·harmonyos
mounter62521 分钟前
从内存隔离到运行时防线:透视 Linux 内核安全强化的博弈与演进
linux·网络·安全·linux kernel·kernel
wbs_scy1 小时前
仿 muduo 高并发服务器项目:实现 LoopThread 与 LoopThreadPool 多线程事件循环
运维·服务器
微道道1 小时前
Linux盒子局域网内使用 .local 域名访问,告别IP变化烦恼
linux·运维·服务器·hermes
广州灵眸科技有限公司2 小时前
瑞芯微RV1126B开发板(EASY-EAI-PI2) 系统操作-线进程操作
数据库·单片机·嵌入式硬件·算法·php
Bug退散师2 小时前
多路IO复用[select版TCP服务器与poll版TCP服务器]与常用网络编程函数详解
linux·服务器·c语言·网络·驱动开发·tcp/ip
国服第二切图仔3 小时前
05-构建与特性开关
linux·服务器·ubuntu
Acrellea4 小时前
固态变压器(SST)热管理破局:安科瑞交直流专属测温方案护航无人值守运维
运维·网络
振浩微433射频芯片4 小时前
5个IO控制20个LED?查理复用实战拆解
网络·单片机·物联网·学习·智能家居