TCP 如何保证传输的可靠性?

可靠性保障
  • 数据分块,序列号,ACK:TCP 把数据分成合适的数据块传输;每一个数据包都有唯一的序列号,根据序列号来排序保证顺序性,同时进行数据包的去重,ACK 保证数据接收。
  • 校验和:对首部和数据进行校验和,防止数据被纂改。
  • 超时重传机制:在数据包丢失或延迟的情况下,重新发送数据包,直到收到对方的确认应答(ACK)。TCP 重传机制主要有:基于计时器的重传(也就是超时重传)、快速重传(基于接收端的反馈信息来引发重传)、SACK(在快速重传的基础上,返回最近收到的报文段的序列号范围,这样客户端就知道,哪些数据包已经到达服务器了)、D-SACK(重复 SACK,在 SACK 的基础上,额外携带信息,告知发送方有哪些数据包自己重复接收了)。
  • 流量控制:通过维护发送窗口和接收窗口来维持发送方与接收方的平衡。接收方会返回当前可用大小,发送方根据这个调整自己的发送窗口,避免数据过载。是端到端的控制。
  • 拥塞控制:维护一个拥塞窗口,发送窗口取接收窗口大小和拥塞窗口大小的较小值。拥塞窗口的控制算法有慢启动、拥塞避免、快速重传和恢复,通过这些算法动态调整拥塞窗口的大小。
超时重传

发送方在一定时间内没有收到 ACK,就会重新发送。重传时间(RTO)由网络往返时间(RTT)动态计算得出,避免太快或太慢。

重传机制:

  • 定时器重传;
  • 快速重传:会返回需要重传的数据包的序列号,但是无法知道需要重传哪些;
  • SACK:在快速重传的基础上额外返回了已经接收到的序列号的区间(字段:Left Edge,Right Edge);
  • D-SACK:在 SACK 的基础上,额外告知了有哪些重复的数据包。
流量控制

通过维护发送窗口和接收窗口,来平衡二者。接收方会告知发送方剩余可用大小,发送方据此来控制发送速度,从而达到流量控制的效果。

拥塞控制

维护一个拥塞窗口,发送窗口取接收窗口大小和拥塞窗口大小的较小值。根据网络拥塞状态动态调整拥塞窗口大小,当网络出现丢包或延迟时,减慢数据发送速度。

相关推荐
羑悻的小杀马特15 分钟前
零成本搞定!异地访问 OpenClaw 最简方案:SSH 端口映射组网!
运维·服务器·人工智能·docker·自动化·ssh·openclaw
TechWayfarer15 分钟前
IP归属地运营商能解决什么问题?风控/增长/数据平台落地实践(附API代码)
开发语言·网络·python·网络协议·tcp/ip
Nyarlathotep011323 分钟前
JUC工具(3):StampedLock的基础和原理
java·后端
TechWayfarer28 分钟前
IP归属地运营商生产落地进阶:缓存+降级+灰度对账全解析
网络·python·网络协议·tcp/ip·缓存
magrich1 小时前
安装NoMachine并解决无外接显示器桌面黑屏
linux·运维·服务器
直奔標竿1 小时前
Java开发者AI转型第二十二课!Spring AI 个人知识库实战(一)——架构搭建与核心契约落地
java·人工智能·后端·spring·架构
funnycoffee1231 小时前
华为USG防火墙修改tcp aging time , default is 1200S
网络·网络协议·tcp/ip·usg aging time
清汤饺子1 小时前
【译】我的 AI 进阶之路:从怀疑到深度整合
前端·javascript·后端
fish_xk1 小时前
Linus基础指令
linux·服务器
多年小白1 小时前
日报 - 2026年4月28日(周二)
网络·人工智能·科技·深度学习·ai